如何使用sudo命令执行cron作业


118

是否可以运行需要sudo命令的cron作业?

喜欢:

 sudo rm somefile

欢迎Sayem Siam,看看这个问题的答案askubuntu.com/questions/2368/how-do-i-setup-cron-job。正如我认为您在澳大利亚之前曾在这里问过您的问题
stephenmyall,2012年

1
我正在尝试执行需要密码的sudo,但是我该如何从cron文件中提供密码
sayem siam 2012年

3
@sayemsiam您不需要输入sudo,只需编辑根crontab。
Braiam 2013年

Answers:


239

我不会说这是一个坏主意。简而言之,sudo在crontab中运行要求您的密码以明文形式存储在某处。

这是一个坏主意。


以下是通过cron运行管理任务的首选方法。由于您实际上不需要sudo在crontab中编写代码,因此如果要修改root的crontab。

使用root的crontab

运行以下命令:

sudo crontab -e

这将打开root的crontab。sudo在这种情况下运行命令不是必需的,因为root无论如何它都会被调用。

因此,您只需将以下内容附加到root的crontab中。

@hourly rm somefile

现在,如果您绝对希望不安全并使用密码冒险,则以下操作将从您自己的crontab中运行您的命令,并在提示时自动输入密码sudo

同样,不建议这样做


在您自己的crontab中,如下编写命令:

@hourly echo "password" | sudo -S rm somefile

这里的明显缺点是,如果任何人访问过crontab,您的密码将以纯文本格式可读。

你不应该这样做。


1
很高兴它有效!只是要警惕您留下的任何安全漏洞。它们可能稍后会回来困扰您。
沙洛爵士(SirCharlo)

1
@SirCharlo为什么使用root用户crontab而不是系统范围的crontab /etc/crontab
伊利亚·卡根

1
@以利亚为什么不呢?
沙洛爵士(SirCharlo)

2
这个答案没有标记,因为它掩盖了sudoers文件中可用的细微之处,例如不需要密码的sudo组。
布伦特

非常非常有用的一点,感谢您的大力帮助。
Nasser Mansouri

33

如果要从cron目录(/etc/cron.*)之一放置脚本,则无需使用sudo,因为sudo以root身份运行。

如果您使用的是crontab,那么您将要使用root的crontab。这将以root身份运行,也不需要sudo。

sudo crontab -e

1
我还将命令放在/etc/cron.hourly/something中。这就是这些目录的用途。
约翰·格鲁伯

3
不,您可以将其放在/etc/cron.SOMETHING/SCRIPT中,但我不会两者都做。两者都将提供大致相同的功能,尽管使用crontab可以让您对运行的频率/时间有更多的控制权。
tgm4883 2012年

1
我应该明确指出,我的意思是作为替代。谢谢。
约翰·格鲁伯

3

在终端中运行以下命令

sudo visudo

在文件末尾添加了以下行:

vidyadhar  ALL= NOPASSWD: /bin/rm

在上面的示例中,vidyadhar是用户名,如果您通过vidyadhar运行rm命令,则不会要求输入密码。


17
嗯。然后从该用户运行的任何恶意命令,例如sudo rm -rf 'slash'不要运行该命令),都不需要密码。。我不知道,这感觉很不安全,不是吗?
SirCharlo

是的,我知道。您的方法很好。但是我正在使用上述方法向其他用户授予停止/启动某些服务的权限。
Vidyadhar

24
这是一个非常糟糕的主意。请不要这样做。
bkanuka

2
也许vidyadhar ALL= NOPASSWD: /bin/rm somefile会更安全。
Wernfried Domscheit,2016年

这是一个可怕的主意。您授予了rm 总括式sudo权限。取而代之的是,对您的命令(包括rm或该脚本中的其他命令)赋予sudo权限,使其可执行,然后再对该脚本赋予sudo权限。 <username> ALL=(ALL) NOPASSWD: /home/<username>/bin/<script>,这样会更安全。
RJ
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.