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

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

本文尝试给出一些方法:

第一种方法:SetUID

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

使用的方法是:

chown root.root /path/to/application

#使用SetUID

chmod u+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到低端口。使用的方法:

# 设置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.itxdl.cn/linux/

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

时间: 2024-08-02 02:21:03

如何让Linux下非root用户程序使用小于1024端口的相关文章

Linux下非root用户安装软件

下面简要说一下Linux下非root用户安装软件的一般流程:1. 获取源代码,一般是wget方式,ubuntu可以使用apt-get source来获取源代码.2. 解压源代码,一般使用tar -zxvf xxx.tar.gz即可3. 切换到解压后的目录,运行 ./configure.其选项可以通过 ./configure –help来获取,非root用户下最重要的应该是定义安装目录,即应该定义 ./configure –prefix=/path/to/bin, 对于一些依赖库,可能还需要使用

linux下非root用户如何修改root权限的文件

在linux下会出现把一些配置文件参数配错.root密码忘记等导致系统无法启动或进入root的窘迫境地,本文以redhat  enterprise linux server 6.4为例介绍root身份修改root权限配置文件的参数后,root无法登录,然后通过linux的rescue模式改回配置文件,巧妙以非root身份修改了root权限的文件的解决方案. 首先,插入linux安装盘重启系统,等到引导进入安装会话,上下移动方向键,选rescue installed system: 第二,进入修复

linux下非root用户的sudo问题

linux下的root用户是个超级管理员,一般是不用这个用户登录进行操作的,但有时候需要root权限,又不想切换用户的话可以使用sudo命令.但是不是所有的用户都可以使用sudo命令的. 首先可能会遇到下面的提示: ××× is not in the sudoers file.  This incident will be reported. 解决办法: 1.修改/etc/sudoers 文件 #su - #chmod u+w /etc/sudoers 在 root    ALL=(ALL) 

Linux 下非root用户使用docker

Linux 下非root用户使用docker 通常我们使用linux系统的时候,最好是不要直接使用root账号,但是使用Docker的时候,默认又是不能使用非root用户的,关于原因,官方说法如下: The docker daemon binds to a Unix socket instead of a TCP port. By default that Unix socket is owned by the user root and other users can access it wi

Linux下非root权限安装与使用GDAL库的方法

学习GDAL的话推荐两个网站. GDAL的官方文档:www.gdal.org 李民录老师的博客:http://blog.csdn.net/liminlu0314/article/category/777646 下面进入正题. 笔者的系统为RHEL4. 建议Linux的使用者习惯非root权限的操作,这是一个好习惯,在工作中会很有帮助. 首先安装GDAL依赖库PROJ.4和GEOS. PROJ.4是提供投影坐标系相关操作的库,GEOS是提供空间分析计算相关的库.都是开源的项目,可以自行Google

Linux下非root用户安装软件的一般流程:

1. 获取源代码,一般是wget方式,ubuntu可以使用apt-get source来获取源代码. 2. 解压源代码,一般使用tar -zxvf xxx.tar.gz即可 3. 切换到解压后的目录,运行 ./configure.其选项可以通过 ./configure –help来获取,非root用户下最重要的应该是定义安装目录,即应该定义 ./configure –prefix=/path/to/bin, 对于一些依赖库,可能还需要使用 ./configure  –prefix=xxx –wi

备忘 Linux下非root用户实现crontab+rsync数据同步权限问题解决办法

如果在命令行手动执行rsync命令可以正常同步数据,但是在crontab定时任务里提示权限失败. 遇到这种情况,可以在rysnc命令里指定用ssh安全隧道方式的同时参数指定使用可以免密码登录对方机器的认证密钥文件. 1,创建一个新的密钥 ssh-keygen -t rsa 2,将密钥添加到对方主机信任中,实现免密码ssh登录 ssh-copy-id -i[密钥文件] [非root用户名]@[对方主机] 3,再在crontab里跑rsync试试 rsync -e'ssh -p22 -i[你的密钥文

linux 下非root用户新建文件

如果使用非root帐号下去创建文件的方式其去创建文件是有问题的(没有权限) 解决方法: 首先切换到root用户的权限下面去工作 su root 输入你的密码 然后 vim /etc/sudoers近期之后进行编辑的模式,如果发现这个文件的权限不够,那么则使用chmod来修改该文件的权限 找到 root    ALL=(ALL) ALL 在其下一行编辑 你想要有权限的用户名字 ALL=(ALL) ALL 然后在su 切换回你当前的用户 这个时候你会发现你已经有了这个权限了

Linux下忘记root密码怎么办?

1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库. 因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的 状态下,其他的用户也可以任意地登录和修改MySQL的信息.可以采用将MySQL对 外的端口封闭,并且停止Apache以及所有的用户进程的方法实现服务器的准安全 状态.最安全的状态是到服务器的Console上面操作,并且拔掉网线. 2.修改MySQL的登录设置: # vim /etc/my.cnf 在[mysqld]的段中加上一句:s