peo*_*oro 73 linux networking tcp privileges authbind
我需要允许用户(与 root 不同)运行侦听端口 80 的服务器。
有没有办法做到这一点?
Gil*_*il' 35
(其中一些方法已在其他答案中提到;我按偏好的粗略顺序给出了几种可能的选择。)
您可以将低端口重定向到高端口并侦听高端口。
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 1080
Run Code Online (Sandbox Code Playgroud)
您可以以 root 身份启动服务器并在它开始侦听特权端口后删除特权。最好不要自己编写代码,而是从为您完成工作的包装器启动您的服务器。如果您的服务器为每个连接启动一个实例,请从inetd
(或类似程序,例如xinetd
)启动它。对于inetd
,在 中使用这样的行/etc/inetd.conf
:
http stream tcp nowait username:groupname /path/to/server/executable argv[0] argv[1]…
Run Code Online (Sandbox Code Playgroud)
如果您的服务器在单个实例中侦听,请从诸如authbind
. 创建一个空文件/etc/authbind/byport/80
并使其对运行服务器的用户可执行;或 create /etc/authbind/byuid/1234
,其中 1234 是运行服务器的 UID,包含行0.0.0.0/0:80,80
.
如果您的服务器可执行文件存储在支持功能的文件系统上,您可以为其赋予功能。请注意,这些功能仍然相对较新,并且仍有一些问题。cap_net_bind_service
setcap cap_net_bind_service=ep /path/to/server/executable
Run Code Online (Sandbox Code Playgroud)
Authbind,@Gilles 已经提到了它,但我想稍微扩展一下。
它具有方便的访问控制(详细信息在手册页中):您可以通过端口、接口地址、uid、地址范围或端口以及这些的组合来过滤访问。
它有非常有用的参数--depth
:
--深度级别
导致 authbind 影响调用图中深层次的程序。默认值为 1。
“级别深”意味着当一个脚本(或程序)运行另一个脚本时,它会下降一个级别。因此,如果您拥有--depth 5
它意味着在 1 级(或者是 0 级?)到 5 级,您有权绑定,而在 6 级及以上,则没有。当您希望脚本具有访问权限而不是在您不知情或不知情的情况下运行的程序时很有用。
举例来说,你可以有这样的事情:为了安全起见,你有一个java
只运行 java的用户,你想让他访问端口 80:
echo > /etc/authbind/byport/80
chown root:java /etc/authbind/byport/80
chmod 710 /etc/authbind/byport/80
Run Code Online (Sandbox Code Playgroud)
我创建了../byport/80 file
, 将它提供给java
用户组(每个用户都有自己的组),并使其按组执行,这意味着它可由java
用户执行。如果您通过端口授予访问权限,则该文件必须可由应具有访问权限的用户执行,因此我们这样做了。
对于普通的 Joe 来说,这可能已经足够了,但是因为您知道如何使用该--depth
参数,所以您(作为java
用户)authbind --depth [depth] my_web_app's_start_script
从 开始运行并逐步--depth 1
增加,直到找到可行的最小深度并使用它。
归档时间: |
|
查看次数: |
137407 次 |
最近记录: |