0

我在 Linux 上有以下简单的 python 代码

import smtpd
proxy = smtpd.PureProxy(('0.0.0.0',25), None)

以 sudo 运行时运行良好,但socket.error: [Errno 13] Permission denied以标准用户运行时出错。我的问题:我怎样才能让这个片段与普通用户一起运行。

谢谢,

亚历克斯

4

1 回答 1

2

如果您想绑定到端口 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
>>> 

当然,这是一种单向操作。一旦您更改为另一个用户,您将无法再次更改用户。

于 2012-09-11T19:26:34.213 回答