我正在构建一个包含需要监听端口 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 身份运行)。
用户 Zoredache 在评论中回答了这个问题。我发布这个答案是为了确保发现这个问题的人知道问题已经解决。
在 debian 包中,我添加了一个
postinst
文件DEBIAN/
, dpkg 在将文件复制到文件系统后执行该文件。postinst
包含以下内容:这对我有用。我现在不记得了,但我相信该软件包确实需要由在目标计算机上具有 sudo 访问权限的用户安装。