如何在没有密码提示的情况下以 root 身份运行特定程序?

如何在没有密码提示的情况下以 root 身份运行特定程序?

我需要在没有密码的情况下以 sudo 方式运行某些内容,因此我使用了visudo它并将其添加到我的sudoers文件中:

MYUSERNAME ALL = NOPASSWD: /path/to/my/program

然后我尝试了一下:

$ sudo /path/to/my/program
[sudo] password for MYUSERNAME: 

为什么它要求输入密码?如何以非 root 用户身份以 root 身份运行/使用命令,而不要求输入密码?

答案1

如果 中存在多个匹配条目/etc/sudoers,则 sudo 使用最后一个。因此,如果您可以在有密码提示的情况下执行任何命令,并且希望能够在没有密码提示的情况下执行特定命令,则最后需要例外。

myusername ALL = (ALL) ALL
myusername ALL = (root) NOPASSWD: /path/to/my/program

请注意使用(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)。

答案2

您还有另一个条目sudoers文件,通常位于/etc/sudoers,它也与您的用户匹配。该NOPASSWD规则需要位于该规则之后才能使其优先。

完成此操作后,sudo通常会提示输入除 之外的所有命令的密码/path/to/my/program,它总是让您运行而无需询问密码。

答案3

警告:这个答案被认为是不安全的。请参阅下面的评论

完整的解决方案:以下步骤将帮助您实现所需的输出:

  1. 创建一个新的脚本文件(替换create_dir.sh为您想要的脚本名称):

    vim ~/create_dir.sh
    

    该脚本将在用户的主目录中创建

  2. root添加一些只有用户才能执行的命令,sudo例如在根目录级别创建文件夹:

    mkdir /abc
    

    笔记:不要添加sudo到这些命令中。保存并退出(使用:wq!

  3. 使用以下命令为其分配执行权限:

    sudo chmod u+x create_dir.sh
    
  4. 进行更改以使该脚本不需要密码。

    1. 打开sudoers文件:

      sudo visudo -f /etc/sudoers
      
    2. 在末尾添加以下行:

      ahmad ALL=(root) NOPASSWD: /home/ahmad/create_dir.sh
      

      替换ahmad为您的用户名。还要确保这是最后一行。保存并退出。

  5. 现在,当运行命令时,sudo在它之前添加:

    sudo ./create_dir.sh
    

    这将运行脚本文件内的命令,而不要求输入密码。

请按照此处提到的简单步骤进行操作http://step4wd.com/2013/09/14/run-root-commands-in-linux-ubuntu-without-password/

答案4

我认为你的语法是错误的。至少我使用以下对我有用的方法:

myusername ALL=(ALL) NOPASSWD: /path/to/executable

相关内容