2009-08-25 131 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 

這可以讓你爲用戶更換外殼

相關問題