启动期间在何处检索功能

启动期间在何处检索功能

我希望节点应用程序能够绑定到少量端口(准确地说是 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 更细)。在“启动过程”中没有任何地方处理这个问题;每当文件作为程序执行时,生成的进程都会获得这些功能。

是的,以提升的权限保留旧版本的文件会带来严重的安全风险,最好在安装新版本时删除旧版本。

相关内容