我有一段代碼,我想以非root用戶身份運行。如果程序以非root用戶身份運行,則不需要發生任何事情。但是,如果程序以root身份運行,則需要刪除root權限,執行代碼段,然後再次啓用root權限。你如何編寫啓用/禁用代碼?Python禁用並啓用Root權限
回答
嘗試以下操作:
import os
print "user who executed the code: %d" % os.getuid()
print "current effective user: %d" % os.geteuid()
if os.getuid() == 0:
os.seteuid(65534) # user id of the user "nobody"
print "current effective user: %d" % os.geteuid()
# do what you need to do with non-root privileges here, e.g. write to a file
print >> open("/tmp/foobar.txt", "w"), "hello world"
os.seteuid(0)
print "current effective user: %d" % os.geteuid()
運行此爲根輸出:
user who executed the code: 0 current effective user: 0 current effective user: 65534 current effective user: 0
如何獲取執行代碼的用戶的用戶標識? – user1802143
@ user1802143 - 您可以檢查os.getuid()'的輸出。如果它等於零,那麼root執行代碼。我已經更新了這個例子來證明這一點。 – del
我對稱爲sudo的用戶感興趣。當使用sudo時,uid爲0.有沒有辦法獲得sudo調用者的uid? – user1802143
嘗試os.getuid()和os.setuid()。您可以使用它們在腳本中切換用戶。
可能你需要使用['os.geteuid()'](http://docs.python.org/2/library/os.html代替#os.geteuid)和['os.seteuid()'](http://docs.python.org/2/library/os.html#os.seteuid)。否則,在刪除它們之後,無法再獲取root權限。 – del
- 1. 如何禁用/啓用CPU內核*不* root訪問權限
- 2. 在Python中刪除/啓用Root權限打開文件
- 3. 禁用Android M的運行時權限檢查root
- 4. 如何禁用沒有root權限的Android屏幕?
- 5. 刪除root權限
- 6. 在Python中刪除Root權限
- 7. 如何使用python腳本添加用戶並賦予root權限
- 8. 使用root權限從python腳本調用shell腳本
- 9. 以root權限啓動/分配macOS應用程序
- 10. 如何從ROOT權限的Android應用程序啓動進程
- 11. iOS應用程序的root權限
- 12. 使用kinect時需要root權限
- 13. 授予應用程序的root權限
- 14. mysql重置root用戶權限
- 15. 使用角色/權限啓用/禁用視圖中的內容
- 16. 禁用依賴權限
- 17. 禁用文件權限
- 18. Android 6權限=>崩潰時禁用權限,並返回到應用程序
- 19. CUDA需要root權限嗎?
- 20. 從Android獲得root權限
- 21. 沒有root權限的mysqlworkbench
- 22. 獲得iOS的root權限
- 23. 沒有root權限的Mysql
- 24. php apache root寫入權限
- 25. mysql root @ localhost沒有權限
- 26. AllJoyn需要root權限嗎?
- 27. 獲取root權限在ansible
- 28. python用戶權限
- 29. 設置作業的權限在SQL Server中啓用/禁用
- 30. 在mac os上啓用root用戶後,cd'ing權限被拒絕x 10.6.4
這不能在安全,沒有分叉一個新的進程來完成。如果您以可以重新獲得root權限的方式刪除root權限,則沒有任何措施可以防止攻擊者在執行錯誤操作之前修改已執行的代碼。 – ThiefMaster
你可以啓動'python'作爲'root'(sudo python) –