我需要监听linux的端口来运行我的服务。所以,我总是运行python程序以sudo权限启动,这使得程序创建的文件,如pycahee和.pyc文件也获得了超级用户的权限,文件和目录只能在sudo模式下删除。那太不方便了。那么,有没有一种方法可以指定python来创建普通的文件夹和文件?
yiytaume1#
以root身份运行脚本,只是为了监听特权端口,这不是一个好的做法(除非脚本确实需要root)。如果你的脚本不需要root,那么我建议在你设置了特权端口套接字之后,使用setuid/setgid来删除特权;这一点在这里已经详细回答过了;Dropping Root Permissions In Python编辑:OP提到创建的pyc文件仍然具有root权限。您可以使用suid位(chmod u+s script.py),然后使用setuid(0)在运行时获得root权限,确保文件所有权不是root。仅为文件所有者设置suid位也意味着其他用户不能滥用suid位。
setuid/setgid
pyc
chmod u+s script.py
setuid(0)
l0oc07j22#
一个可能的策略是首先以普通用户的身份运行compileall,这样pyc文件就已经存在,root用户就不必创建它们。
compileall
python -m compileall
文档是here。
2条答案
按热度按时间yiytaume1#
以root身份运行脚本,只是为了监听特权端口,这不是一个好的做法(除非脚本确实需要root)。
如果你的脚本不需要root,那么我建议在你设置了特权端口套接字之后,使用
setuid/setgid
来删除特权;这一点在这里已经详细回答过了;
Dropping Root Permissions In Python
编辑:OP提到创建的
pyc
文件仍然具有root权限。您可以使用suid位(chmod u+s script.py
),然后使用setuid(0)
在运行时获得root权限,确保文件所有权不是root。仅为文件所有者设置suid位也意味着其他用户不能滥用suid位。l0oc07j22#
一个可能的策略是首先以普通用户的身份运行
compileall
,这样pyc文件就已经存在,root用户就不必创建它们。文档是here。