通过tomcat.service为tomcat8设置umask

21

我正在尝试为tomcat 8实例设置自定义umask,尝试按照此处中所示的使用systemd tomcat单元中的UMask指令的正确方式,但没有成功。

我想设置022个umask,因为公司开发人员需要访问tomcat /应用程序日志,而它们不在与tomcat用户相同的组中....

令人疯狂的是,systemd文档说:

控制文件模式的创建掩码。以八进制表示访问模式。有关详细信息,请参见umask(2)。默认为0022。

但是日志(应用程序/ tomcat)设置为640(而不是预期的755):

-rw-r----- 1 top top 21416 Feb  1 09:58 catalina.out

我的服务文件:

# Systemd unit file for tomcat
[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target

[...]

User=top
Group=top
UMask=0022

[Install]
WantedBy=multi-user.target

对此有什么想法吗?

谢谢

5个回答

28
尝试将UMASK作为环境变量添加到Tomcat服务文件中:

尝试将UMASK作为环境变量添加到Tomcat服务文件中:

[Service]
...
Environment='UMASK=0022'
...

默认的catalina.sh脚本会检查环境变量$UMASK:

# Set UMASK unless it has been overridden
 if [ -z "$UMASK" ]; then
  UMASK="0027"
 fi
 umask $UMASK

(我觉得,systemd的UMask好像没有被Tomcat使用,但我不完全确定。)


感谢您的建议,mjtecka。我会在有时间的时候尝试一下。目前我已经转向了另一个问题,但我会回来并接受您的答案,如果它有效的话! - Pier
1
这个答案是正确的,应该标记为正确。systemd中的UMask被tomcat忽略了。这个更改有效,只需更改catalina.sh中找到的默认umask即可。 - Tadgh
2
如catalina.sh所建议:不要在此脚本中设置变量。相反,将它们放入CATALINA_BASE/bin目录下的setenv.sh脚本中,以保持自定义内容的独立性。 - Danilo Teodoro
2
@Tadgh在Debian10上使用systemd成功地为Tomcat9配置了服务。只需添加一个名为/etc/systemd/system/tomcat9.service.d/override.conf的文件,并将答案中的内容复制进去,然后确保使用systemctl daemon-reload命令进行刷新,否则它将被忽略。 - wbloos

1
如果使用jsvc作为Tomcat守护进程的启动方式,则需要在jsvc命令行中设置-umask参数。

1
我认为您可以通过以下方式使用systemd实现这一点:
~]# mkdir -p /etc/systemd/system/tomcat.service.d
~]# echo -e "[Service]\nUMask=0022" >/etc/systemd/system/tomcat.service.d/custom-umask.conf
~]# systemctl daemon-reload
~]# systemctl restart tomcat

/etc/systemd/system/tomcat.service.d/umask-user.conf 应该覆盖默认值。

来源: https://access.redhat.com/solutions/2220161

P.S: umask 为 0022 将给文件 0644 权限和目录 0755


0
您可以在Linux上的catalina.sh或Windows上的catalina.bat文件中向UMASK变量添加值,使用002将创建带有775权限的文件:
UMAKS=002

0
Tomcat将使用UMASK环境变量定义。
UMASK=0022

自定义的Tomcat环境变量应该放在setenv.shl文件(Linux)或setenv.bat文件(Windows)中,位于$CATALINA_BASE/bin/目录/文件夹中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接