下面几行有什么区别。
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 身份运行(这更可能是您所期望的)。