我试图允许特定用户运行其中包含的特定.sh
文件sudo chmod
。
我已遵循本指南:如何使用 sudoers 文件允许在没有密码的情况下为特定用户执行命令?
我的 sudoers 文件现在看起来像这样:
the_user ALL=(ALL:ALL) NOPASSWD: /var/www/html/storage/fix_cache_permissions.sh
但是,当我运行命令时:
sh /var/www/html/storage/fix_cache_permissions.sh
它死于此错误:
sudo: no tty present and no askpass program specified
更新
.sh
在运行命令时,我尝试在文件内部和外部都使用 sudo 。两者都会导致相同的错误消息。
你在这里遗漏了一些东西。sudoers 文件指的是
sudo
命令。通过运行sh yourprogram.sh
您没有使用该sudo
命令,您使用的sh
是随后将使用该命令的命令sudo
。因此,完成您想要的正确方法是将脚本标记为可执行文件,以便用户可以编写
这不会要求输入密码。
笔记:
由于您收到此错误,这意味着您没有从某种终端运行命令。如果它不要求输入密码,那么我认为这不会是一个问题。
sudoers 文件中命令的顺序很重要,它们相互覆盖。这意味着如果你写你的命令,然后在文件中会有这样的东西:
这将覆盖任何内容。所以把你的行放在 sudoers 文件的最后几行。
使用这种方法,您实际上可以删除文件中的 sudo,因为所有脚本都将以 root 身份运行。
接受的答案指出您必须使用
sudo
系统的绝对文件路径。如果您有能力更改相关脚本,则可以添加以下内容:如果当前用户不是 root,这具有重新启动脚本的效果,使用 sudo 和绝对路径。
实际上,这允许您将脚本称为
sh /var/www/html/storage/fix_cache_permissions.sh
甚至./fix_cache_permissions.sh