我使用$ usermod -a -G adm logstash
命令将用户logstash
添加到组adm
。
其中一个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
(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}
我可以确认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::---
我试过把它关掉再打开。
原来这与新贵有关:
https://bugs.launchpad.net/upstart/+bug/812870
因为adm
是一个次要团体,所以没有被应用到这个过程中,这个过程被破解为f ** k,并且显然在更高版本中被修复。
我的解决scheme是将setguid adm
添加到init文件。
这是一个工作的解决方法:
sudo vi /etc/init.d/logstash
修改
LS_GROUP=logstash
通过
LS_GROUP=adm
然后
sudo /etc/init.d/logstash start