[英]python: sudo context manager?
是否有任何可能的方法來實現sudo
上下文管理器,它使用sudoers系統作為另一個用戶運行封閉范圍?
system('whoami') # same result as echo $USER
with sudo():
system('whoami') # root
我懷疑sudo(8)
可執行文件在這里對我有幫助,但也許我可以綁定一些C級接口?
動機:我幾乎可以將這個shell腳本完全移植到python,甚至沒有任何子進程,除了我目前需要system('sudo sh -c "echo %i > /dev/thatfile"' % value)
。 如果我可以with sudo(), open('/dev/thatfile', 'w') as thatfile: thatfile.write(str(value))
那將是如此優雅。
我懷疑這是不可能以任何簡單的方式。 升級其權限的程序(如sudo
必須在其文件系統權限中設置一個標志(即“setuid”位),以告訴操作系統將其作為與啟動它們的用戶不同的用戶運行。 除非你希望你的整個Python解釋器都是setuid root,否則沒有直接的方法來為Python代碼的一小部分做同等的事情。
可以想象,實現sudo
樣式的上下文管理器可能不是通過使常規Python代碼運行特權,而是通過臨時替換使用某種連接的代理進行各種OS調用(例如open
文件)的庫代碼它是一個setuid幫助程序。 但要讓這樣的東西起作用會有很多工作要做,還有很多工作要確保它足夠安全,可以在生產中的任何地方使用。
一個想法,如果您不喜歡當前使用system
調用中的shell腳本的解決方案:使用常規Python代碼和常規用戶權限編寫文件。 然后用sudo
調用將其chown
(並在必要時移動它)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.