如何以root cronjob的身份运行不同用户的命令?

时间:2009-08-25 16:57:05

标签: cron root sudo nfs

我似乎陷入了NFS限制和Cron限制之间。

所以我有root cron(在RHEL5上)运行一个shell脚本,除其他外,需要通过NFS挂载rsync一些文件。 NFS挂载上的文件由模式700的apache用户拥有,因此只有apache用户可以运行rsync命令 - 以root身份运行会产生权限错误(NFS很少见,显然,root用户是不是全能的?)

当我只想手动运行rsync时,我可以使用“sudo -u apache rsync ...”但是在cron中没有工作 - 它说“sudo:对不起,你必须有一个tty才能运行sudo ”

我不想将整个脚本作为apache(即来自apache的crontab)运行,因为脚本的其他部分确实需要root - 它只是需要以apache身份运行的一个命令。而且我真的不想更改文件的模式,因为这将涉及对其他应用程序的重大更改。

必须有办法从cron完成“sudo -u apache”

谢谢! 抢劫

5 个答案:

答案 0 :(得分:17)

su --shell = / bin / bash --session-command =“/ path / to / command -argument = something”username&

适合我(CentOS)

答案 1 :(得分:7)

使用su代替sudo

su -c "rsync ..." apache

答案 2 :(得分:3)

默认情况下,对于没有终端(tty)的进程,不允许sudo。这是在/etc/sudoers中设置的。

对于使用这些说明的特定用户,您可以允许免费sudo

https://serverfault.com/questions/111064/sudoers-how-to-disable-requiretty-per-user

答案 3 :(得分:1)

将其放在/ etc / crontab中,并在用户字段中指定apache而不是root

答案 4 :(得分:1)

如果你想永久地让你像阿帕奇一样摆弄:

chsh apache

这允许您更改用户的shell