2009-08-25 160 views
21

我似乎被困在NFS限制和Cron限制之间。如何以root用户的cronjob身份从不同的用户运行命令?

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

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

我不想将整个脚本作为apache运行(即从apache的crontab),因为脚本的其他部分确实需要root权限 - 它只是需要以apache身份运行的一个命令。我真的不希望改变文件的模式,因为这将涉及到其他应用程序的重大变化。

有没有办法从cron完成“sudo -u apache”?

谢谢! 抢

+1

将此移至SuperUser.com可能会更好。 – Robert 2009-08-25 17:16:03

+0

这是一个老问题,但在搜索等级中仍然很高,并且没有答案解决为什么root权限不适用于NFS挂载。对于其他任何人而言,这是因为root_squash。这个博客有一个相当不错的解释,为什么这个选项是必要的,通常默认设置。 http://fullyautolinux.blogspot.com/2015/11/nfs-norootsquash-and-suid-basic-nfs.html – BryKKan 2018-01-25 22:54:51

回答

7

使用su,而不是sudo

su -c "rsync ..." apache 
+1

是的!但不是。 apache用户没有常规登录shell,因此su -c语法只返回“此帐户当前不可用”。为了这个目的改变apache用户的passwd入口似乎是一个坏主意。 嗯,我想这个问题的标题应该是“我如何从root cronjob作为apache用户运行命令?”如果不引入安全漏洞,这可能无法完成? – rob 2009-08-27 15:46:48

+5

如果您明确指定要与'-s'开关一起使用的shell(例如'-s/bin/sh'),它有帮助吗?至少在Ubuntu上这似乎有帮助,如果有问题的用户在/ etc/passwd中没有有效的shell。 – 2009-08-27 17:20:20

+0

@JukkaMatilainen - 是的,在Ubuntu的工作也是如此。 – runamok 2013-12-03 19:39:27

1

地方在/ etc/crontab中,并在用户现场

+0

无法在我的Debian 6上工作。 – 2012-06-22 21:26:54

17

苏--shell = /斌/庆典指定的Apache,而不是根 - -session命令= “/路径/到/命令-argument =东西” 用户名&

对我的作品(CentOS的)

+0

我必须在'--session-command'变量内的命令前添加'export TERM = xterm;'。因此,我结束了'su --shell =/bin/bash --session-command =“export TERM = xterm;/path/to/command -argument = something”username&' – 2012-06-26 18:09:49

+0

不适用于Ubuntu(12.04 ),因为'su'命令不支持'--session-command'选项。 – Lambart 2014-01-14 21:07:51

+0

为了澄清答案,在root的crontab中添加'su --shell =/bin/bash --session-command =“/ path/to/command -argument = something”username' – NoelProf 2014-02-19 03:29:58

1

如果你想永久让你摆弄像Apache:

chsh apache 

这可以让你为用户更换外壳

相关问题