使用 setfacl 授予用户对 root 拥有的文件夹的完全权限

Jus*_*tin 5 permissions sudo

root考虑到我不想更改所有者,如何让用户在 /var/www/myapp 文件夹(该文件夹属于 )内做任何他们想做的事情?

我已经设置了 TeamCity CI。它在用户帐户下运行teamcity

现在我创建了一个作业,将构建结果复制到 /var/www/myapp 文件夹。该文件夹最初是由 root 创建的,并且归 root 所有,我不想更改它。

因此,我想授予teamcity用户将所有内容部署到该文件夹​​中的权限,并使权限继承到所有现有项目(如果有):

sudo setfacl -dR -m u:teamcity:rwx /var/www/myapp
Run Code Online (Sandbox Code Playgroud)

Getfacl 报告:

getfacl /var/www/myapp
getfacl: Removing leading '/' from absolute path names
# file: var/www/app1
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:teamcity:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
Run Code Online (Sandbox Code Playgroud)

看起来不错,对吧?

但是当我以 teamcity 用户身份运行 cp 任务时,出现错误

cp: cannot create regular file '/var/www/myapp/appsettings.json': Permission denied
Run Code Online (Sandbox Code Playgroud)

我也测试过

sudo runuser -l teamcity -c 'cd /opt/jetbrains/TeamCity/buildAgent/work/f5f9b0bd3b4556c2; cp -Rf appsettings.json /var/www/myapp/'
Run Code Online (Sandbox Code Playgroud)

然而,如果我把它放在sudo前面,cp它似乎工作得很好。但我想避免将 teamcity 添加到 sudoers 并避免sudo在我的 TeamCity 脚本中到处吐槽。