Linuxに次の単純なpythonコードがあります
import smtpd
proxy = smtpd.PureProxy(('0.0.0.0',25), None)
sudoとして実行すると問題なく実行されますがsocket.error: [Errno 13] Permission denied
、標準ユーザーとして実行するとエラーが発生します。私の質問: このスニペットを通常のユーザーで実行するにはどうすればよいですか?
ありがとう、
アレックス
Linuxに次の単純なpythonコードがあります
import smtpd
proxy = smtpd.PureProxy(('0.0.0.0',25), None)
sudoとして実行すると問題なく実行されますがsocket.error: [Errno 13] Permission denied
、標準ユーザーとして実行するとエラーが発生します。私の質問: このスニペットを通常のユーザーで実行するにはどうすればよいですか?
ありがとう、
アレックス
ポート 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
>>>
もちろん、これは一方通行の操作です。別のユーザーに変更すると、再度ユーザーを変更することはできません。