我尝试使用 Teamcity 为 CI 设置部署者用户。我按照 ServerFault 上这个问题的说明进行操作:处理 /var/www 中 apache2 用户 www-data 权限的最佳方法是什么?
问题是 Teamcity 应用程序正在创建具有755
权限的目录,而 apache(2.4) 无法写入其中的某些目录。如果我将权限更改为775
手动,apache可以写入它们。
这是我设置权限的方法:
- 我创建了一个用户
teamcity
。 - 将组添加
www-data
到用户作为辅助组 - 所有权变更
/var/www
为root:www-data
更改了目录的权限:
find /var/www -type d -exec chmod 2775 {} +
对于具有以下内容的文件:
find /var/www -type f -exec chmod 0664 {} +
- 添加
umask 0002
到/etc/profile
测试:
苏团队城 掩码 >0002 触摸测试文件 ls-l >-rw-rw-r-- 1 teamcity teamcity 0 5 月 25 日 10:38 测试文件 cd /var/www 触摸测试文件 ls-l >-rw-rw-r-- 1 teamcity www-data 0 Mai 25 10:42 测试文件
对于目录来说是一样的。它们rw
适用于用户和组。
部署后,目录和文件的权限755
与775
预期不符。
Teamcity 应用程序作为服务启动:
start-stop-daemon --start -c teamcity --exec /opt/TeamCity/bin/runAll.sh start
好像漏掉了一些细节,但是找不到。
系统:
- Debian 杰西
- 阿帕奇2.4
- 团队城市 9
解决方案:
umask 002
我通过在启动命令之前添加来更改 Teamcity 服务的启动脚本。
答案1
从描述来看,TeamCity 似乎忽略了 umask。也许它在其服务脚本中设置了umask(问题中没有提到)。如果是这样,您可以修改脚本。如果不是,因为它显然是一个闭源应用程序和在 Java 中,你阻止这种情况的能力是有限的。你可以创建一个 cron 作业(每分钟运行一次)来修复目录权限。
进一步阅读:
- 如何在 java 中设置 umask?
- 团队城市流浪者(可能相关的脚本)
- 安装 Teamcity v9.x CentOS 构建代理,示例显示从哪里开始在 中查找服务脚本
systemd
。