我想允许用户visit
以用户身份运行命令admin
,但只能运行位于特定目录中的命令。
因此,我在 sudoers 文件中添加了以下规则:
visit localhost=(admin) NOPASSWD: /home/admin/
目录内/主页/管理员/有两个文件:cmd.sh
和dummy.txt
的内容cmd.sh
是:
whoami
触摸假人.txt
然后我以用户身份登录visit
并输入:
sudo -u admin /home/admin/cmd.sh
输出结果为:
管理员
触摸:无法触摸“dummy.txt”:权限被拒绝
但如果我以 身份登录admin
并输入./cmd.sh
,则输出为:
行政
并dummy.txt
成功触及
为什么用户使用 sudo 时visit
无法触碰 的文件?admin
答案1
到cmd.sh的内容:
whoami
touch dummy.txt
添加:
pwd
我怀疑当用户“visit”使用 sudo 运行脚本时,它并没有在你认为的目录中运行。你可以通过将完整路径传递给 tuuch 命令来解决这个问题,例如,
touch /home/admin/dummy.txt
答案2
您没有在 touch 命令中完全限定 dummy.txt 的路径。我猜您是从“admin”没有写入权限的位置运行脚本的。
答案3
sudo -u admin /home/admin/cmd.sh
您告诉 sudo 以管理员用户身份在当前目录中运行 cmd.sh,根据您的描述,该目录可能是 visit 的主目录。管理员没有 visit 主目录的写权限,因此失败。