Logstash nie może czytać plików, do których również powinien mieć dostęp

10

Dodałem użytkownika logstashdo grupy admza pomocą polecenia $ usermod -a -G adm logstash.

Jednym z plików, które agent logstash próbuje odczytać, jest ten /var/log/nginx/foo-access.log, który ma następujące uprawnienia:

-rw-r----- 1 www-data adm 0 Jul 25 07:52 /var/log/nginx/foo-access.log

Kiedy mogę sudo su logstashodczytać plik, ALE, kiedy ja $ sudo service logstash_agent restart(który skrypt startowy uruchamia się jako logstashużytkownik), zapełnia dzienniki 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}

Mogę potwierdzić, że użytkownik logstash jest w grupie adm:

$ groups logstash
logstash : logstash adm

Ten plik zdecydowanie ma odpowiedni dostęp do pliku:

$ 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::---

Próbowałem go wyłączyć i włączyć ponownie.

Phil Sturgeon
źródło
Wygląda na to, że plik nie ma odpowiednich uprawnień do zapisu w grupie. Chmod do naprawienia
Nithin Meppurathu
Nie chcę pisać do pliku, tak jak powiedziałem, że chcę go przeczytać.
Phil Sturgeon,
Zakładam, że sprawdziłeś także uprawnienia do katalogu nadrzędnego ( /var/log/nginx)
dawud
getfacl /var/log/nginx/kapture-api3-access.log
Nithin Meppurathu
Dodałem wynik tego polecenia do pytania. Uruchomiłem go wcześniej z oczekiwanymi wynikami, więc początkowo nie zawracałem sobie głowy.
Phil Sturgeon,

Odpowiedzi:

5

Okazało się, że jest związany z tym błędem na początku:

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

Ponieważ admbyła to grupa drugorzędna, nie zastosowano jej do procesu, który jest zepsuty jako pieprzenie i najwyraźniej został naprawiony w późniejszej wersji.

Moim rozwiązaniem było dodanie setguid admdo pliku init.

Phil Sturgeon
źródło
5

Oto działające obejście:

sudo vi /etc/init.d/logstash

modyfikować

    LS_GROUP=logstash

przez

    LS_GROUP=adm

następnie

sudo /etc/init.d/logstash start
David
źródło
1
Działa również poprzez dodanie „LS_GROUP = adm” do / etc / defaults / logstash - fajną rzeczą jest to, że łatwiej jest zarządzać za pomocą marionetki.
cienkie