一.使用非80端口启动程序,然后再用iptables做一个端口转发。
iptables -t nat -A PREROUTING -p tcp –dport 80 -j REDIRECT –to-port 8080

二.使用SetUID
给用户的应用程序在执行位设置用户 ID 能够使程序可以以 root 权限来运行,这个方法让程序能够像在 root 下运行一样,不过需要非常小心,这种方法同样会带来安全风险,特别是当要执行的程序本身存在安全风险时。
使用的方法是:
1.chown root.root /path/to/application
2.#使用SetUID
3.chmod u+s /path/to/application
我们可以看到在系统下,/usr/bin/passwd这种文件,就使用了SetUID,使得每个系统能的用户都能用passwd来修改密码——这是要修改/etc/passwd的文件(而这个只有root有权限)。
既然要使用非root用户运行程序,目的就是要降低程序本身给系统带来的安全风险,因此,本方法使用的时候需要特别谨慎。

三.假设我们需要启动的程序是nginx,那么这么做也可以达到目的。

一开始我们查看nginx的权限描述:

-rwxr-xr-x 1 nginx dev 2408122 Sep 5 16:01 nginx

这个时候必然是无法正常启动的。

首先修改文件所属用户为root:

chown root nginx

然后再加上s权限:

chmod u+s nginx

再次查看权限描述的时候:

-rwsr-xr-x 1 root root 2408122 Sep 5 16:01 nginx

四.CAP_NET_BIND_SERVICE
从 2.1 版本开始,Linux 内核有了能力的概念,这使得普通用户也能够做只有超级用户才能完成的工作,这包括使用端口。
获取CAP_NET_BIND_SERVICE能力,即使服务程序运行在非root帐户下,也能够banding到低端口。使用的方法:
1.# 设置CAP_NET_BIND_SERVICE
2.setcap cap_net_bind_service =+ep /path/to/application
Note:
1. 这个方法并不是所有Linux系统通适,内核在2.1之前的并没有提供,因此你需要检查要使用此方法所在系统是否支持;
2. 另外需要注意的是,如果要运行的程序文件是一个脚本,这个方法是没有办法正常工作的。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

Captcha Code