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

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

本文尝试给出一些方法: 安全

第一种方法:SetUIDapp

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

使用的方法是:tcp

chown root.root /path/to/application工具

#使用SetUIDspa

chmod u+s /path/to/application.net

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

既然要使用非root用户运行程序,目的就是要下降程序自己给系统带来的安全风险,所以,本方法使用的时候须要特别谨慎。教程

 

第二种方法:CAP_NET_BIND_SERVICE

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

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

# 设置CAP_NET_BIND_SERVICE

setcap cap_net_bind_service =+ep /path/to/application

Note

1. 这个方法并非全部Linux系统通适,内核在2.1以前的并无提供,所以你须要检查要使用此方法所在系统是否支持;

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

 

第三种方法:Port Forwarding

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

# Enable the IP FORWARD kernel parameter.

sysctl -w net.ipv4.ip_forward=1

# Use iptables rules to redirect packets

iptables -F -t nat

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to:8088

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

# Default value is 0, need change to 1.

# net.ipv4.ip_forward = 0

net.ipv4.ip_forward = 1

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

# load new sysctl.conf

sysctl -p /etc/sysctl.conf

# or sysctl -p

# default filename is /etc/sysctl.conf

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

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

 

第四种方式:RINETD

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

免费领取兄弟连IT教育原创linux运维工程师视频/细说linux教程,详情咨询官网客服:http://www.lampbrother.net/linux/

PHP、Linux、HTML五、UI、Android等视频教程(课件+笔记+视频)!联系Q2430675018

相关文章
相关标签/搜索