Linux给予特定程序非root用户情况下绑定特权端口权限:修订间差异

来自三线的随记
无编辑摘要
无编辑摘要
第1行: 第1行:
linux对于非root权限用户不能使用1024以下的端口,对于一些服务,过高的权限,会带来一定的风险。那么对于低权限的用户如何对外开放1024以下的端口
linux对于非root权限用户不能使用1024以下的端口,对于一些服务,过高的权限,会带来一定的风险。那么对于低权限的用户如何对外开放1024以下的端口


=== authbind ===
===authbind===
百度谷歌知乎你猜
百度谷歌知乎你猜


=== 文件系统能力 ===
===文件系统能力===
从 2.6.24 内核开始, linux-privs 又支持了基于文件系统的能力功能,能够给文件系统里特定的可执行程序指定一个能力,详见 [FCAP]_ 。简而言之执行
从 2.6.24 内核开始, linux-privs 又支持了基于文件系统的能力功能,能够给文件系统里特定的可执行程序指定一个能力,详见 [FCAP]_ 。简而言之执行
<pre>
<pre>
第21行: 第21行:
</pre>
</pre>


=== setuid ===
===setuid===
进程仍然以root身份运行,不安全
进程仍然以root身份运行,不安全


<br />
=== 基于service启动的服务需要在service文件中设置(ubuntu >= 18.04 and others ) ===
# If you want to bind Gitea to a port below 1024, uncomment
# the two values below, or use socket activation to pass Gitea its ports as above
###
#CapabilityBoundingSet=CAP_NET_BIND_SERVICE
#AmbientCapabilities=CAP_NET_BIND_SERVICE
__FORCETOC__  
__FORCETOC__  
{{DEFAULTSORT:bind privileged ports}}
{{DEFAULTSORT:bind privileged ports}}
[[category:Linux]]
[[category:Linux]]

2020年6月7日 (日) 02:58的版本

linux对于非root权限用户不能使用1024以下的端口,对于一些服务,过高的权限,会带来一定的风险。那么对于低权限的用户如何对外开放1024以下的端口

authbind

百度谷歌知乎你猜

文件系统能力

从 2.6.24 内核开始, linux-privs 又支持了基于文件系统的能力功能,能够给文件系统里特定的可执行程序指定一个能力,详见 [FCAP]_ 。简而言之执行

$ sudo setcap cap_net_bind_service=ep /usr/sbin/httpd
$ sudo getcap /usr/sbin/httpd

之后,任何用户(当然前提是对 /usr/bin/httpd 有 x 权限)都可以启动 apache 监听 80 端口而不需要特权身份。

如果把命令里的 ep 改成 ei ,那么就只有在 /etc/security/capability.conf 里设定好的用户才可以了,其它用户无效——这里 i 表示的是继承(inheritance),也就是程序执行时继承用户的对应能力,而非像 p 那样不管用户是否有对应能力都直接设定。也就是说,如果需要为特定用户设置特定程序的特定能力,需要对用户和程序都做对应设置,缺一不可。

???????

$ sudo setcap cap_net_bind_service=+ep
$ sudo setcap cap_net_bind_service=+eip

setuid

进程仍然以root身份运行,不安全


基于service启动的服务需要在service文件中设置(ubuntu >= 18.04 and others )

# If you want to bind Gitea to a port below 1024, uncomment
# the two values below, or use socket activation to pass Gitea its ports as above
###
#CapabilityBoundingSet=CAP_NET_BIND_SERVICE
#AmbientCapabilities=CAP_NET_BIND_SERVICE