编写python应用程序的最佳实践方法是:大多数代码可以作为正常的非根用户运行--但是至少有一个函数需要根权限才能执行?
我正在编写一个python程序,其中99%可以在用户空间中很好地运行。但是我现在要添加一个函数,它需要根。一种解决方案是将整个应用程序作为root运行。但这似乎是不必要的危险。
我认为“正确的做法”应该是生成一些子进程(或者线程?)这一点:
但我不太清楚该怎么做。也许还有其他我不考虑的最佳做法?
考虑下面的示例代码。
备注我只是使用套接字,因为绑定到端口>= 1024可以作为正常用户完成,但是绑定到任何< 1024端口都需要根权限。但是,如果有一个简单的例子,请使用它。
#!/usr/bin/env python3
import socket
def main():
user_operation()
root_operation()
def user_operation():
sock = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
sock.bind( ('localhost', 2222) )
def root_operation():
sock = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
sock.bind( ('localhost', 22) )
if __name__ == "__main__":
main()如果我以普通的、非私有用户的身份运行上面的程序,那么我将得到一个Permission denied错误。
user@host:~$ ./spawn_root_child.py
Traceback (most recent call last):
File "/home/user/tmp/python_spawn_root_child/./spawn_root_child.py", line 18, in <module>
main()
File "/home/user/tmp/python_spawn_root_child/./spawn_root_child.py", line 7, in main
root_operation()
File "/home/user/tmp/python_spawn_root_child/./spawn_root_child.py", line 15, in root_operation
sock.bind( ('localhost', 22) )
PermissionError: [Errno 13] Permission denied
user@host:~$但是如果我以root的形式运行它,它就会运行得很好。
user@host:~$ sudo ./spawn_root_child.py
user@host:~$如何更新上述代码,使其遵循安全最佳实践,包括最小特权原则
编辑我要找的东西是:
发布于 2022-10-02 03:30:13
如果在Linux中运行Python程序,则可以编写bash脚本并在其中执行Python代码。
您可以以非root用户的身份运行脚本,然后通过sudo python3 script.py将权限提升到root。
只在需要根的命令前面使用sudo是最好的方法,因为Linux将以这种方式切换回常规用户。(在我看来,最糟糕的方式是使用sudo su,您需要执行exit来手动离开根!)
我建议将您的代码分为不同的脚本,那些不需要根的脚本和需要根的脚本。这样,您就不需要不必要地对不需要根的脚本运行sudo script.py。
https://stackoverflow.com/questions/73923097
复制相似问题