我希望节点应用程序能够绑定到少量端口(准确地说是 443,因为它是一个 http2 服务器)。
我这样做与sudo setcap cap_net_bind_service=+ep /path/to/node
这显然是通过靴子记住的。我正在使用 nvm 来允许我安装不同版本的节点,并且我刚刚升级了版本,当然我不再绑定。
再次添加该功能很容易,但大概在某个地方我正在积累权限,我应该在旧版本的节点上关闭这些权限。
但我无法找出启动顺序中发生这种情况的位置。有人可以告诉我在哪里吗(我正在运行 Debian)。
编辑
我认为这些信息应该存储在可执行文件的额外属性中。但是,我在以这种方式设置的文件上找不到任何额外的属性。
答案1
这些功能与目录中的文件条目一起存储(更准确地说,它们位于文件的索引节点,像其他类型的权限一样)。启动期间没有什么特别的事情发生。
从 GNU coreutils 8.23 开始,该ls
命令不了解 Linux 功能,因此您不会在其输出中找到任何内容来告诉您程序已设置功能。使用该getcap
命令列出功能。
要清除文件中的所有功能,请使用setcap -r /path/to/file
.不过,您无需清理任何内容 - 功能与文件一起存储,除了删除文件之外无需执行任何操作。
答案2
请参阅setcap(8)
,功能已设置对于可执行文件。其工作原理与 SUID 或 SGID 类似(但粒度比 SUID 或 SGID 更细)。在“启动过程”中没有任何地方处理这个问题;每当文件作为程序执行时,生成的进程都会获得这些功能。
是的,以提升的权限保留旧版本的文件会带来严重的安全风险,最好在安装新版本时删除旧版本。