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

say*_*iam 159 cron

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

喜欢:

 sudo rm somefile
Run Code Online (Sandbox Code Playgroud)

Sir*_*rlo 306

我不会说这是一个多么糟糕的主意。简单地说,sudo在 crontab 中运行需要您的密码以明文形式存储在某处。

这是个坏主意。


以下是通过 cron 运行管理任务的首选方法。既然你真的不需要sudo在crontab里写,如果你是修改root的crontab。

使用 root 的 crontab

运行以下命令:

sudo crontab -e
Run Code Online (Sandbox Code Playgroud)

这将打开root的 crontab。sudo没有必要在此上下文中运行您的命令,因为它root无论如何都会被调用。

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

@hourly rm somefile
Run Code Online (Sandbox Code Playgroud)

现在,如果你绝对想不安全并用你的密码冒险,下面将从你自己的 crontab 运行你的命令,并在提示时自动输入你的密码sudo

同样,不推荐这样做


在你自己的 crontab 中,像这样写你的命令:

@hourly echo "password" | sudo -S rm somefile
Run Code Online (Sandbox Code Playgroud)

这里明显的缺点是,如果有人访问您的 crontab,您的密码将以明文形式可读。

你不应该这样做。

  • 这个答案没有抓住重点,因为它掩盖了你的 `sudoers` 文件中可用的微妙之处,比如不需要密码的 sudo 组。 (3认同)
  • 很高兴它有效!只要小心你留下的任何安全漏洞......他们可能会稍后回来困扰你。 (2认同)
  • @SirCharlo 为什么使用 `root` 的用户 crontab 而不是系统范围的 crontab `/etc/crontab`? (2认同)
  • @Elijah 为什么不呢? (2认同)

tgm*_*883 43

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

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

sudo crontab -e
Run Code Online (Sandbox Code Playgroud)

  • 不。你可以把它放在 /etc/cron.SOMETHING/SCRIPT 中,但我不会两者都做。两者都会提供大致相同的功能,尽管使用 crontab 您会在事情运行的频率/时间上拥有更多的权力。 (3认同)
  • 我应该明确表示我的意思是作为替代方案。谢谢。 (2认同)

Vid*_*har 6

在终端中运行以下命令

sudo visudo
Run Code Online (Sandbox Code Playgroud)

将以下行添加到文件末尾:

vidyadhar  ALL= NOPASSWD: /bin/rm
Run Code Online (Sandbox Code Playgroud)

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

  • 这是一个_极端_坏主意。请不要这样做。 (32认同)
  • 嗯..然后任何恶意命令,比如`sudo rm -rf 'slash'`(**不要运行那个命令**),从那个用户运行,不需要密码..我不知道,感觉不安全,不是吗? (24认同)
  • 也许`vidyadhar ALL= NOPASSWD: /bin/rm somefile` 会更安全。 (3认同)
  • 这是一个糟糕的主意。您向 rm 授予了**一揽子 sudo 权限**。相反,为您的命令的脚本(包括 rm 或该脚本中的其他命令)授予 sudo 权限,使其可执行,然后向该脚本授予 sudo 权限。`<username> ALL=(ALL) NOPASSWD: /home/<username>/bin/<script>`,这样会更安全。 (2认同)
  • 这并不是“一个极其糟糕的主意”,请停止无用的夸张。显然,给予用户与 root 相同的权限将使其与 root 一样危险。这对于专用备份用户或访问权限与 root 一样受到严格控制的其他用户帐户来说是完美的。 (2认同)