Zauważyłem, że niektórzy z moich użytkowników nie otrzymali w ogóle rabunku po awarii, nawet jeśli wszystko inne w ich konfiguracji wydawało się poprawne.Upuszczanie przywilejów roota i wciąż generowanie coredumpów
po przeczytaniu strona core(5) człowiekowi kilka razy, i zauważył, ten szczególny punkt:
[Rdzeń zrzut nie jest wytwarzany, gdy] Proces wykonuje określoną ID użytkownika (zestaw -group-ID), który jest własnością użytkownika (grupy) innego niż rzeczywisty identyfikator użytkownika (grupy) procesu.
Mój demon nie jest setuid korzeń, ale w wielu konfiguracjach, to zaczęło się jako root, a jeśli plik .conf określa nazwę użytkownika, spada przywileje, ze zwykłymi kombinacji:
setgid(gid);
setuid(uid);
Kiedy to robi, coredumps nie są już generowane. Wszystko inne w środowisku wydaje się poprawne, usunięcie tych wywołań (i pozostanie jako root) przynosi mi coredumps jak zwykle.
Starałem się zmienić „prawdziwe” uid/gid jako strona mężczyzna wydawał się sugerować, wywołując mniej przenośny setresgid/uid który wydaje się być sugerowane często spadać przywileje stałe:
setresgid(gid, gid, gid);
setresuid(uid, uid, uid);
Spodziewałem się, że to rozwiąże problem, ale ... w ogóle się nie poprawiło. Nadal nie ma coredump.
Sooo ... co teraz?
kod badania:
#include <stdlib.h>
int main(int argc, char **argv) {
if (argc > 1) {
setgid(atoi(argv[2]));
setuid(atoi(argv[1]));
}
abort();
}
Zastosowanie:
./a.out
jako dowolny użytkownik po prostu usunąć bez setgid/setuid./a.out 1000 100
(gdzie 1000 UID 100 jest GID) jako root upuść przywileje i oglądać coredumps nie zdarzają się.- Niepożądana funkcja bonusu: należy przekazać jeden parametr, a nie dwa, aby uzyskać SIGSEGV zamiast SIGABRT.
Ja już przetestowane w Arch Linux, CentOS 6.5 i OpenBSD 5.3
A nieuprzywilejowany użytkownik/grupa nie wyłączył wyładowań głównych ('ulimit -c' nie zgłasza' 0')? –
Tak, nieograniczona po obu stronach. Użycie go jako identyfikatora UID (0 i 1000) bez wywołań setuid/gid powoduje powstanie coredumpów. – dequis
Naprawdę trzeba być bardziej specyficznym dla tego rodzaju rzeczy, dystrybucje Linuksa robią tu różne rzeczy. W szczególności są tam moduły PAM, pamiętaj o ubuntu, które wchodzą w interakcje z tworzeniem zrzutów rdzenia. –