umask 在主目录以外的目录中无法按预期工作

umask 在主目录以外的目录中无法按预期工作

我尝试使用 Teamcity 为 CI 设置部署者用户。我按照 ServerFault 上这个问题的说明进行操作:处理 /var/www 中 apache2 用户 www-data 权限的最佳方法是什么?

问题是 Teamcity 应用程序正在创建具有755权限的目录,而 apache(2.4) 无法写入其中的某些目录。如果我将权限更改为775手动,apache可以写入它们。

这是我设置权限的方法:

  1. 我创建了一个用户teamcity
  2. 将组添加www-data到用户作为辅助组
  3. 所有权变更/var/wwwroot:www-data
  4. 更改了目录的权限:

    find /var/www -type d -exec chmod 2775 {} +

    对于具有以下内容的文件:

    find /var/www -type f -exec chmod 0664 {} +

  5. 添加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适用于用户和组。

部署后,目录和文件的权限755775预期不符。

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 作业(每分钟运行一次)来修复目录权限。

进一步阅读:

相关内容