我有一个脚本,我想运行一个守护进程监听一个低编号的端口(<1024)
脚本是在python中,尽pipePerl中的答案也是可以接受的。
在启动脚本中使用start-stop-daemon来守护脚本,这可能会使答案复杂化
我真的( 想 )不想要的是键入ps -few,并看到这个进程运行一个“根”就行了。
closuresPython守护进程时运行代码
WHOIS服务器守护程序
为什么分叉时我的D2XX应用程序无法工作?
Linux守护进程vs前台应用程序
我该怎么做?
(从我没有受过全面教育的系统调用的angular度来看,我可以看到3个途径,
以root用户身份运行脚本(no –user / – group / – chuid start-stop-daemon),让它在声明端口后升级
在脚本上设置setuid root(chmod u + s),并以正在运行的用户身份运行脚本(通过–user / – group / – chuid启动 – 停止守护进程,启动脚本仍然被称为根),在脚本中,获取root权限,声明该端口,然后恢复为普通用户
别的东西我不知道
)
纠正守护进程行为(来自PEP 3143)的解释
为什么在新手服务或守护程序服务中使用用户nobody nogroup?
为什么我的Erlang引导脚本从控制台工作,但从init系统(sysvinit,upstart,systemd)运行时不起作用?
在Debian上的Daemonize()问题
修改python守护进程脚本,停止不起作用
“你不知道的东西”是“能力”,但正如其他地方所提到的,使用shebang方法的脚本功能并不是很好,所以这里没有太多答案。 我会去与“绑定端口,然后删除权限”的方法。
这个网页有一些导致我的代码, http://antonym.org/2005/12/dropping-privileges-in-python.html
我想设置umask是完成这项工作所必需的,这是这个代码似乎做的唯一的事情,我的企图没有(我不知道是什么设置umask真的,在应用到一个进程的上下文)
我把他的例子撕碎了一点,而且这个页面是从2005年开始的,所以我在这里重新发布我的工作解决方案,
def drop_privileges(uid_name='nobody',gid_name='nogroup'): # Get the uid/gid from the name running_uid = pwd.getpwnam(uid_name)[2] running_gid = grp.getgrnam(gid_name)[2] # Try setting the new uid/gid try: os.setgid(running_gid) except OSError,e: logging.error('Could not set effective group id: %s' % e) exit() try: os.setuid(running_uid) except OSError,e: logging.error('Could not set effective user id: %s' % e) exit() # Ensure a very convervative umask new_umask = 077 old_umask = os.umask(new_umask) logging.info('drop_privileges: Old umask: %s,new umask: %s' % (oct(old_umask),oct(new_umask))) final_uid = os.getuid() final_gid = os.getgid() logging.info('drop_privileges: running as %s/%s' % (pwd.getpwuid(final_uid)[0],grp.getgrgid(final_gid)[0]))
选项1是Apache httpd所采用的路由。 如果这个世界上最流行的Web服务器足够好,那么对于自己的守护进程来说,这是值得认真考虑的。
你可以安装一个库,如果LD_PRELOAD -ed,将伪造任何可执行文件(脚本或其他)的根权限: http : //fakeroot.alioth.debian.org/
在脚本上设置粘贴位权限(至少以我的经验)是没有效果的; 它是ELF二进制解释器(/ usr / bin / python,/ bin / sh,/ usr / bin / perl等)需要粘性权限才能正常工作。 你可以做的是将二进制文件复制到另一个位置,在其上设置粘性位,然后将脚本指向它。
如果您在执行的系统上没有root访问权限,则可以修改路由器设置,将<1024外部端口指向> = 1024的内部端口。
编辑:我忘了提这个小工具: redir 。 这是一个本地端口重定向服务。 这甚至是inetd友好的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。