Sudoers na jeden dzień w tygodniu?

10

Mój szef zgłosił się na ochotnika do roli administratora systemu dla naszego produkcyjnego serwera redhat. Poprosił mnie o zaostrzenie bezpieczeństwa, aby uniknąć takich nieszczęść, rm -f *które miały miejsce niedawno.

W tej chwili mamy 53 użytkowników sudo wkraczających na maszynę, co jest koszmarem audytu. Zastanawiam się, czy można zezwolić użytkownikom na dostęp tylko w określone dni tygodnia.

Na przykład, czy mogę zezwolić użytkownikowi „Joe” na logowanie TYLKO we wtorki i czwartki, a „Jane” tylko w niedziele? Czy etc/sudoersmożna dostosować, aby to umożliwić?

Czy istnieje lepszy sposób niż używanie sudoers?

Chris
źródło
10
Polecam NIE czytać strony podręcznika. Zobacz xkcd # 1343
user60684
3
Nie, mówię mu, żeby nie czytał instrukcji, ponieważ nie można odczytać IMHO. OP prawdopodobnie znalazłby odpowiedź na stronie man, gdyby łatwiej było ją przeczytać.
user60684
10
Możesz to zrobić, ale pamiętaj, że użytkownicy mogą po prostu odzyskać dostęp do sudo przez cały czas, niezależnie od tego, z jakiego roota korzystają.
Nick Matteo
2
@ Mark0978, jeśli znasz nazwę firmy, prawdopodobnie umarłbyś ze śmiechu. To hańba, że ​​jest dozwolone ... na serwerze produkcyjnym.
Chris
3
To wydaje się trochę głupie. Oznacza to po prostu, że Bill będzie musiał poczekać na swój środowy przedział czasowy rm -rf /.
Michael Hampton

Odpowiedzi:

21

sudo wykonuje uwierzytelnianie za pomocą PAM, podobnie jak prawie wszystko inne na Linux-ie.

Więc powinieneś być w stanie pam_time.soto zrobić.

Domyślnie przynajmniej w Debianie ten moduł nie jest włączony. Musisz dodać linię, która wygląda następująco:

account    requisite  pam_time.so

aby /etc/pam.d/sudowłączyć tylko sudo lub /etc/pam.d/common-account(po bloku pam-auth-update) włączyć wszystkie programy w systemie.

Następnie edytuj, /etc/security/time.confaby ustawić ograniczenia. Nazwa usługi powinna wynosić sudo. Na przykład, aby zezwolić Fredowi na używanie sudotylko w godzinach od 15:00 do 17:00 w piątek:

sudo;*;fred;Fr1500-1700

(UWAGA: Nie testowałem tego.)

edytuj: Aby być jasnym, zgadzam się z drugą odpowiedzią i różnymi komentatorami, wydaje się, że masz zbyt wiele osób uruchamiających zbyt wiele poleceń jako root, i naprawdę musisz to naprawić. I oczywiście, jeśli mogą zostać rootem, mogą edytować konfigurację pam ...

derobert
źródło
PAM wydaje się skomplikowany do wdrożenia, ale umożliwia też ściślejszą kontrolę nad tym, kto i co robi. Zaakceptowano i zagłosowano. Dziękuję Ci.
Chris
2
Nie sądzę, aby zachęcanie go było właściwą odpowiedzią, IMAO poprawną odpowiedzią na to pytanie jest „URUCHOMIĆ SIĘ W DOMACH !!!! 1! 1 !! 1! 1”
o0 '.
Czy to naprawdę działa? Jestem w stanie kontrolować różne mechanizmy logowania, takie jak „login”, „ssh”, „gdm”, „su” za pomocą pam_time.so, ale to nie działa dla sudo. Chcę zapobiec rootowaniu przez zwykłe mechanizmy poza godzinami pracy biura. (Zdaję sobie sprawę, że nie jest to kuloodporne, ktoś mógłby wcześniej przygotować skorupę setuida lub tylne wejście, ale nie oczekuję, że tak się stanie w tej sytuacji.)
Sam Watkins
20

Chciałbym zapytać, dlaczego 53 użytkowników potrzebuje sudo do codziennej pracy - dla większości użytkowników (nawet programistów) sudo powinno być rzadkim wyjątkiem, a nie rutynową rzeczą, którą ktoś mógłby swobodnie uruchomić sudo rm -rf *.

Czy możesz użyć uprawnień grupowych (lub nawet bardziej zaawansowanych list ACL), aby dać ludziom dostęp do plików, których potrzebują, aby wykonać swoją pracę, być może za pomocą skryptów lub plików binarnych w wersji setuid lub sudo, aby umożliwić im wykonywanie zadań takich jak ponowne uruchomienie usług? (zwróć uwagę, że trudno jest napisać bezpieczny skrypt setuid / sudo, więc bardziej uczciwym ludziom należy zachować uczciwość).

Nawet jeśli możesz ograniczyć ludzi do jednego dnia tygodniowego dostępu do sudo, nadal 53 osoby mają dostęp do sudo w ciągu tygodnia, więc to naprawdę nie pomaga w twoim podstawowym problemie.

W związku z tym chciałbym zapytać, czy tak wielu użytkowników w ogóle potrzebuje dostępu do serwera produkcyjnego - czy możesz wysłać dzienniki lub inne dane / pliki, których potrzebują na maszynę nieprodukcyjną?

Jasio
źródło
Czy możesz opublikować jakiś dostęp do plików dziennika, których mogą potrzebować, konfigurację typu sftp w więzieniu chroot.
Boatcoder
@Johnny większość pracy wykonanej na tym hoście to tworzenie / edycja i uruchamianie skryptów powłoki. Użytkownicy nie powinni mieć takiej możliwości vi/cp/mv/rm. Tylko cdi more. Nic więcej.
Chris
@Johnny Jeśli ustawię ACL w katalogu, czy pliki w tym katalogu domyślnie dziedziczą atrybuty ACL?
Chris
@Chris Tak, jeśli ustawisz domyślną listę ACL dla katalogu.
Michael Hampton
To powinien być komentarz, a nie odpowiedź. Niezależnie od tego, czy scenariusz PO jest rozsądny, inni ludzie mają podobną potrzebę zablokowania „sudo” dla niektórych użytkowników w określonych momentach.
Sam Watkins
7

Najprostszym sposobem byłoby użycie suders.d (przez inludedir) do konfiguracji. Możesz wtedy mieć zadania crona, które mogą umieścić reguły dla każdego użytkownika w tym katalogu na pożądany czas.

Dyrektywy #includedir można użyć w / etc / sudoers do utworzenia katalogu sudo.d, do którego można upuścić reguły sudoers jako część reguł. Na przykład, biorąc pod uwagę:

#includedir /etc/sudoers.d

sudo odczyta każdy plik w /etc/sudoers.d, pomijając nazwy plików, które kończą się na „~” lub zawierają „.” znak, aby uniknąć problemów z menedżerem pakietów lub edytorem plików tymczasowych / zapasowych. Pliki są analizowane w posortowanej kolejności leksykalnej. Oznacza to, że /etc/sudoers.d/01_first zostanie przeanalizowany przed /etc/sudoers.d/10_second. Pamiętaj, że ponieważ sortowanie jest leksykalne, a nie numeryczne, /etc/sudoers.d/1_whoops zostanie załadowany po /etc/sudoers.d/10_second. Aby uniknąć takich problemów, można użyć stałej liczby zer wiodących w nazwach plików.

Zauważ, że w przeciwieństwie do plików zawartych przez #include, visudo nie będzie edytować plików w katalogu #includedir, chyba że jeden z nich zawiera błąd składniowy. Nadal możliwe jest uruchomienie visudo z flagą -f w celu bezpośredniej edycji plików.

/etc/sudoers.d/joe byłby obecny, gdy chcesz, aby Joe miał dostęp, a po prostu możesz usunąć plik, aby go odebrać.

jamespfinn
źródło
1
Miałem problem z moimi specyficznymi dla użytkownika plikami sudoers: „sudoers.user1” itp. Uwaga na temat „~” i „.” postacie rozwiązały mój problem. Cieszę się, że przeczytałeś instrukcję! Dziękuję Ci.
Han
0

Możesz dodać tabelę crontab, aby umieścić użytkowników w grupie sudo, a następnie drugą tabelę crontab, aby usunąć tego użytkownika.

PolarisUser
źródło