linux普通用户使用1024以下的端口(80)
linux对于非root权限用户不能使用1024以下的端口,对于一些服务,过高的权限,会带来一定的风险。那么对于低权限的用户如何对外开放1024以下的端口。我这里找到几种办法并且亲测可行
首先搭建环境centos7 账户tengine没有sudo 权限
1.nginx 等软件做反向代理
反向代理不说了。网上以查到
2.iptables端口转发
首先程序绑定1024以上的端口,然后root权限下做转发注意有些系统需要手动开启IP FORWARD功能
vi /etc/sysctl.conf
#修改
net.ipv4.ip_forward = 1
#重新加载
sysctl -p /etc/sysctl.conf

3. setuid
root账户下执行
chown root:root nginx
chmod 4755 nginx

从图片可以看出来nginx可以运行,但是主进程仍然是以root权限运行,这样并不安全。
4.CAP_NET_BIND_SERVICE
从 2.1 版本开始,Linux 内核有了能力的概念,这使得普通用户也能够做只有超级用户才能完成的工作,这包括使用端口。
获取CAP_NET_BIND_SERVICE能力,即使服务程序运行在非root帐户下,也能够banding到低端口。使用的方法:
root账户下执行
setcap cap_net_bind_service=+eip /home/tengine/nginx/tengine/sbin/nginx
切换到tengine账户下
信息如下

[root@centos7 sbin]# setcap cap_net_bind_service=+eip /home/tengine/nginx/tengine/sbin/nginx
[root@centos7 sbin]# su tengine
[tengine@centos7 sbin]$ stat nginx
文件:"nginx"
大小:6054330 块:11832 IO 块:4096 普通文件
设备:fd00h/64768d Inode:397136 硬链接:1
权限:(0755/-rwxr-xr-x) Uid:( 1001/ tengine) Gid:( 1001/ tengine)
最近访问:2016-10-11 18:43:05.402239835 +0800
最近更改:2016-10-11 18:25:47.273183401 +0800
最近改动:2016-10-11 18:48:23.084257104 +0800
创建时间:-
[tengine@centos7 sbin]$ ./nginx
[tengine@centos7 sbin]$ ps -aux| grep nginx
tengine 18014 0.0 0.1 45500 1124 ? Ss 18:49 0:00 nginx: master process ./nginx
tengine 18015 0.0 0.1 45960 1596 ? S 18:49 0:00 nginx: worker process
tengine 18017 0.0 0.0 112664 984 pts/0 R+ 18:49 0:00 grep --color=auto nginx
[tengine@centos7 sbin]$
最后别忘记怎么清除这个能力
setcap -r nginx
linux普通用户使用1024以下的端口(80)的更多相关文章
- CentOS Linux release 7.7.1908 (Core)--rabbitmq用户创建以及相关防火墙端口开启问题
增加访问用户,默认用户guest只能本地访问. #添加用户 rabbitmqctl add_user 账号 密码 rabbitmqctl add_user admin admin #分配用户标签(ad ...
- linux创建用户和用户组
Linux创建用户.用户组 及 删除 在创建用户时,需要为新建用户指定一用户组,如果不指定其用户所属的工作组,自动会生成一个与用户名同名的工作组.创建用户user1的时候指定其所属工作组users,例 ...
- Linux 普通用户启动nginx
众所周知,apache的80端口为系统保留端口,如果通过其他非root用户启动,会报错如下: ()Permission denied: make_sock: could not bind to add ...
- Linux单用户CS模型TCP通讯完全注释手册
Linux单用户CS模型TCP通讯完全注释手册 server 描述 实现一个简单的Linux单用户CS通讯,客户端发送一串字符串,服务器将其转换为大写后返回. server 代码 ``` #inclu ...
- 2.Linux的用户、用户组、权限、文件系统管理及其网络配置
2.1 Linux的用户及用户组 2.1.1 Linux的用户管理 用户账号管理包含以下三个方面: 用户账号的添加.删除.与修改 用户口令(密码)的管理 用户组的添加.删除管理 Linux系统中用户信 ...
- Linux root用户密码重置,远程登陆,文件基本属性
Linux root用户密码重置,远程登陆,文件基本属性 忘记Linux系统的root密码,linux系统忘记root密码的情况该怎么办呢?重新安装系统吗?当然不用!进入单用户模式更改一下root密码 ...
- Linux普通用户安装配置mysql(非root权限)
Linux普通用户安装配置mysql(非root权限) 说明:在实际工作中,公司内网的机器我们一般没有root权限,也没有连网,最近参考网上的资料使用一般的账户成功安装mysql,记录如下 Linux ...
- linux 端口80占用问题
主要是搭建一次ghost博客网站改成80端口无法启动提示被占用. 提示:80端口被占用,启动失败. netstat -ano 或者 netstat -apn | grep 80 没有发现占用80端口的 ...
- 【转】linux 设置用户id 设置组id
linux 设置用户id 设置组id 转自 linux 设置用户id 设置组id 最近看apue,简单记录对设置用户id理解(设置组id同理). 1. 相关的id好像很多,共有哪些? 文件2个 ...
随机推荐
- 关于MySQL数据库的备份方案
这里简单总结MySQL的备份分为3种:分为冷备份,逻辑备份,热备份. 1.冷备份: 一般主要用于非核心业务,这类业务一般都是允许业务中断的,冷备份的特点就是数度快,恢复时也最为简单.通常直接复物理文件 ...
- HDU-1212.BigNumber(有关模数的定理)
本题大意:给出一个1000位以内的大数和一个小数,让你计算并给出大数对小数取余的结果. 本题思路:由下面的公式可以推出本题的计算公式,套入即可解决,建议自己把这个公式推一下,很简单的... 参考代码: ...
- gridview空间使用
1.HTML代码 <asp:GridView ID="gv_Info" runat="server" AutoGenerateColumns=" ...
- Codeforces Beta Round #27 (Codeforces format, Div. 2)
Codeforces Beta Round #27 (Codeforces format, Div. 2) http://codeforces.com/contest/27 A #include< ...
- 浅析Java 数组-基础详解
什么是数组:数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同. Java 数组:用来存储固定大小的同类型元素. 一 声明.创建,初始化Java 数组 写在前面 ...
- 8.16 val()和html()的问题
今天在做关闭模态框重置表单时,关闭模态框后输入框里的值还是在,不知道怎么回事? 感谢wd啦,原来我在初始化这个输入框的时候就写错了,输入框写值的时候用的是val(),而我和上面的div一样,用的是ht ...
- Mysql的随机抽取
方法一 SELECT * FROM SHARE ORDER BY RAND( ) LIMIT 1; 在MYSQL的官方手册,里面针对RAND()的提示大概意思就是,在ORDER BY从句里面不能使用R ...
- WorkerMan源码分析(resetStd方法,PHP中STDIN, STDOUT, STDERR的重定向)
WorkerMan中work.php中 resetStd 方法中代码如下 public static function resetStd() { if (!static::$daemonize || ...
- 一键查看IE密码!IE PassView简易教程
IE浏览器保存在本地的各网站登录账号密码怎么查看?如果你想一下子就找到所有保存在IE的账号和密码,那IE PassView(IE密码查看器)能帮到你.IE PassView(IE密码查看器)非常小巧, ...
- golang 简单的实现内 网 穿 透,用户访问本地服务。
一.功能描述: 客户端通过访问外网服务器上指定端口,间接访问自已本地的内网服务. 二.原理图如下: 三.实现代码如下: server.go代码: package main; import ( &quo ...