0xC*_*22L 9 linux scripting capabilities
如果我想在一个可执行文件上设置一个功能 ( capabilities(7)
),例如CAP_NET_BIND_SERVICE
,并且该文件是一个脚本,我是否必须setcap(8)
在启动该脚本的解释器上设置功能 ( ) 或者是否足以在脚本文件上设置它本身?
注意:该问题特别涉及 Scientific Linux 6.1,但我认为可以笼统地回答。
脚本上的设置功能将无效。这与setuid
在脚本上不起作用的情况类似。与后一种情况类似,它是如何execve
处理 shebang的实现及其背后的安全推理(有关详细信息,请参阅:Allow setuid on shell scripts)。
我想你有这些选择
设置解释器本身的功能(实际上是它的副本)
编写一个包装器可执行文件,它将具有硬编码逻辑来执行您的脚本,并在此可执行文件上设置所需的功能
chroot
可能会误用这种包装器在这两种情况下,您都必须execve
通过设置inheritable
标志来确保设置的功能能够继续存在。您通常还可以使用pam_cap
分布式,libcap
通过仅为选定用户的配置来实际激活所需的功能。
一般来说,您希望确保没有人能够通过改变环境来修改您的解释器的行为,例如。PYTHON_PATH
或类似的东西。
归档时间: |
|
查看次数: |
3831 次 |
最近记录: |