我試圖創建一個python shell腳本來在Ubuntu Linux中創建許多目錄。我正在嘗試創建目錄的主目錄受到寫訪問的保護。有沒有辦法允許Python腳本允許在那裏創建目錄,就好像它是根用戶一樣,但不必通過su運行腳本,因爲其他用戶可能需要運行腳本,但不應該有su訪問權限?如何允許Python腳本在受保護的目錄中訪問mkdir而不在Linux中進行su訪問?
回答
這個問題並沒有真正與Python相關。 Python腳本只是一個像任何其他進程一樣的進程,需要擁有正確的權限來執行任務。通常的方法是創建一個組,併爲該組創建父目錄g + ws。然後將適當的用戶添加到該組作爲補充組。
您可以爲此任務添加一個用戶,然後爲所需的目錄提供所需的用戶權限,並以該用戶的身份執行腳本。
可能有更簡單的解決方案,但這是我第一眼看到的。
不幸的是沒有。進程在* nix環境中的權限始終小於或等於啓動它的人員的權限。但這實際上是有道理的 - 允許進程超出用戶自己的能力是一個巨大的安全風險。
這將需要能夠訪問該目錄的人 - 無論是通過其中一個組還是通過sudo
。無論哪種方式,都需要在腳本運行的每臺機器上進行人機交互。
就最簡單的情況而言,您需要具有該權限的人將其授予其他用戶,或者直接使用sudo
。
您可以創建一個單獨的命令來創建該目錄,並將其設置爲setuid root(或更安全地說setuid或setgid爲父目錄的所有者)。確保命令不能做任何事情,除了你想讓它做的事情(例如,不要讓它傳遞它的參數到system()
)。然後從Python腳本中調用該命令。
當然這也會啓用任何其他具有新命令執行權限的進程來創建子目錄。
您可以標記您的Python腳本setuid,這使得它以root身份運行,而不管哪個用戶運行它。但是請注意,這可能是一個主要的安全風險,因爲如果用戶想出一種方法來讓腳本執行某些操作,那麼它並不打算這麼做,它們可能會導致root權限的惡作劇。如果您確實要製作腳本setuid,請確保它非常簡單,只做一件事情,並進行大量錯誤檢查以防止出現意外輸入。 (查找setuid以獲取更多關於此操作的信息;您需要使用chmod標記可執行文件的setuid位。)
通常,更好的解決方案是爲要創建新目錄的目錄提供組權限,然後爲將運行腳本的用戶添加該組。
您還可以通過使腳本setuid在這兩個解決方案之間妥協,但在腳本開始時使其使用其root用戶權限來承擔其他用戶的身份。然後,使用其他用戶的權限創建目錄,並向其授予適當權限。這樣,您仍然以這樣的方式執行操作,即用戶無權直接執行操作(因此他們必須使用該腳本),但是可以最大限度地降低他們可能利用腳本執行操作的風險做別的什麼,你沒有預料到的。
我發現了什麼看起來是約寫在這裏setuid程序像樣的文章:
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.124.384
- 1. Python中的「受保護」訪問 - 如何?
- 2. 允許PHP腳本在受保護的目錄中
- 3. 如何允許Facebook訪問受保護的內容
- 4. 允許訪問的目錄
- 5. C++:允許訪問受保護的類的成員,而不是私人成員
- 6. 密碼保護,只允許一個IP地址訪問目錄?
- 7. genymotion永久允許su訪問
- 8. 允許php訪問htacess保護代碼
- 9. 從python腳本訪問受密碼保護的url
- 10. 允許php文件訪問受.htpasswd保護的文件夾?
- 11. 允許PHP文件訪問受保護的文件夾?
- 12. symfony2:允許cronjob訪問fosuserbundle受保護的控制器動作
- 13. 如何保護從php訪問目錄?
- 14. C++受保護的訪問
- 15. 受保護的訪問
- 16. mod_rewrite不允許訪問現有目錄
- 17. 如何在C#中保護SqlDataReader不受多重訪問
- 18. 允許前端用戶訪問受保護文件
- 19. 如何訪問受保護的成員
- 20. 訪問受保護的變量在googletest
- 21. 如何在URL中允許/ X /而不是?ID = X訪問?
- 22. 如何在無關的類中訪問受保護的方法?
- 23. 在Linux中訪問目錄的權限
- 24. 如何在C中訪問受保護的方法#
- 25. 不能訪問受保護的特性
- 26. .htaccess不允許訪問wamp服務器中的項目目錄
- 27. 如何在Debian Linux中允許用戶www-data訪問i2c?
- 28. CakePHP:如何允許公衆訪問/ webroot目錄中的文件
- 29. 由bash腳本中的mkdir創建的不可訪問的目錄
- 30. 允許訪問「所有拒絕」目錄
相關:http://stackoverflow.com/questions/567542/running-a-command-as-a -Super-用戶從-A-Python的腳本 –