答案1
我不会谈论这个主意有多坏;简单地说,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,您的密码将以纯文本形式被读取。
你不应该这么做。
答案2
如果您将脚本从其中一个 cron 目录 ( /etc/cron.*
) 中放入,那么您不需要使用 sudo,因为它是以 root 身份运行的。
如果你正在使用 crontab,那么你将需要使用 root 的 crontab。这将以 root 身份运行它,并且也不需要 sudo。
sudo crontab -e
答案3
在终端中运行以下命令
sudo visudo
在文件末尾添加以下行:
vidyadhar ALL= NOPASSWD: /bin/rm
在上面的例子中,vidyadhar 是用户名,如果您通过 vidyadhar 运行 rm 命令,它将不会要求输入密码。
答案4
没人提到有带 setuid 位的可执行脚本?我也知道这可能是一个安全漏洞(不要割伤自己,抽屉里有锋利的刀,请严格控制权限),但感觉比在 root crontab 中工作更安全。例如,我想每晚或每周进行碎片整理/fstrim,即使我不在场。
另一种选择是让脚本循环运行,休眠直到合适的时间,然后使用 sudo 启动。