如何避免 crontab 脚本的 sudo 密码请求?

如何避免 crontab 脚本的 sudo 密码请求?

我需要一个新用户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

NOPASSWD2)在 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。如果您对该答案有疑问,请报告。

相关内容