我在Linux 上有以下简单的python代码
import smtpd
proxy = smtpd.PureProxy(('0.0.0.0',25), None)
当作为sudo运行时运行良好,但当作为标准用户运行时会出现socket.error: [Errno 13] Permission denied
错误。我的问题是:如何让这个代码段与普通用户一起运行。
谢谢,
Alex
如果您想绑定到端口25(或1024以下的任何端口),您必须是root。但是,一旦套接字绑定完成,就可以更改为其他用户。
>>> import os
>>> import smtpd
>>> import pwd
>>> uid = pwd.getpwnam('nobody').pw_uid
>>> gid = pwd.getpwnam('nobody').pw_gid
>>> proxy = smtpd.PureProxy(('0.0.0.0',25), None)
>>> os.setgid(gid)
>>> os.setuid(uid)
>>> os.system('whoami')
nobody
0
>>>
当然,这是一种单向操作。一旦您更改为其他用户,就不能再更改用户。