我有以下简单的Python代码的LinuxSMTP代理服务器要求身份验证根运行
import smtpd
proxy = smtpd.PureProxy(('0.0.0.0',25), None)
,当作为sudo的运行运行良好,但作为标准用户运行时给出了一个socket.error: [Errno 13] Permission denied
错误。我的问题:我如何使这个片段与普通用户一起运行。
感谢,
亚历
我有以下简单的Python代码的LinuxSMTP代理服务器要求身份验证根运行
import smtpd
proxy = smtpd.PureProxy(('0.0.0.0',25), None)
,当作为sudo的运行运行良好,但作为标准用户运行时给出了一个socket.error: [Errno 13] Permission denied
错误。我的问题:我如何使这个片段与普通用户一起运行。
感谢,
亚历
如果你要绑定到端口25(或1024以下的端口),你必须是根。但是,您可以在套接字绑定完成后更改为其他用户。
>>> 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
>>>
这当然是单向操作。一旦你改变到另一个用户,你不能再改变用户。
Linux只允许root进程侦听1024以下的端口。至少你的进程必须以root身份启动,打开套接字,然后删除root权限 –
我看到了...是否有任何代码片断显示做完了?我可以想象的是,用sudo(打开套接字,在后台运行)启动一个python文件,并使用此套接字可以由普通用户运行另一个python代码。这是可能的,有没有一些代码? – Alex
这个答案可能有所帮助:http://stackoverflow.com/questions/1770209/run-child-processes-as-different-user-from-a-long-running- process –