我已使用命令将用户添加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
当我sudo su logstash
可以读取文件时,但是,当我$ sudo service logstash_agent restart
(以用户身份运行初始化脚本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}
我可以确认 logstash 用户在 adm 组中:
$ groups logstash
logstash : logstash adm
该文件肯定具有正确的文件访问权限:
$ 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::---
我尝试将其关闭然后再次打开。
答案1
原来和upstart里的这个bug有关:
https://bugs.launchpad.net/upstart/+bug/812870
因为adm
它是一个次要组,所以它没有被应用到该过程中,这被破坏了,并且显然在以后的版本中得到了修复。
我的解决方案是添加setguid adm
到 init 文件中。
答案2
这是一个可行的解决方法:
sudo vi /etc/init.d/logstash
调整
LS_GROUP=logstash
经过
LS_GROUP=adm
然后
sudo /etc/init.d/logstash start