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 に答える