我正在編寫一個簡單的腳本,用於重新啓動hadoop從站。在腳本中,我必須以root用戶身份進行一些初始更改。之後,我必須更改爲用戶「hadoop」並執行一組命令。我使用os.system來運行命令,但我懷疑它是否工作正常。例如:在python中更改用戶
uid=pwd.getpwnam('hadoop')[2]
os.setuid(uid)
os.system('whoami')
os.chdir('/home/hadoop/hadoop/')
os.system('bin/hadoop-daemon.sh stop tasktracker')
我同樣有此之後執行一些命令爲根,再次成爲用戶「的hadoop」,執行:
os.system('bin/hadoop-daemon.sh stop tasktracker')
我這裏有三個問題,
os.system是我可以用來發布linux命令的最佳命令嗎?
我可以通過上面的命令從root用戶更改爲用戶hadoop,但我無法更改爲root用戶(我可以理解,如果他們允許這樣會存在安全問題,我想知道是否存在任何可能做到這一點,至少通過傳遞密碼)?
os.setuid()是否工作? whoami打印用戶hadoop但進程「tasktracker」不停止使用這些命令,但如果我手動執行相同的命令,它工作正常(手動嘗試它時,我使用「su hadoop」而不是setuid)。
感謝您的幫助。
- Sethu
Mike,我必須以hadoop用戶身份運行這些命令,但還有其他命令需要以root用戶身份運行。但實際上,在使用sudo時,系統會提示我們輸入密碼嗎? – sethu
如果root用戶運行python腳本,所有命令都應該以root身份執行,「sudo -u hadoop ....」運行一個命令,就像您是指定用戶一樣,並且因爲您以root身份運行該命令,應該有沒有密碼提示。 – Mike
有關如何使用** subprocess **執行此操作,請參閱https://stackoverflow.com/questions/1770209/run-child-processes-as-different-user-from-a-long-running-process/6037494# 6037494 –