非 root 服务未找到路径

非 root 服务未找到路径

我有一个 Centos 7 VPS,我在其中发布了一个 .NET Core 应用程序。该解决方案作为服务运行。

它发布在路径:

*/var/opt/MyApp/(All app's files)*

启动时,它会注册一个位置来记录我需要记录的所有信息。日志路径是固定的:

*/var/log/opt/MyApp/(rotated log file)*

我在下面创建了一个服务文件

*/etc/systemd/system/MyApp.service*

如下

[Unit]
Description=Service MyApp

[Service]
WorkingDirectory=/var/opt/MyApp
ExecStart=/usr/bin/dotnet /var/opt/MyApp/MyApp.dll
Restart=always
# Restart service after 10 seconds if dotnet service crashes
RestartSec=10
SyslogIdentifier=MyApp
User=myappbe
Group=myappbe
Environment=ASPNETCORE_ENVIRONMENT=Production 

[Install]
WantedBy=multi-user.target

myappbe 用户和组是使用 nologin 使用以下命令创建的:

*useradd -l -r -s /sbin/nologin myappbe*
*usermod -a -G myappbe myappbe*

工作目录和日志位置均由具有 0775 权限的 myappbe 用户和组拥有。运行像这样配置的服务我可以从journalctl看到一个错误:

*Unhandled exception. System.IO.DirectoryNotFoundException: Requested trace logging directory 
'/var/log/opt/MyApp/' does not exist* 

即使该位置存在并且 myappbe 是所有者。

将服务中的用户和组行更改为:

User=root
Group=root

以 root 身份运行该服务,没有错误。找到路径,我可以看到正在写入的日志。

为什么以非 root 身份运行服务时找不到路径?

编辑*

我尝试评论检查目录是否存在并直接写入日志文件,但出现以下错误:

System.UnauthorizedAccessException:对路径“/var/log/opt/MyApp”的访问被拒绝。

显然,运行该服务的用户对此路径没有权限。但权限是我之前提到的。

相关内容