当我以root身份执行以下代码时
import os
try:
if os.getuid() == 0:
import pwd, grp
os.setgroups([])
os.setgid(grp.getgrnam('my_user').gr_gid)
os.setuid(pwd.getpwnam('my_group').pw_uid)
os.umask(077)
print 'dropped privileges successfully'
else:
print 'no need to drop privileges'
except:
print 'unable to drop privileges'
print os.system('ls -lsa ~/')
然后最后一个语句打印ls: cannot open directory /root/: Permission denied
。
原因很清楚,但问题是:我需要做什么才能~
扩展为/home/my_user
?
答案 0 :(得分:0)
在这种情况下,我需要root权限才能绑定到特权端口,结果是以root身份启动服务器的错误方法。
使用authbind
证明是正确的解决方案,因此sudo python server.py
最终成为authbind python server.py
。
我已经读过authbind
似乎有一些ipv6问题,可以在Is there a way for non-root processes to bind to “privileged” ports (<1024) on Linux?找到更多有用的信息