我有一個執行nagios
配置的python腳本。該腳本以具有完整sudo權限的用戶身份運行(用戶可以使用sudo運行任何命令,而無需密碼提示)。在配置的最後一步是這樣的:使用sudo權限運行單個命令的絕大多數pythonic方式
open(NAGIOS_COMMAND_FILE, 'a').write(cmdline)
NAGIOS_COMMAND_FILE
的僅是通過根可寫的,所以這個命令應該由root運行。我可以想到兩種實現方法(兩種都不盡如人意):
- 以root身份運行整個腳本。我不喜歡這樣做,因爲腳本中的任何錯誤都將以完全的根權限執行。
- 將
open(NAGIOS_COMMAND_FILE, 'a').write(cmdline)
命令放入單獨的腳本中,並使用subprocess
庫通過sudo調用該腳本。我不喜歡創建一個額外的腳本只是運行一個命令。
我想沒有改變運行的用戶只是單個命令的方式,在我目前的劇本,還是我錯了?
這是另一種選擇,但我不想在系統配置文件中隨意更改所有權,因爲難以跟蹤/複製(我的目標是能夠輕鬆地將我的基礎架構複製到其他服務器) 。如果無法將運行用戶更改爲單個命令,那麼我寧願以root身份運行整個腳本,而不是更改文件所有者。 – dangonfast 2012-08-13 10:37:04
否則,您可以將您的配置寫入臨時文件,然後使用pexpect將其作爲root用戶移動到正確的位置。但它可能涉及將密碼寫入純文件中...... – 2012-08-13 10:50:48