更新 /etc/sudoers 文件的语法

更新 /etc/sudoers 文件的语法

下面几行有什么区别。

user1 ALL=(ALL) NOPASSWD: /etc/init.d/service-script
user1 ALL=NOPASSWD:/etc/init.d/service-script

两条线都正确并且有什么区别吗?我需要向 user1 提供 sudo 访问权限来执行服务脚本。

答案1

第一行有正确的语法。

user1 ALL=(ALL) NOPASSWD: /etc/init.d/service-script

这意味着:在所有使用此文件的主机上,user1 可以成为无需密码请求/etc/sudoers即可运行的所有用户。/etc/init.d/service-script

第二行的语法不正确,至少对于现代版本的sudo.如果您/etc/sudoers使用推荐的visudo命令进行编辑,则在退出您喜欢的编辑器后,您会收到类似以下内容的消息:

File /etc/sudoers.tmp saved
>>> /etc/sudoers: syntax error near line 28 <<<
What now?

通过输入问号,您将得到一个选项列表:

Options are:
  (e)dit sudoers file again
  e(x)it without saving changes to sudoers file
  (Q)uit and save changes to sudoers file (DANGER!)

What now? 

最好选择“e”并删除不正确的行,或者选择“x”以放弃这次所做的所有编辑。

您可能需要在文件中键入这样的注释,/etc/sudoers以提醒您正确的语法:

# WHO  WHERE = (AS WHOM) WHAT

(AS WHOM)WHAT部分之间,您可以选择添加一些以冒号结尾的标记,这些标记可能会影响过程的某些细节。

由于服务脚本位于 /etc/init.d 中,因此它显然旨在以 root 身份运行。所以“最佳”/etc/sudoers 行是:

user1 ALL=(root) NOPASSWD: /etc/init.d/service-script

用户应将其运行为:

sudo /etc/init.d/service-script

或明确地

sudo -u root /etc/init.d/service-script

允许在命令行末尾添加参数。

答案2

两者都会执行您所期望的操作,不同之处在于第一个将允许 user1 作为任何其他用户运行该命令。在第二个中,该命令将以 root 身份运行(这更可能是您所期望的)。

相关内容