在Linux系统中,通常情况下,大于1024的端口是不对没有root的Linux普通用户开放的。并且还是有一些方法才能让没有root的用户使用大于1024的端口的。本文就来介绍一下Linux中怎么让普通用户使用1024以下端口。
方式一:SetUID
给用户的应用程序在执行位设置用户ID才能使程序可以以root权限来运行,这个方式让程序才能像在root下运行一样,不过须要特别留神suse linux,这些方式同样会带来安全风险,非常是当要执行的程序本身存在安全风险时。
使用的方式是:
1.chownroot.root/path/to/application
2.#使用SetUID
3.chmodu+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.setcapcap_net_bind_service=+ep/path/to/application
Note:
1.这个方式并不是所有Linux系统通适,内核在2.1之前的并没有提供,因而你须要检测要使用此方式所在系统是否支持;
2.另外须要注意的是,假如要运行的程序文件是一个脚本,这个方式是没有办法正常工作的。
方式三:PortForwarding
假如要运行的程序有权限窃听其他端口,这么这个方式是可以使用的,首先让程序运行在非root账户下,并绑定低于1024的端口,在确保能正常工作的时侯,将低端口通过端口转发linux 程序 端口,将低端口转入高端口,进而实现非root运行的程序绑定低端口。要使用此方式可以使用下边的形式:
1.#EnabletheIPFORWARDkernelparameter.
2.sysctl-wnet.ipv4.ip_forward=1
3.#Useiptablesrulestoredirectpackets
4.iptables-F-tnat
5.iptables-tnat-APREROUTING-ptcp--dport80-jDNAT--to:8088
第一步使用sysctl确保启用IPFORWARD功能(此功能在RedHat/CentOS默认是被禁用的),注意,代码中使用的sysctl设置是临时性设置linux系统介绍,重启以后将会被重置,假如要长久保存linux 程序 端口,须要在/etc/sysctl.conf文件内更改:
1.#Defaultvalueis0,needchangeto1.
2.#net.ipv4.ip_forward=0
.ipv4.ip_forward=1
之后从文件中加载新的配置
1.#loadnewsysctl.conf
2.sysctl-p/etc/sysctl.conf
3.#orsysctl-p
4.#defaultfilenameis/etc/sysctl.conf
第二步就是使用iptables的规则来实现端口转发到程序所在的端口,示例中我们要将80端口转发到8088。
此种方式才能比较好的达到我们的目的,我们的程序可以通过非root用户来运行,并才能对外提供高端标语的服务。
方式四:RINETD
这些方式使用的也是端口转发,此工具可以将本地端口映射到远程端口,但此功能对于我们当前的功能来说,有点鸡肋,虽然我们新增了一个额外的程序,这将可能会降低我们系统的风险性。在此不做推荐。
以上就是Linux中怎样让普通用户使用大于1024端口的方式了,上面三种方式都可以不用root并且没有哪些风险,你们可以放心使用。