我想让一个Python程序开始侦听端口80,但之后执行时无需root权限。有没有办法放弃 root 或在没有 root 的情况下获取端口 80?
如果没有 root 权限,您将无法在端口 80 上打开服务器,这是对操作系统级别的限制。因此,唯一的解决方案是在打开端口后放弃 root 权限。
以下是在 Python 中删除 root 权限的可能解决方案:在 Python 中删除权限 http://antonym.org/2005/12/dropping-privileges-in-python.html。一般来说,这是一个很好的解决方案,但您还必须添加os.setgroups([])
该功能可确保 root 用户的组成员身份不被保留。
我复制并清理了一些代码,并删除了日志记录和异常处理程序,因此由您来处理OSError
正确(当不允许进程切换其有效UID或GID时会抛出该异常):
import os, pwd, grp
def drop_privileges(uid_name='nobody', gid_name='nogroup'):
if os.getuid() != 0:
# We're not root so, like, whatever dude
return
# Get the uid/gid from the name
running_uid = pwd.getpwnam(uid_name).pw_uid
running_gid = grp.getgrnam(gid_name).gr_gid
# Remove group privileges
os.setgroups([])
# Try setting the new uid/gid
os.setgid(running_gid)
os.setuid(running_uid)
# Ensure a very conservative umask
old_umask = os.umask(077)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)