簡體   English   中英

python:sudo上下文管理器?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM