在 Linux 下,默认情况下1024 以下的端口是要在 root 下才能使用的,在其他用户下,如果尝试使用将会报错。在有的时候,我们可能考虑程序运行在 root 帐户下,但这可能会给 Linux 系统带来安全风险。那如何能够让非 root 用户运行的程序能够对外启用小于 1024 的端口呢?

本文尝试给出一些方法:

(题图来自: wordpress.com)

第一种方法:SetUID

给用户的应用程序在执行位设置用户 ID 能够使程序可以以 root 权限来运行,这个方法让程序能够像在 root 下运行一样,不过需要非常小心,这种方法同样会带来安全风险,特别是当要执行的程序本身存在安全风险时。

使用的方法是:

  1. chown root.root /path/to/application
  2. #使用SetUID
  3. chmod u+s /path/to/application

我们可以看到在系统下,/usr/bin/passwd这种文件,就使用了SetUID,使得每个系统能的用户都能用passwd来修改密码——这是要修改/etc/passwd的文件(而这个只有root有权限)。

既然要使用非root用户运行程序,目的就是要降低程序本身给系统带来的安全风险,因此,本方法使用的时候需要特别谨慎。

第二种方法:CAP_NET_BIND_SERVICE

从 2.1 版本开始,Linux 内核有了能力的概念,这使得普通用户也能够做只有超级用户才能完成的工作,这包括使用端口。

获取CAP_NET_BIND_SERVICE能力,即使服务程序运行在非root帐户下,也能够banding到低端口。使用的方法:

  1. # 设置CAP_NET_BIND_SERVICE
  2. setcap cap_net_bind_service =+ep /path/to/application

Note:

1. 这个方法并不是所有Linux系统通适,内核在2.1之前的并没有提供,因此你需要检查要使用此方法所在系统是否支持;

2. 另外需要注意的是,如果要运行的程序文件是一个脚本,这个方法是没有办法正常工作的。

第三种方法:Port Forwarding

如果要运行的程序有权限监听其他端口,那么这个方法是可以使用的,首先让程序运行在非root帐户下,并绑定高于1024的端口,在确保能正常工作的时候,将低端口通过端口转发,将低端口转到高端口,从而实现非root运行的程序绑定低端口。要使用此方法可以使用下面的方式:

  1. # Enable the IP FORWARD kernel parameter.
  2. sysctl -w net.ipv4.ip_forward=1
  3. # Use iptables rules to redirect packets
  4. iptables -F -t nat
  5. iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to:8088

第一步使用sysctl确保启用IP FORWARD功能(此功能在Red Hat/CentOS默认是被禁用的),注意,代码中使用的sysctl设置是临时性设置,重启之后将会被重置,如果要长久保存,需要在/etc/sysctl.conf文件内修改:

  1. # Default value is 0, need change to 1.
  2. # net.ipv4.ip_forward = 0
  3. net.ipv4.ip_forward = 1

然后从文件中加载新的配置

  1. # load new sysctl.conf
  2. sysctl -p /etc/sysctl.conf
  3. # or sysctl -p
  4. # default filename is /etc/sysctl.conf

第二步就是使用iptables的规则来实现端口转发到程序所在的端口,示例中我们要将80端口转发到8088。

此种方法能够比较好的达到我们的目的,我们的程序可以通过非root用户来运行,并能够对外提供低端口号的服务。

第四种方式:RINETD

这种方法使用的也是端口转发,此工具可以将本地端口映射到远程端口,但此功能对于我们当前的功能来说,有点鸡肋,毕竟我们新增了一个额外的程序,这将可能会增加我们系统的风险性。在此不做推荐。

(原文转载,有细节修改)

原文发布时间为:2015-07-17




本文来自云栖社区合作伙伴“Linux中国

如何让 Linux 下非 root 用户程序使用小于 1024 端口相关推荐

  1. linux装软件需要root用户,Linux下非root用户安装软件的一般流程:

    1. 获取源代码,一般是wget方式,ubuntu可以使用apt-get source来获取源代码. 2. 解压源代码,一般使用tar -zxvf xxx.tar.gz即可 3. 切换到解压后的目录, ...

  2. linux是不是在根目录下安装的软件其它用户就可以使用,[转载]Linux下非root用户如何安装软件...

    [转载]Linux下非root用户如何安装软件 这是本人遇到的实际问题,之前用到的所有机器,无论是自己的PC还是云服务器,root权限都是妥妥的,但是现在发现实验室的服务器原来自己并没有root权限2 ...

  3. Linux 下非 root 用户 Conda 安装生物信息 R 软件包 MetaboAnalystR 演示

    (首发地址:学习日记 https://www.learndiary.com/2022/06/metaboanalystr/  ) 前些天演示了一下 Linux 下非 root 用户 Conda 安装生 ...

  4. linux下非root用户如何修改root权限的文件

    在linux下会出现把一些配置文件参数配错.root密码忘记等导致系统无法启动或进入root的窘迫境地,本文以redhat  enterprise linux server 6.4为例介绍root身份 ...

  5. Linux下非root用户环境变量使用小结

    环境变量是指操作系统或程序执行时候默认设定的参数,比如path路径变量,或者说是当要执行某个命令或程序的时候默认寻找的路径.环境变量可以分为永久变量和临时变量,或是用户变量和系统变量. 在多人使用同一 ...

  6. Linux 下非 root 用户安装 theano(配置 GPU)

    非 root 用户,安装 Python 第三方的包,尤其像 theano,存在大量的依赖项,存在的主要问题,是安装各个包时的权限问题.所幸,存在这样一个集成工具,叫 anaconda,其已经内置了许多 ...

  7. linux下非root用户获得/dev/ttyUSB0的权限

    查看/dev/ttyUSB0的详细信息: ls -ali /dev/ttyUSB0 493 crw-rw---- 1 root dialout 188, 0 12月 4 15:29 /dev/ttyU ...

  8. Linux下非ROOT权限安装MySQL(亲测有效)

    前言 参考文章:http://www.leoox.com/?p=256 实践的的时候发现了一些问题,做了修正,亲测有效无误 一.必备软件 MySQL的安装包:mysql-5.5.37.tar.gz M ...

  9. linux如何确认账号过期了,linux下非root用户秘密过期如何确认,如果确认,该如何延期使其有效?...

    用root执行一下命令 vim /etc/shadow 然后你能看到 root:$6$mn5WeAieVWxXfcPb$glJaA6xxNSaxvQroUsndbMCrecOCa2xHQw64XNm0 ...

  10. linux ttyusb读写_linux下非root用户获得devttyUSB0的读写权限

    linux下非root用户获得devttyUSB0的读写权限 首先查看/dev/ttyUSB0的权限属性,在终端输入:teashaw@http://www.doczj.com/doc/049b1b8e ...

最新文章

  1. layer的一种用法,页面多选时用地址传递值过多时,用弹出层画一个form表单,然后通过提交表单传值
  2. 连接被远程计算机621,拨号上网常见错误代码提示及解决方法
  3. 5G NGC — 关键技术 — 网络切片 — 切片的运维与运营
  4. python 读取二进制文件 转为16进制输出
  5. cdh jar包 sqoop2_安装sqoop1.4.6-cdh5.5.2
  6. concat函数_三、P57-61 MySQL中常用函数
  7. 连接(交叉连接、内连接、外连接、自连接)
  8. java怎么编程方程_[编程入门]自定义函数求一元二次方程-题解(Java代码)
  9. 两大流量“黑洞”联姻了:让你在支付宝上刷微博,在微博上用支付宝买单
  10. DSP2812之中断系统
  11. 互联网dmz区_DMZ区的概念和用途
  12. mysql 查询父子关系_查询父子关系 · dotnetcore/FreeSql Wiki · GitHub
  13. Promethus(普罗米修斯)监控
  14. 培训班出来,碰到查学历,哎宝宝苦。
  15. CAJ文件不存在或者不能正常访问问题解决
  16. 如何用计算机制作动态图,怎样用电脑轻松制作GIF动图图片
  17. 2022年安全员-B证特种作业证考试题库及模拟考试
  18. 信噪比SNR、符号信噪比Es/N0与比特信噪比Eb/N0的关系
  19. 传漾科技:大数据营销具有“木桶效应”
  20. 【医学图像处理】1 (医学)图像及图像处理流程

热门文章

  1. 8月7日晚八点分享-推荐系统面试/概览
  2. 122.买卖股票的最佳时机II
  3. 移动应用android简单播放器,打造移动掌上影院 Android播放器横评
  4. 凸优化第二章凸集 2.3保凸运算
  5. TF-IDF来源及理论推导 熵推导出
  6. DL神经网络权值初始化
  7. Neural Style Transfer
  8. Raki的读paper小记:Sources of Transfer in Multilingual Named Entity Recognition
  9. 680.验证回文字符串(力扣leetcode) 博主可答疑该问题
  10. MySQL 如何优化大分页查询?