我需要一个新用户sudo
无需输入任何密码即可执行,因为该用户拥有crontab
一些用于命令的.sh
权限sudo
。
我在我的 ubuntu 服务器 16.04 x64 上创建了一个新用户
adduser my-user sudo
gpasswd -a my-user sudo
然后使用visuo
我添加了这一行,基于这个问题
my-user ALL=(ALL) NOPASSWD : ALL
然后重启
重启后,我使用登录my-user
并尝试执行 sudo clear,但它要求我输入 sudo 密码。
笔记:我已使用 添加了 crontab,crontab -e my-user
因此我认为我的脚本将按 执行my-user
。事实上,crontabbed 脚本崩溃,并在日志中告诉我有关sudo
密码请求的信息。我确实需要以这种方式执行脚本才能以my-suer
所有者身份创建文件。
请告诉我是否不需要某些步骤/行,以及如何能够在没有密码请求的情况my-user
下执行。sudo
谢谢
附言:我看见了这个问题,但我无法让它工作,所以我需要更精确的解释,因为我的情况不同:我正在运行 crontab 脚本,我需要它不要求输入 sudo 密码
答案1
有时以 root 身份运行进程crontab
可能会导致初始文件所有权和rwx
模式出现问题;这些可能无法正确保存。
任何状况之下:
1)创建一个新用户,尽量简单:
$ sudo deluser my-user # if "my-user" is a regular user
$ adduser my-user
$ sudo gpasswd -a my-user sudo
NOPASSWD
2)在 sudoers 或文件(例如)中包含带有标签的新条目/etc/sudoers.d/60_my-user_rules
,使冒号粘在标签上,即NOPASSWD:
我以前从未见过有交错空格的情况,你的规则变成:
my-user my-host = NOPASSWD: /full/path/to/cmd [parameter1 [| parameter2 [| ...]]]
(ALL)
在 之前添加NOPASSWD:
是可选的,因为规则默认为(ALL:ALL)
无论如何。但是,您可能不仅希望以 root 权限运行 cmd/脚本,还希望以给定用户 ( spec-user
) 或给定组 ( ) 成员的身份spec-group
或两者的身份运行它。在这种情况下,规则变为:
my-user my-host = ([spec-user][:spec-group]) NOPASSWD: /full/path/to/cmd [parameter1 [| parameter2 [| ...]]]
这实际上会将无密码 sudo 权限限制为一个用户、一个主机和一个命令。您可以通过为该命令指定可选参数来强化此规则。在这种情况下,规则将仅适用于该/那些确切的参数。
对于脚本,您可以通过确保规则仅在脚本是没有经过任何修改。这是避免脚本劫持的一种方法。这是通过 cmd 别名和在 中指定 SHA-sums 来实现的/etc/sudoers.d/60_my-user_rules
。
HTH。如果您对该答案有疑问,请报告。