Sudoers统治没有如预期的那样开火

我想允许用户visit以用户admin身份运行命令,但只能位于特定目录中的命令。
所以我将下面的规则添加到sudoers文件中:

visit localhost=(admin) NOPASSWD: /home/admin/

目录/ home / admin /里有两个文件: cmd.shdummy.txt
cmd.sh的内容是:

我是谁
触摸dummy.txt

然后我以用户visit身份login并键入:

sudo -u admin /home/admin/cmd.sh

和输出的是:

pipe理
触摸:不能触摸`dummy.txt':权限被拒绝

但是,如果我以admin身份login并键入./cmd.sh ,则输出为:

pipe理

dummy.txt成功触及

为什么用户在使用sudo时无法visit admin的文件?

对于cmd.sh的内容:

 whoami touch dummy.txt 

加:

 pwd 

我怀疑,当用户“访问”与sudo运行脚本它没有运行在你认为它是目录。 你可以通过传递tuuch命令的完整path来解决这个问题,例如,

 touch /home/admin/dummy.txt 

您的触摸命令中没有完全限定dummy.txt的path。 我的猜测是,您正在从“admin”没有写入权限的位置运行脚本。

 sudo -u admin /home/admin/cmd.sh 

你要告诉sudo运行cmd.sh作为你当前目录中的admin用户,你的描述中的admin用户可能是访问的主目录。 admin对访问主目录没有写权限,所以失败。