Czy dobrą praktyką jest uruchamianie demona na koncie użytkownika innego niż root?

13

Stworzyłem aplikację, która używa NTP do zmiany czasu w sieci, do synchronizacji dwóch moich komputerów. Działa jako root, ponieważ tylko ta ostatnia może zmieniać godzinę i datę w Linuksie (tak myślę).

Teraz chcę go uruchomić jako użytkownik. Ale muszę uzyskać dostęp do czasu.

  • Czy dobrą praktyką jest uruchamianie demona na koncie użytkownika innego niż root?
  • Czy mam dać mojej aplikacji możliwość taką jak CAP_SYS_TIME?
  • Czy nie wprowadza to luki w zabezpieczeniach?
  • Czy jest lepszy sposób?
Anonimowy12223
źródło
Zwykle demon NTP powinien działać jako ntpkonto użytkownika (przynajmniej w systemach Linux), więc nie powinno być wymagane wprowadzanie tej zmiany. Jaki pakiet NTP zainstalowałeś?
6
Uruchamianie demona na koncie użytkownika innego niż root nazywa się „upuszczaniem uprawnień roota” i jest powszechnie znaną dobrą praktyką, ponieważ ogranicza potencjalne uszkodzenia luk w zabezpieczeniach demona.
1
Zobacz wikipedię dla „ Separacja uprawnień ”.
Kusalananda
Skompilowałem NTP ze źródeł. Nie mam grupy NTP
Anonimowy12223
@xhaltar Możesz utworzyć grupę i użytkownika NTP. Aby skonfigurować sposób uruchamiania usługi (użytkownik, grupa itp.), Możesz albo utworzyć / edytować skrypt inicjujący usługę, albo utworzyć / skonfigurować jednostkę systemową.
Pl4nk

Odpowiedzi:

15

Czy dobrą praktyką jest uruchamianie demona na koncie użytkownika innego niż root?

Tak, i to jest powszechne. Na przykład Apache startuje jako root, a następnie forsuje nowy proces jako dane www (domyślnie).
Jak powiedziano wcześniej, jeśli Twój program zostanie zhakowany (np. Wstrzyknięcie kodu), atakujący nie uzyska dostępu do konta root, ale będzie ograniczony do uprawnień nadanych temu konkretnemu użytkownikowi.

Czy mam podać „Możliwości”, takie jak „CAP_SYS_TIME”?

Jest to dobry pomysł, ponieważ unikasz używania setuid i ograniczasz uprawnienia do tej bardzo specyficznej możliwości.

Czy powinienem to zrobić w inny sposób, który zostałby uznany za „dobrą praktykę”?

Możesz zwiększyć bezpieczeństwo, na przykład:

  • Uruchom usługę jako użytkownik nieuprzywilejowany, bez powłoki.
  • Użyj chroot, aby zablokować użytkownika w jego katalogu domowym.
Pl4nk
źródło
Uwaga: Chroot nie zapewnia bezpieczeństwa, jeśli jesteś rootem i działasz w systemie Linux. Użytkownik root może utworzyć katalog w chroot, otworzyć katalog główny chroot, chroot do nowego katalogu, chdir wraca do prawdziwego katalogu głównego, a następnie chroot do prawdziwego katalogu głównego. BSD naprawia to, uniemożliwiając przeniesienie katalogu fd do chroota.
Kevin
@Kevin Jeśli jesteś rootem, możesz także śledzić procesy poza chrootem i istnieje wiele innych sposobów na obejście go. Zwykły chroot nie może się zakorzenić.
Gilles „S- przestań być zły”
//, emp.jar.st faktycznie tworzy użytkownika dla siebie ze względów bezpieczeństwa. Bardzo dobra praktyka.
Nathan Basanese
Poczekaj, jeśli jestem USER, czy mogę zablokować USER w określonym katalogu? Takich jak „/ opt” (na przykład)?
Anonimowy12223
@xhaltar Aby zablokować uruchamiany proces USERw katalogu, użyj chroot(uruchom go jako użytkownik root). Należy jednak wcześniej utworzyć i zainicjować więzienie (katalog). Krótko mówiąc, musisz umieścić biblioteki i pliki binarne potrzebne procesowi w tym więzieniu, a następnie wywołać chroot <path/to/jail> <command>. Dobry samouczek z kilkoma potrzebnymi przykładami jest dostępny tutaj
Pl4nk
13
  • Czy powinienem to zrobić w inny sposób, który zostałby uznany za „dobrą praktykę”?

O ile nie masz silnych, niepodważalnych powodów, powinieneś po prostu użyć pakietu NTP dostarczonego z dystrybucją GNU / Linux. Standardowy demon NTP potrzebował lat, aby rozwinąć się i oferować zaawansowane funkcje, takie jak spowalnianie lub przyspieszanie zegara systemowego w celu synchronizacji z zegarem sieciowym lub GPS. Został dostosowany do synchronizacji zegarów, więc najprawdopodobniej jest najlepszym narzędziem do tego celu.

ntpdjest nadal utrzymywany, sądząc po najnowszych aktualizacjach (w momencie pisania tego postu). Jeśli potrzebujesz więcej funkcji, sugeruję skontaktowanie się bezpośrednio z programistami, zaufaj temu, co mają do powiedzenia na ten temat.


źródło
5

Jeśli masz program, który musi być w stanie wykonywać funkcję X (np. Manipulować zegarem), i możesz nadać mu przywilej / moc wykonywania funkcji X i nic więcej, to jest lepsze niż podanie całej puszki alfabetu zupa. Jest to znane jako zasada najmniejszego przywileju . Zastanów się, co jeśli twój program zawiera błąd - zwykły błąd programowy lub podatną na atak lukę w zabezpieczeniach. Jeśli działa jako „root”, może usunąć wszystkie pliki - lub wysłać je do atakującego. Jeśli jedyną rzeczą, którą program jest w stanie zrobić, jest manipulowanie zegarem (i nieuprzywilejowanymi funkcjami, takimi jak manipulowanie plikami w zablokowanym katalogu), to jest to najgorsze, co może się zdarzyć, jeśli program zostanie nieuczciwy.

G-Man mówi „Przywróć Monikę”
źródło