我有一个应用程序manager
需要调用setfacl
来允许(禁止)某些用户执行某个文件。
此应用程序以非 root 用户身份运行admin
(出于多种原因,我希望保持这种状态)。因此,setfacl
内部调用manager
失败setfacl: <filename>: Operation not permitted
。
我的理解是,我可以授予用户admin
在拥有的文件上CAP_FOWNER
使用 的能力。我尝试这样做,通过添加到。重新登录 后,上限设置如下:setfacl
root
cap_fowner admin
/etc/security/capability.conf
admin
$ capsh --print
Current: = cap_fowner+i
...
setfacl
但仍然失败:
$ setfacl -b <filename>
setfacl: <filename>: Operation not permitted
该文件当前具有以下 acl:
$ getfacl <filename>
# file: <filename>
# owner: root
# group: root
user::rwx
user:cluster-user2:r--
group::r-x
mask::r-x
other::r-x
我也尝试过sudo setcap cap_fowner=ie manager
(以下这),但似乎也无法在内部manager
使用setfacl
。
我很高兴能得到有关如何setfacl
以非 root 用户身份使用 root 拥有的文件的任何线索。
最后,我想manager
使用用户将其作为 systemd 服务运行admin
。有没有 systemd 方法来添加所需的功能?
答案1
您正在寻找的是“环境”功能集 - Linux 的较新添加的功能,pam_cap 尚不支持它。
当前版本的 pam_cap 仅管理“可继承”功能,根据原始版本设计只有在正在执行的文件(即 /usr/bin/setfacl)也具有使用 标记为“可继承”的功能setcap cap_fowner=ei <path>
。
(不是 cap_fowner=eip
因为将功能标记为“允许”将在执行时授予程序 CAP_FOWNER 权限任何用户,即使用户尚未通过 PAM 获得该权限。)
对于打包文件,使用dpkg-statoverride
永久更改其所有者。或者,授予用户须藤以 root 身份运行单个命令的权限setfacl -m * <filename>
。