众所周知Linux和其他类Unix系统将端口编号分为两个范围:非特权端口(大于等于1024)和特权端口(小于1024)。
特权端口(小于1024),这些低编号端口通常被分配给重要的网络服务,如HTTP(80)、FTP(21)、SSH(22)等,它们承载着关键的网络通信和对外服务。一般情况下不允许非root用户使用。
但在工作中,root用户在生产环境中,非系统管理员是不能登录系统操作的,但是某一些业务还想使用特权端口(小于1024),此时就需要非root用户来启动该方面的端口了。
下面简单总结了一个方法,可以用安全限制来解决非root用户启动特权端口来使用。此处以80端口为例,该端口恰好位于特权端口范围内,其它特权端也可以产用该方法。
一、使用authbind工具来控制
除用防火墙和sudo来控制之外,可以用authbind包来进行配置
下载authbind_2.1.3.tar.gz安装包,网址地址:SlackBuilds.org - authbind
1.1、编译 & 安装
此处我用的操作系统是CentOS7.6_x64,其它操作系统操作方法基本一致,大家可以根据自己操作系统版本进行微调操作。
把authbind_2.1.3.targz安装包下载好之后,并且也进行了解压,我以是源码编译的方法进行安装的(该软件也支持二制包的使用),可以根据自己的需要进行包的选择。
由于authbind安装包目前基本上都是debian操作系统的包,但大家也不用担心,可以通过修改Makefile来完成源码安装。
[root@test ~]# tar -xf authbind_2.1.3.tar.gz
[root@test ~]# cd ./authbind_2.1.3/work
[root@test ~]# vi Makefile
把 prefix=/usr/local 改成 prefix=/usr
改完之后进行保存,再执行编译和安装即可。
[root@test ~]# make && make install
注:如果在编译有报错,有可以是操作系统缺少某一些包造成,根据报错信息,安装对应的包即可,安装完成之后,再次执行编译和安装即可。
1.2、配置
例如用test这个用户启动一个应用,这个应用想使用80端口。
[root@test ~]# touch /etc/authbind/byport/80
[root@test ~]# chmod 500 /etc/authbind/byport/80
[root@test ~]# chown test /etc/authbind/byport/80
1.3、启动应用
启动命令之前加上:authbind --deep
如果是Nginx:daemon authbind --deep $nginxd -c ${nginx_config}
如果是Java: authbind --deep java ....