首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行python程序的最佳实践方法,该程序需要对任务子集进行根私有。

运行python程序的最佳实践方法,该程序需要对任务子集进行根私有。
EN

Stack Overflow用户
提问于 2022-10-02 03:00:55
回答 1查看 91关注 0票数 0

编写python应用程序的最佳实践方法是:大多数代码可以作为正常的非根用户运行--但是至少有一个函数需要根权限才能执行?

我正在编写一个python程序,其中99%可以在用户空间中很好地运行。但是我现在要添加一个函数,它需要根。一种解决方案是将整个应用程序作为root运行。但这似乎是不必要的危险。

我认为“正确的做法”应该是生成一些子进程(或者线程?)这一点:

  1. 有根权限
  2. 只包括绝对需要根特权的函数。
  3. 不接受任何用户输入(或至少尽可能少,并在非常严格的允许列表regex下仔细消毒)

但我不太清楚该怎么做。也许还有其他我不考虑的最佳做法?

考虑下面的示例代码。

备注我只是使用套接字,因为绑定到端口>= 1024可以作为正常用户完成,但是绑定到任何< 1024端口都需要根权限。但是,如果有一个简单的例子,请使用它。

代码语言:javascript
复制
#!/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错误。

代码语言:javascript
复制
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的形式运行它,它就会运行得很好。

代码语言:javascript
复制
user@host:~$ sudo ./spawn_root_child.py 
user@host:~$

如何更新上述代码,使其遵循安全最佳实践,包括最小特权原则

编辑我要找的东西是:

  1. 健壮(它适用于小型CLI脚本以及大型GUI应用程序)
  2. 跨平台(它应该在Linux、Windows、MacOS和我的python驱动烤面包机中工作)
  3. Pythonic (遵循Python的最佳实践)
EN

回答 1

Stack Overflow用户

发布于 2022-10-02 03:30:13

如果在Linux中运行Python程序,则可以编写bash脚本并在其中执行Python代码。

您可以以非root用户的身份运行脚本,然后通过sudo python3 script.py将权限提升到root。

只在需要根的命令前面使用sudo是最好的方法,因为Linux将以这种方式切换回常规用户。(在我看来,最糟糕的方式是使用sudo su,您需要执行exit来手动离开根!)

我建议将您的代码分为不同的脚本,那些不需要根的脚本和需要根的脚本。这样,您就不需要不必要地对不需要根的脚本运行sudo script.py

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73923097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档