微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我怎么要求一个低编号的端口作为非根的“正确的方式”

我有一个脚本,我想运行一个守护进程监听一个低编号的端口(<1024)

脚本是在python中,尽pipePerl中的答案也是可以接受的。

在启动脚本中使用start-stop-daemon来守护脚本,这可能会使答案复杂化

我真的( 想 )不想要的是键入ps -few,并看到这个进程运行一个“根”就行了。

closuresPython守护进程时运行代码

WHOIS服务器守护程序

RedHat守护进程函数用法

为什么分叉时我的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] 举报,一经查实,本站将立刻删除。

相关推荐