我有以下簡單的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 –