gavenkoa Asked: 2018-12-31 00:12:08 +0800 CST2018-12-31 00:12:08 +0800 CST 2018-12-31 00:12:08 +0800 CST 从特定用户运行 /etc/cron.daily 772 我是否正确理解不可能/etc/cron.daily/my从任意用户运行,它只能从root根据运行/etc/crontab? 我可以改为在我的 cron 脚本中将 root 权限授予特定用户吗? 将cron作业放入更好/etc/cron.d?喜欢: $ cat /etc/cron.d/my 5 0 * * * user test -x /usr/bin/my && /usr/bin/my -cfg /etc/my.cfg cron anacron 1 个回答 Voted Best Answer PerlDuck 2018-12-31T03:48:29+08:002018-12-31T03:48:29+08:00 您是对的,/etc/cron.daily(以及每周/每月等)中的作业始终以用户身份执行,root但您可以简单地从脚本中切换用户并以其他用户身份再次调用该脚本,包括所有提供的参数(尽管有不会有任何cron.daily工作): 文件/etc/cron.daily/my: #!/bin/sh # If started as root, then re-start as user "gavenkoa": if [ "$(id -u)" -eq 0 ]; then exec sudo -H -u gavenkoa $0 "$@" echo "This is never reached."; fi echo "This runs as user $(id -un)"; # prints "gavenkoa" exit 0; 当脚本以用户身份启动时,root它将检测到并通过重新执行自身sudo -H -u gavenkoa,即:以用户身份gavenkoa。这不需要特殊条目,/etc/sudoers 因为root始终允许切换到任何用户。 用新的调用exec 替换当前进程sudo …并且永远不会返回。这就是为什么你不需要一个else子句。
您是对的,
/etc/cron.daily
(以及每周/每月等)中的作业始终以用户身份执行,root
但您可以简单地从脚本中切换用户并以其他用户身份再次调用该脚本,包括所有提供的参数(尽管有不会有任何cron.daily
工作):文件
/etc/cron.daily/my
:当脚本以用户身份启动时,
root
它将检测到并通过重新执行自身sudo -H -u gavenkoa
,即:以用户身份gavenkoa
。这不需要特殊条目,/etc/sudoers
因为root
始终允许切换到任何用户。用新的调用
exec
替换当前进程sudo …
并且永远不会返回。这就是为什么你不需要一个else
子句。