Logstash не может читать файлы, к которым он должен иметь доступ

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

Когда я 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::---

Я пытался выключить и снова включить.

Фил Осетрина
источник
Ваш файл не имеет правильных прав записи группы. Чмод исправить
Нитин Меппурату
Я не хочу писать в файл, как я сказал, что хочу прочитать его.
Фил Осетрина
Я предполагаю, что вы также проверили разрешения родительского каталога ( /var/log/nginx)
Дауд
getfacl /var/log/nginx/kapture-api3-access.log
Нитин Меппурату,
Я добавил вывод этой команды в вопрос. Я запускал его раньше с ожидаемыми результатами, поэтому изначально не беспокоился.
Фил Осетрина

Ответы:

5

Оказалось, что это связано с этой ошибкой в ​​upstart:

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

Поскольку это admбыла вторичная группа, она не применялась к процессу, который нарушается как f ** k и, по-видимому, исправлен в более поздней версии.

Мое решение было добавить setguid admв файл инициализации.

Фил Осетрина
источник
5

Вот рабочий способ:

sudo vi /etc/init.d/logstash

Modify

    LS_GROUP=logstash

по

    LS_GROUP=adm

затем

sudo /etc/init.d/logstash start
Дэвид
источник
1
Также работает, добавив «LS_GROUP = adm» в / etc / defaults / logstash - приятная часть в том, что управлять с помощью puppet проще.
тонкий