如何确保用户具有创建文件夹和文件的递归权限

如何确保用户具有创建文件夹和文件的递归权限

我有一个gitlab-runner运行 CI 的用户,基本上每当我将某些东西推送到 gitlab 存储库时,它都会构建该项目,然后将其复制到/var/www/stanislavromanov.com

问题是它没有权限这样做。

错误

$ cp -R ./build/* /var/www/stanislavromanov.com/
cp: cannot create regular file '/var/www/stanislavromanov.com/404.html': Permission denied
cp: cannot create directory '/var/www/stanislavromanov.com/blog': Permission denied
cp: cannot create regular file '/var/www/stanislavromanov.com/ci.log': Permission denied
cp: cannot create regular file '/var/www/stanislavromanov.com/favicon.ico': Permission denied
cp: cannot create directory '/var/www/stanislavromanov.com/fonts': Permission denied
cp: cannot create directory '/var/www/stanislavromanov.com/img': Permission denied
cp: cannot create regular file '/var/www/stanislavromanov.com/index.html': Permission denied
cp: cannot create regular file '/var/www/stanislavromanov.com/index.xml': Permission denied
cp: cannot create directory '/var/www/stanislavromanov.com/privacy': Permission denied
cp: cannot create regular file '/var/www/stanislavromanov.com/scripts.js': Permission denied
cp: cannot create regular file '/var/www/stanislavromanov.com/sitemap.xml': Permission denied
cp: cannot create regular file '/var/www/stanislavromanov.com/styles.css': Permission denied
ERROR: Build failed: exit status 1

我已经尝试过这个:sudo chown -R gitlab-runner /var/www和这个sudo chown -R gitlab-runner:gitlab-runner /var/www

仍然有同样的错误。我 100% 确定用户是,gitlab-runner因为当我执行此操作时whoami,它显示gitlab-runner

我究竟做错了什么?

我通过将 chmod 777 设置为来修复此问题,stanislavromanov.com但我认为这远非最佳解决方案。

答案1

首先,我不会递归更改整个 www 目录的 POSIX 所有者或组,您可以使用扩展 acl 来实现这一点。为此,您需要执行sudo setfacl -R -m u:gitlab-runner:rwx /var/www

然后,您可以将 gitlab-runner 用户添加到 sudoers 文件中,并通过在sudo相关命令前面添加内容来更改脚本。如果失败,您需要查看getfacl目标目录中的输出。

相关内容