ubuntu - 可以创建文件,但不能修改?
问题描述
我的权限有问题。我在 shell 中运行 gitlab-runner,它应该将文件从我的 repo 复制到它也可以访问的特定目录。当 gitlab 运行程序应该复制文件的这些目录不存在时,它会创建并复制它而没有任何问题。但是在我的仓库提交一次之后,管道卡住了,我收到了这个错误消息:
$ cp -r api /var/www/example.com
cp: cannot create regular file '/var/www/example.com/api/.git/objects/b9/b63973775876c6be690a53cc82612f7b3c14c9': Permission denied
cp: cannot create regular file '/var/www/example.com/api/.git/objects/73/1d82c36e404eb20984824078d73496995314d3': Permission denied
我不知道为什么,因为所有权限都应该设置正确,并且目录是由 gitlab-runner 本身创建的。
有谁知道为什么在创建目录后运行者不能修改目录内的文件?
非常感谢。
解决方案
如果您想授予所有人权限,您可以sudo chmod a+rwx /path/to/file
在终端中键入,替换/path/to/file
为文件。您还可以使用该命令sudo chmod -R a+rwx /path/to/folder
授予所选文件夹及其文件的权限
这不是一个好的解决方案,您应该授予 gitlab-runner 的读写权限,而不是所有人!
您可以使用setfacl控制用户/组对文件或文件夹的访问
setfacl -R -m u:gitlab-runner:rwx myfolder
-R 标志将递归地设置所有子目录的权限。
这会为特定用户设置权限,而不会更改目录的所有权。
推荐阅读
- wpf - 在WPF中单击后如何防止checkBox自动更改checkState
- c# - BenchmarkDotNet,跳过特定运行时的基准
- flutter - 饼图颤动
- apache-nifi - Nifi 1.10.0-使用新的Stateless NiFi执行引擎和命令行
- c# - 从另一个项目导入 .proto 文件
- javascript - 如何从 JavaScript 传递数据以在 Laravel 中执行数学运算
- sql - Oracle 查询调优建议
- oracle - 使用 postgres oracle_fdw 成功使用比较运算符
- spring - 如何将多个参数作为列表传递到 JDBC 模板中
- android - 从 Android 中的属性文件显示不同的语言内容