linux普通用户使用1024以下的端口(80)

  • 1. nginx 等软件做反向代理
  • 2. iptables端口转发
  • 3. setuid
  • 4. CAP_NET_BIND_SERVICE

linux对于非root权限用户不能使用1024以下的端口,对于一些服务,过高的权限,会带来一定的风险。那么对于低权限的用户如何对外开放1024以下的端口。我这里找到几种办法并且亲测可行
首先搭建环境centos7账户prod没有sudo权限

1. nginx 等软件做反向代理

使用nginx启动80端口反向代理后台服务,后台服务可以写1024之后的端口

2. iptables端口转发

首先程序绑定1024以上的端口,然后root权限下做转发注意有些系统需要手动开启IP FORWARD功能
临时修改
sysctl -w net.ipv4.ip_forward=1
或:修改文件sysctl.conf

vi /etc/sysctl.conf
#修改
net.ipv4.ip_forward = 1
#重新加载
sysctl -p /etc/sysctl.conf

使用root配置端口转发,把80端口转发到本机的后台服务6666端口上

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 6666

3. setuid

root账户下执行

##正常情况下是不能监听80端口的
[test@test nginx]$ sbin/nginx -c conf/nginx.conf
nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)
##下面给nginx授权suid权限
[root@test nginx]# chown root:root sbin/nginx
[root@test nginx]# chmod 4755 sbin/nginx
You have new mail in /var/spool/mail/root
[root@test nginx]# ll sbin/nginx
-rwsr-xr-x. 1 root root 17675424 May 22 16:43 sbin/nginx
## 用普通用户运行nginx,监听80端口
[test@test nginx]$ sbin/nginx -c conf/nginx.conf
[test@test nginx]$ ps -ef |grep nginx
root     29988     1  0 13:15 ?        00:00:00 nginx: master process sbin/nginx -c conf/nginx.conf
nobody   29989 29988  0 13:15 ?        00:00:00 nginx: worker process
nobody   29990 29988  0 13:15 ?        00:00:00 nginx: worker process
nobody   29991 29988  0 13:15 ?        00:00:00 nginx: worker process
nobody   29992 29988  0 13:15 ?        00:00:00 nginx: worker process
test     30699 23722  0 13:16 pts/1    00:00:00 grep --color=auto nginx从上面可以看出来nginx可以运行,
但是主进程仍然是以root权限运行,这样并不安全。

4. CAP_NET_BIND_SERVICE

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

获取CAP_NET_BIND_SERVICE能力,即使服务程序运行在非root帐户下,也能够binding到低端口。使用的方法:root账户下执行
setcap cap_net_bind_service=+eip nginx/sbin/nginx

切换到test账户下
信息如下
[root@centos7 sbin]# setcap cap_net_bind_service=+eip nginx
[root@centos7 sbin]# su test
[test@centos7 sbin]$ ./nginx
[test@centos7 sbin]$ ps -aux| grep nginx
test 18014  0.0  0.1  45500  1124 ?        Ss   18:49   0:00 nginx: master process ./nginx
test 18015  0.0  0.1  45960  1596 ?        S    18:49   0:00 nginx: worker process
test 18017  0.0  0.0 112664   984 pts/0    R+   18:49   0:00 grep --color=auto nginx
[test@centos7 sbin]$
cap_net_bind_service

最后别忘记怎么清除这个能力

CSDN_码404:linux普通用户使用1024以下的端口(80)

linux普通用户使用1024以下的端口(80)相关推荐

  1. Linux下用户空间访问I/O端口的相关函数

    Linux下设置端口权限的系统调用有两个:ioperm和iopl函数. ioperm 功能描述 为调用进程设置I/O端口访问权限,从端口地址from起始,共设置num个值为turn_on.ioperm ...

  2. linux普通用户开不了端口,Linux中如何让普通用户使用小于1024的端口

    在Linux系统中,一般情况下,小于1024的端口是不对没有root的Linux普通用户开放的.但是还是有一些技巧能够让没有root的用户使用小于1024的端口的.本文就来介绍一下Linux中如何让普 ...

  3. 非root用户使用1024以下端口(Linux的Capabilities)

    非root用户使用1024以下端口 一.问题背景 二.解决方法 1.进入root用户 2.分配用户权限 总结 1.Capabilities介绍 2.Capabilities其他功能名称 3.Capab ...

  4. linux普通用户监听1024以下的端口(80、443)

    最近为了安全,不打算让Nginx以root权限启动,网上查了查资料,这里整理一下分享给大家 1.介绍 linux对于非root权限用户不能使用1024以下的端口,对于一些服务,过高的权限,会带来一定的 ...

  5. setcap详解-普通用户绑定1024以下端口

    Capabilities的主要思想在于分割root用户的特权,即将root的特权分割成不同的能力,每种能力代表一定的特权操作.例如:能力CAP_SYS_MODULE表示用户能够加载(或卸载)内核模块的 ...

  6. Linux上1024以下的端口

    在Linux上,以一般用户身份执行一个需要占用小于1024端口的程序,会得到错误提示: Permission denied 这是因为在Linux平台,小于1024的端口被认为是特殊端口. The TC ...

  7. nginx非root用户使用1024以下端口

    nginx非root用户使用1024以下端口 nginx应用需要使用80和443端口,但是非root用户,nginx -t 检查文件是会报错: [majd@majd nginx]$ /home/maj ...

  8. 【linux创建用户启动tomcat】

    linux创建用户启动tomcat 前言 基本思路 开始 第一步 第二步 第三步 小知识 前言 使用root用户启动tomcat会使所有html.js等文件具备root权限,会使服务器更容易被黑. 非 ...

  9. linux通过进程看端口,linux下通过进程名查看其占用端口

    linux下通过进程名查看其占用端口: 1.先查看进程pid ps -ef | grep 进程名 2.通过pid查看占用端口 netstat -nap | grep 进程pid 例:通过nginx进程 ...

最新文章

  1. 若变量均已正确定义并赋值,以下合法的c语言赋值语句是,若变量均已正确定义并赋值,以下合法的C语言赋值语句是()...
  2. Notification with Service Workers push events
  3. 每日一皮:完美解释 UDP 为什么会丢包...
  4. python界面不同按钮实现不同功能-python tkinter实现界面切换的示例代码
  5. 2018 GitHub最火技术趋势
  6. 如何忽略word的单词检错功能
  7. python翻译成matlab_matlab语言转译成python
  8. Hbase shell详情
  9. 第五次电信分拆敷陈幕后:激发运营商乖戾反弹
  10. Qt学习(八):QT中TCP传输文件
  11. [转载] 说说JSON和JSONP,也许你会豁然开朗
  12. difference between match and exec
  13. Leetcode之整数反转
  14. Java中字符串的全部知识_java基础教程之字符串的介绍,比较重要的一个知识点「中」...
  15. 几种建模工具简介(SPSS,SAS,Stata,R,Matlab,Amos,Lisrel)
  16. 《数据结构》考研天勤和王道 第三章 栈、队列、数组和广义表
  17. 阿里巴巴的26款超神Java开源项目!
  18. 如何做好手机APP测试?APP测试流程及解决方案
  19. 深南电国际油价期权对赌协议详解? 毁约?
  20. Visual Studio完成并换行快捷键

热门文章

  1. world中空白页怎么删也删不掉——解决方案(超简单好用)
  2. spring中使用logback日志组件替换log4j
  3. quicktime player edit video
  4. 类变量类方法,main方法,代码块,单例设计模式,final,抽象类
  5. Java冒泡排序算法以及算法优化,这篇足矣……
  6. Windows下搭建MQTT服务器
  7. 多校官宣!这些985和211大学研究生的宿舍,没了
  8. python画布添加背景图片_Python 设置 Canvas 背景图片且支持全屏显示
  9. LeetCode 1359、1360
  10. mybatis if标签中判断字符串相等