我需要在没有密码的情况下以 sudo 的形式运行一些东西,所以我使用visudo并将其添加到我的sudoers文件中:
MYUSERNAME ALL = NOPASSWD: /path/to/my/program
Run Code Online (Sandbox Code Playgroud)
然后我试了一下:
$ sudo /path/to/my/program
[sudo] password for MYUSERNAME:
Run Code Online (Sandbox Code Playgroud)
为什么它要求输入密码?如何在不要求密码的情况下以非 root 用户身份以 root 身份运行/使用命令?
Gil*_*il' 163
如果 中有多个匹配条目/etc/sudoers,则 sudo 使用最后一个。因此,如果您可以在有密码提示的情况下执行任何命令,并且希望能够在没有密码提示的情况下执行特定命令,那么您需要最后一个例外。
myusername ALL = (ALL) ALL
myusername ALL = (root) NOPASSWD: /path/to/my/program
Run Code Online (Sandbox Code Playgroud)
请注意使用(root), 以允许程序以 root 身份运行,但不能以其他用户身份运行。(除非您已经考虑到影响,否则不要授予超过最低要求的权限。)
未运行 Ubuntu 或更改了默认 sudo 配置(Ubuntu 的 sudo 默认可以)的读者请注意:以提升的权限运行 shell 脚本有风险,您需要从干净的环境开始(一旦 shell 启动,为时已晚(请参阅在 shell 脚本上允许 setuid),因此您需要 sudo 来处理此问题)。确保您有Defaults env_resetin/etc/sudoers或此选项是编译时默认值(sudo sudo -V | grep env应包含Reset the environment to a default set of variables)。
小智 27
完整的解决方案:以下步骤将帮助您实现所需的输出:
创建一个新的脚本文件(替换create_dir.sh为您想要的脚本名称):
vim ~/create_dir.sh
Run Code Online (Sandbox Code Playgroud)
该脚本将在用户的主目录中创建
添加一些只有 aroot或sudo用户才能执行的命令,例如在根目录级别创建文件夹:
mkdir /abc
Run Code Online (Sandbox Code Playgroud)
注意:不要添加sudo到这些命令中。保存并退出(使用:wq!)
使用以下命令为其分配执行权限:
sudo chmod u+x create_dir.sh
Run Code Online (Sandbox Code Playgroud)进行更改,以便此脚本不需要密码。
打开sudoers文件:
sudo visudo -f /etc/sudoers
Run Code Online (Sandbox Code Playgroud)在最后添加以下行:
ahmad ALL=(root) NOPASSWD: /home/ahmad/create_dir.sh
Run Code Online (Sandbox Code Playgroud)
替换ahmad为您的用户名。还要确保这是最后一行。保存并退出。
现在在运行命令sudo之前添加时,例如:
sudo ./create_dir.sh
Run Code Online (Sandbox Code Playgroud)
这将在不要求密码的情况下运行脚本文件中的命令。
按照这里提到的简单步骤http://step4wd.com/2013/09/14/run-root-commands-in-linux-ubuntu-without-password/
mus*_*iKk 12
我认为你的语法是错误的。至少我使用以下对我有用的方法:
myusername ALL=(ALL) NOPASSWD: /path/to/executable
Run Code Online (Sandbox Code Playgroud)
小智 11
如果您想避免使用 sudo 或更改 sudoers 配置文件,您可以使用:
sudo chown root:root path/to/command/COMMAND_NAME
sudo chmod 4775 path/to/command/COMMAND_NAME
Run Code Online (Sandbox Code Playgroud)
这将使命令以 root 身份运行而无需 sudo。
如果您有像 Manjaro 这样的发行版,您必须首先处理一个覆盖 /etc/sudoers 定义的文件,您可以删除它或直接使用该文件添加新配置。
这个文件是:
sudo cat /etc/sudoers.d/10-installer
Run Code Online (Sandbox Code Playgroud)
查看它的唯一方法是在 root 权限下,没有它你不能列出这个目录,这个文件是 Manjaro 特定的,你可能会发现这个配置有其他名称,但在同一目录中。
在您选择的文件中,您可以添加以下行以获得所需的配置:
忽略组的身份验证
%group ALL=(ALL) NOPASSWD: ALL
Run Code Online (Sandbox Code Playgroud)
或忽略用户的身份验证
youruser ALL=(ALL) NOPASSWD: ALL
Run Code Online (Sandbox Code Playgroud)
或忽略对特定用户的可执行文件的身份验证
youruser ALL=(ALL) NOPASSWD: /path/to/executable
Run Code Online (Sandbox Code Playgroud)
快速说明:您正在打开一扇门,无需身份验证即可使用 SUDO,这意味着您可以运行所有内容,修改系统中的所有内容,并负责任地使用它。