SMTP-прокси в Python требует рут-аутентификации для запуска
У меня есть следующий простой код Python на Linux
import smtpd
proxy = smtpd.PureProxy(('0.0.0.0',25), None)
который работает нормально, когда запускается как sudo, но дает socket.error: [Errno 13] Permission denied
ошибка при работе от имени обычного пользователя. Мой вопрос: как я могу заставить этот фрагмент работать с обычным пользователем.
Спасибо,
Alex
1 ответ
Если вы хотите подключиться к порту 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
>>>
Это, конечно, односторонняя операция. После того, как вы перейдете к другому пользователю, вы не сможете снова сменить пользователя.