2013-03-22 84 views
1

我經常需要運行作爲一個不同的用戶。我一直在做類似的東西如何以不同的用戶身份運行'at'?

$ echo "$PWD/batchToRun -parameters" | sudo su - otheruser -c "at now" 

batchToRun還計劃通過otheruser的crontab來運行。直到batchToRun開始運行,取決於環境變量設置的細微副作用 - 如LANG排序任何人?) - 從運行sudo的用戶環境傳入。

我通常不想以登錄其他用戶;這是一個半特權帳戶,我想要一個與其相關聯的活動的「紙質足跡」,以便我可以回頭看看究竟做了什麼,由誰,什麼時候等。

除了明顯的重寫batchToRun獨立於這些設置,確保sudoer環境不會污染目標環境的好方法是什麼?

注:這是對FC7(須藤版本1.6.8p12版本得以)等老的發行版,所以任何閃亮的新功能sudo/su/at(值得注意的是,與-i參數傳遞到sudo的能力)都超出了我把握。

更新:事實證明,su - otheruser實際上是用戶之間足夠的防火牆,並且我的污染源自交互式啓動順序中的某些內容。不過,我仍然喜歡env編輯功能。

回答

1

運行at之前,你可以剝奪環境:

echo "command ..." | env - PATH="$PATH" sudo su - otheruser -c "at now" 

您也可以安排sudo通過設置env_reset選項來爲你做這個。例如,您可以授予用戶以其他用戶直接運行at命令的權限(而不是sudo以root用戶身份運行其他用戶),然後使用該用戶或該命令的Defaults命令設置env_reset(請參閱sudoers手冊頁)。

但是,以上可能是最簡單的解決方案,而不會改變您今天通常的做法。

+0

不錯。而這些年來,我認爲「env」僅用於打印你的環境。 – jhfrontz 2013-03-22 23:07:09

0

otheruser環境的任何「污染」都應該限制在at命令的環境中。當它實際上運行時間爲batchToRun時,它將使用其典型的默認環境運行otheruser。也就是說,只有at now在由su sudo命令產生的shell中運行。

+0

我看到的行爲與「at」手冊頁上描述的行爲一致:工作目錄,環境(變量TERM,DISPLAY和_除外)和umask從調用時保留。 – jhfrontz 2013-03-22 22:20:39

+0

也許你認爲「su - otheruser」應該是一個乾淨的休息時間?現在我回頭再仔細檢查一下事情,我發現這是事實 - 環境污染的來源似乎更加陰險。 – jhfrontz 2013-03-22 23:37:45

相關問題