Logstash 无法读取它也应该具有访问权限的文件

Phi*_*eon 10 ubuntu permissions logstash ubuntu-12.10

我已经使用命令将用户添加logstash到组中。adm$ usermod -a -G adm logstash

logstash 代理尝试读取的文件之一是/var/log/nginx/foo-access.log,它具有以下权限:

-rw-r----- 1 www-data adm 0 Jul 25 07:52 /var/log/nginx/foo-access.log
Run Code Online (Sandbox Code Playgroud)

当我sudo su logstash可以读取文件时,但是,当我$ sudo service logstash_agent restart(init 脚本以logstash用户身份运行)时,它会用以下内容填充 logstash 日志:

{:timestamp=>"2013-07-31T17:05:17.287000+0000", :message=>"failed to open /var/log/nginx/foo-access.log: Permission denied - /var/log/nginx/foo-access.log", :level=>:warn}
Run Code Online (Sandbox Code Playgroud)

我可以确认 logstash 用户在 adm 组中:

$ groups logstash
logstash : logstash adm
Run Code Online (Sandbox Code Playgroud)

此文件绝对具有正确的文件访问权限:

$ getfacl /var/log/nginx/foo-access.log
getfacl: Removing leading '/' from absolute path names
# file: var/log/nginx/foo-access.log
# owner: www-data
# group: adm
user::rw-
group::r--
other::---
Run Code Online (Sandbox Code Playgroud)

我试过把它关掉再打开。

Phi*_*eon 5

原来与 upstart 中的这个 bug 有关:

https://bugs.launchpad.net/upstart/+bug/812870

因为adm是次要组,所以它没有被应用于该过程,它被破坏为 f**k 并且显然在以后的版本中得到修复。

我的解决方案是添加setguid adm到 init 文件中。


小智 5

这是一个可行的解决方法:

sudo vi /etc/init.d/logstash
Run Code Online (Sandbox Code Playgroud)

调整

    LS_GROUP=logstash
Run Code Online (Sandbox Code Playgroud)

经过

    LS_GROUP=adm
Run Code Online (Sandbox Code Playgroud)

然后

sudo /etc/init.d/logstash start
Run Code Online (Sandbox Code Playgroud)