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.


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.


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.