允许非 root 用户对 root 拥有的文件进行 setfacl

允许非 root 用户对 root 拥有的文件进行 setfacl

我有一个应用程序manager需要调用setfacl来允许(禁止)某些用户执行某个文件。

此应用程序以非 root 用户身份运行admin(出于多种原因,我希望保持这种状态)。因此,setfacl内部调用manager失败setfacl: <filename>: Operation not permitted

我的理解是,我可以授予用户admin在拥有的文件上CAP_FOWNER使用 的能力。我尝试这样做,通过添加到。重新登录 后,上限设置如下:setfaclrootcap_fowner admin/etc/security/capability.confadmin

$ 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>

相关内容