在 Debian 软件包中保留 Linux 功能

在 Debian 软件包中保留 Linux 功能

我正在构建一个包含需要监听端口 443 的 Web 服务的包。该服务本身是用 Go 编写的,因此我无法使用 authbind 来管理端口权限。相反,我选择使用 setcap:

me@buildbox $ setcap CAP_NET_BIND_SERVICE=+eip opt/myservice/myservice
me@buildbox $ getcap opt/myservice/myservice
opt/myservice/myservice = cap_net_bind_service+eip

但是,当我在服务器上安装该软件包时,此功能并未保留。

me@myserver $ apt-get install myservice
...
# installs normally
...
me@myserver $ getcap /opt/myservice/myservice
me@myserver $ # ^ No output == no capabilities

我真的不希望这项服务以 root 身份运行,但我无法想出一个在安装软件包时保留的解决方案。我能以某种方式在 debian 软件包中设置功能吗?是否有其他方法可以实现所需的最终结果(服务可以绑定到端口 443,但不以 root 身份运行)。

答案1

用户 Zoredache 在评论中回答了这个问题。我发布这个答案是为了让发现这个问题的人知道这个问题已经解决了。

在 debian 软件包中,我postinst向 中添加了一个文件DEBIAN/,dpkg 在将文件复制到文件系统后会执行该文件。该文件postinst包含以下内容:

#!/bin/sh
set -e
setcap CAP_NET_BIND_SERVICE=+eip /opt/myservice/myservice

这对我来说很管用。我现在不记得了,但我相信该软件包确实需要由目标计算机上具有 sudo 访问权限的用户安装。

相关内容