CentOS 上 NGINX 的正确日志权限应该是什么?

Pik*_*ikk 7 nginx logging file-permissions

/var/log/nginx/我有访问和错误日​​志。有些是.log错误,有些是.gz

我想我搞砸了权限。有些文件是由root/root创建的,其他文件是使用nginx.conf 中配置的用户创建的,等等。

  • 哪个用户/组应该创建这些文件?为什么?可以root吗?我可以看到现在 root 正在创建新的 .log 文件,但不确定它是否正确。
  • 我还想问在哪里更改创建这些文件的用户?

小智 8

在 /var/log/nginx/ 中的文件上,规则随着时间的推移而改变(至少以我的经验)。然而,在没有更多数据的情况下,我不愿意给出明确的建议。但我会努力的。

NGINX 本身以“root”身份运行 NGINX 进程以 /etc/nginx/nginx.conf 中指定的用户身份运行,通常是“www-data”(等等,继续阅读)

您可以使用此命令来确定 NGINX 的运行方式:

ps -eo "%U %G %a" | grep nginx
Run Code Online (Sandbox Code Playgroud)

您的输出应如下所示:

root     root     nginx: master process /usr/sbin/nginx -g daemon on; master_process on;

www-data www-data nginx: worker process
Run Code Online (Sandbox Code Playgroud)

你没有说的是你为什么要问这个问题。假设,假设您正在使用 ELK 堆栈运行 OSSEC。如果您使用的是 Ubuntu 16.04,那么您的第二个问题是哪些进程可以读取和写入文件。如果您使用 logrotate,那么您需要编辑 logrotate 文件以及更改日志文件夹的权限。

第 1 步 - 在 logrotate 中更新 nginx 文件:

nano /etc/logrotate.d/nginx
Run Code Online (Sandbox Code Playgroud)

在该文件中,在最新版本的 nginx 和 ubuntu 上,我发现按如下方式更改所有权行将允许它工作。这是在 /etc/logrotate/nginx 中的文件中,它在文件旋转时设置文件权限。

create 0640 nginx nginx
Run Code Online (Sandbox Code Playgroud)

或者:

create 0640 www-data www-data
Run Code Online (Sandbox Code Playgroud)

尽管在实践中 nginx:nginx 的工作更加一致,并且在授予 nginx web 进程对日志文件的权限与将它们设置为 root 之间取得了平衡。

要继续,对于您的旧日志文件(例如由 logstash 读取),您可能需要重置权限(假设我意识到我们大多数人实际上并不使用默认文件位置。)

chmod nginx:nginx /var/log/nginx/*
Run Code Online (Sandbox Code Playgroud)

或(再次)替代

chown www-data:www-data /var/log/nginx/*
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助。我发现有关 nginx 适当权限的数据在日志记录方面充其量是令人困惑的,我将其归因于他们令人惊叹的软件的发展。我欢迎其他了解更多的人对我的回复提供反馈。