Jaki jest cel użytkownika „none”?

93

Po przeczytaniu Wyświetl listę wszystkich użytkowników zauważyłem, że w moim systemie Ubuntu istnieje konto użytkownika o nazwie „nobody”.

Zauważyłem też, że mogę zalogować się na to konto z terminala za pomocą następującego polecenia i mojego hasła:

sudo su nobody

su nikt

Wcale mi to nie przeszkadza, ale chcę wiedzieć, jaki jest cel tego użytkownika? Czy jest on domyślnie tworzony podczas nowej instalacji Ubuntu, czy jest tworzony przez instalację konkretnego pakietu?

Radu Rădeanu
źródło
8
Pamiętaj, że kiedy logujesz się przy użyciu swojego hasła, używasz swojego hasła do kroku sudo, a nie do konta nobody (a powodem tego jest to, że superużytkownik może udostępnić komukolwiek hasło bez konieczności podawania hasła (chociaż jako wspomniano poniżej, wierzę przynajmniej w pochodne RH, jeśli niczyja powłoka nie jest ustawiona na / sbin / nologin, nadal nie będziesz w stanie zalogować się nawet przy użyciu superużytkownika (aka root)
Foon
Tak jest teraz domyślnie (18.04+?). sudo su nobodypowrót To konto jest obecnie niedostępne. ponieważ powłoka dla użytkownika nobody jest ustawiona na/usr/sbin/nologin ( getent passwd nobody).
Pablo A
@sarnold - zapoznaj się z moim komentarzem do odpowiedzi, o której, jak sądzę, masz na myśli. To raczej słaba odpowiedź, ponieważ nie uzasadnia ani nie przytacza źródeł. Co więcej, jest to sprzeczne ze wszystkim, co wiem o koncie nobody i o tym, jak działa NFS: dzięki root_squashtemu mapuje roota do nikogo na zdalnych systemach. Jest to mniej więcej dokładnie odwrotność tego, co stwierdza ta odpowiedź
vidarlo

Odpowiedzi:

85

Służy do uruchamiania rzeczy, które nie wymagają żadnych specjalnych uprawnień. Zazwyczaj jest zarezerwowany dla wrażliwych usług (httpd, itp.), Aby w przypadku włamania się do niego wyrządziły minimalne szkody pozostałej części systemu.

Porównaj to z uruchomieniem czegoś jako prawdziwego użytkownika, gdyby ta usługa została naruszona (serwery WWW są czasami wykorzystywane do uruchamiania dowolnego kodu), działałaby ona jako ten użytkownik i miałaby dostęp do wszystkiego, co ten użytkownik miał. W większości przypadków jest to tak złe, jak rootowanie.

Możesz przeczytać trochę więcej na temat użytkownika nobody na Ubuntu Wiki:

Aby odpowiedzieć na swoje działania następcze:

Dlaczego nie mogę uzyskać dostępu do tego konta su nobody?

sudo grep nobody /etc/shadowpokaże Ci, że nikt nie ma hasła i nie możesz subez hasła do konta. Najczystszym sposobem jest sudo su nobodyzamiast tego. To pozostawi cię w dość opustoszałej shskorupie.

Czy możesz podać konkretny przykład, kiedy wskazane jest korzystanie z tego konta?

Gdy uprawnienia nie są wymagane do działania programu. Jest to najbardziej zauważalne, gdy nigdy nie będzie żadnej aktywności dysku.

Prawdziwy świat Przykładem tego jest memcached(klucz-wartość w pamięci cache / database / rzecz), siedząc na moim komputerze i mój serwer działa pod uwagę nikt. Dlaczego? Ponieważ po prostu nie potrzebuje żadnych uprawnień, a przyznanie mu konta z dostępem do zapisu do plików byłoby niepotrzebnym ryzykiem.

Oli
źródło
Jeszcze dwie rzeczy, jeśli możesz wyjaśnić: 1) dlaczego nie mogę uzyskać dostępu do tego konta su nobodyi 2) czy możesz podać konkretny przykład, kiedy wskazane jest korzystanie z tego konta?
Radu Rădeanu,
@ RaduRădeanu 1) Zgaduję, że to dlatego, że nie ma ustawionego hasła, a kiedy jesteś suzwykłym użytkownikiem, musisz podać hasło użytkownika docelowego. Spróbuj sudo -inastępnie su nobodyz poziomu powłoki głównej (która nie będzie wymagać hasła).
CVn
2
Network File Systemmapuje rootna, nobodyaby lokalny root nie miał dostępu do wszystkiego, co może zdalny root.
Sylwester,
1
@ RaduRădeanu Uwaga historia edycji. Kiedy testowałem oryginalne polecenie (nie co tam jest), to początkowo kończyłem w powłoce kreski (/ bin / sh), ale teraz nie mogę tego zreplikować. Twoja oryginalna edycja była w porządku. To nie ja to zmieniłem.
Oli
1
Zawsze myślałem, że nobodyjest właściwie / przede wszystkim używany przez NFS jako stany bazowe Linuksa .
dgonzalez
29

W wielu wariantach uniksowych „nikt” to zwykła nazwa konta użytkownika, które nie posiada żadnych plików, nie ma w uprzywilejowanych grupach i nie ma żadnych możliwości poza tymi, które ma każdy inny użytkownik.

Często uruchamiane są demony, ponieważ nikt, szczególnie serwery, w celu ograniczenia szkód, jakie może wyrządzić złośliwy użytkownik, który przejął nad nimi kontrolę. Jednak przydatność tej techniki jest zmniejszona, jeśli więcej niż jeden demon działa w ten sposób, ponieważ wówczas przejęcie kontroli nad jednym demonem zapewniłoby kontrolę nad nimi wszystkimi. Powodem jest to, że procesy, które nie są własnością, mają możliwość wysyłania sygnałów do siebie, a nawet debugowania, co pozwala im czytać, a nawet modyfikować pamięć.

Informacje pochodzą z http://en.wikipedia.org/wiki/Nobody_(nazwa użytkownika) .

Paulius Šukys
źródło
-1: nobodyjest przeznaczony wyłącznie dla NFS i nie powinien być używany przez inne usługi, a na pewno nie przez administratorów systemu. Dzięki.
Sarnold
22

Użytkownik nikt nie jest zarezerwowany tylko dla NFS.

Powyższe odpowiedzi są raczej błędne, ponieważ zakładają, że nobodyjest to „ogólny” identyfikator użytkownika w stylu anonimowym / gościa.

W modelu kontroli dostępu w systemie UNIX / Linux identyfikatory anonimowe / gości w stylu gościa nie istnieją i są to złe sugestie:

  • powszechne uruchamianie demonów jako nobody, zwłaszcza serwerów, w celu ograniczenia szkód, jakie może wyrządzić złośliwy użytkownik, który przejął nad nimi kontrolę. ” z tego powodu: „ Jednak użyteczność tej techniki jest zmniejszona, jeśli więcej niż jeden demon działa w ten sposób, ponieważ wówczas przejęcie kontroli nad jednym demonem zapewniłoby kontrolę nad wszystkimi ".
  • Prawdziwym przykładem tego jest memcached(pamięć podręczna / baza danych / rzecz w pamięci klucz-wartość), siedząc na moim komputerze i na serwerze działającym pod nobodykontem. Dlaczego? Ponieważ po prostu nie potrzebuje żadnych uprawnień i nie daje tego konto, które miało dostęp do zapisu do plików, byłoby niepotrzebnym ryzykiem ”.

Nazwa nobodyużytkownika o identyfikatorze użytkownika 65534 została utworzona i zarezerwowana do określonego celu i powinna być używana tylko w tym celu: jako symbol zastępczy dla „niezmapowanych” użytkowników i identyfikatorów użytkowników w eksporcie drzewa NFS.

Oznacza to, że jeśli nie skonfigurowano mapowania użytkownika / identyfikatora dla eksportu drzewa NFS, wszystkie pliki w eksporcie będą własnością nobody. Ma to na celu uniemożliwienie wszystkim użytkownikom systemu importującego dostępu do tych plików (chyba że mają oni „inne” uprawnienia), ponieważ żaden z nich (oprócz root) nie może zostać / stać się nobody.

Dlatego bardzo złym pomysłem jest używanie go nobodyw jakimkolwiek innym celu, ponieważ jego celem jest bycie nazwą użytkownika / identyfikatorem użytkownika dla plików, które nie mogą być dostępne dla nikogo.

Wpis na Wiki też jest bardzo zły.

Praktyka UNIX / Linux polega na utworzeniu nowego konta dla każdej „aplikacji” lub obszaru aplikacji, które wymagają oddzielnej domeny kontroli dostępu, i nigdy nie będzie ponownie nobodyużywana poza NFS .

PeterG
źródło
Ta odpowiedź nie przytacza żadnych źródeł, i jawnie sprzeczne kilka innych odpowiedzi, co zrobić cytowania źródeł. Obecna nagroda wskazuje, że ta odpowiedź jest szczególnie dobra, w którym to przypadku należy przytoczyć niektóre źródła lub podać listę z pewnym uzasadnieniem.
vidarlo
@ mook765 Ta część jest w porządku. Paragraf o NFS jednak nie grokuję. Na przykład z root_squashon rootjest mapowane na użytkownika nobody, więc pliki posiadające właściciela nobodynie mają absolutnie żadnego sensu. Ponadto stwierdzenie, że pliki należące do nikogo nie mają być dostępne dla nikogo, nie ma sensu, ponieważ uprawnienia do plików są odrębne od własności w systemie UNIX. Nie twierdzę, że wszystko w odpowiedzi jest złe, po prostu to, że jej elementy nie mają dla mnie żadnego sensu lub nie mają go wcale :)
vidarlo
1
@vidarlo, ta odpowiedź nie sugeruje, że powinieneś ustawić pliki, które mają być własnością nobody. Mówi ci, że nobodyNFS ma korzystać z uprawnień do mapowania, i to jest dla mnie najważniejszy punkt. Jak NFS nobodyjest mniej interesujący niż fakt, że nie wykorzystać nobody. Dzięki.
Sarnold
@sarnold, moim zdaniem, odpowiedź w tej sprawie jest nadal błędna. Jeśli użytkownik przeczyta odpowiedź i man exports, może być bardzo zdezorientowany.
vidarlo
17

nobodyUżytkownik jest tworzony domyślnie na nową instalację (zaznaczone na pulpicie Ubuntu 13.04).

W wielu wariantach * nix nobodyjest to zwykła nazwa konta użytkownika, które nie posiada żadnych plików, nie ma w uprzywilejowanych grupach i nie ma żadnych możliwości poza tymi, które posiada każdy inny użytkownik ( nobodyużytkownik i grupa nie mają żadnego wpisu w /etc/sudoerspliku) .

Oczywiste jest, aby uruchomić demony jak nobody, zwłaszcza serwerów, w celu ograniczenia szkód, które mogą być wykonywane przez złośliwego użytkownika, który przejął kontrolę nad nimi. Jednak przydatność tej techniki jest zmniejszona, jeśli więcej niż jeden demon działa w ten sposób, ponieważ wówczas przejęcie kontroli nad jednym demonem zapewniłoby kontrolę nad nimi wszystkimi. Powodem jest to, że nobodyposiadane procesy mają możliwość wysyłania sygnałów do siebie, a nawet debugowania, co pozwala im czytać, a nawet modyfikować pamięć.

Źródło : Wikipedia - nikt (nazwa użytkownika)


W nobody-owned procesy są w stanie wysyłać sygnały do siebie nawzajem, a nawet wzajemnie ptrace w Linuksie, co oznacza, że proces nikt wtórny może odczytywać i zapisywać w pamięci innego procesu nikt własność.

To jest przykładowy wpis nobodyużytkownika w /etc/passwdpliku:

alaa@aa-lu:~$ grep nobody /etc/passwd
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh

Jak można zauważyć, nobodyużytkownik ma /bin/shjako powłokę logowania i /nonexistentjako katalog domowy. Jak sama nazwa wskazuje, /nonexistentkatalog domyślnie nie istnieje.

Jeśli jesteś paranoikiem, możesz ustawić nobodydomyślną powłokę jako /usr/sbin/nologintaką, a więc odmówić logowania ssh dla nobodyużytkownika.

Źródło : LinuxG.net - użytkownik Linuksa i Uniksa Nikt

Alaa Ali
źródło
Ta odpowiedź zasługiwałaby na +1, gdyby usunięto niepoprawny akapit z Wikipedii. Dzięki.
Sarnold
3

nikt nie jest specjalnym kontem użytkownika i grupy. Ponieważ jest to rzeczywista nazwa użytkownika (i nazwa grupy) i może być używana przez procesy, a nawet użytkowników, nie jest dosłownie nikim . Na przykład niektóre konfiguracje Apache nie mają nikogo jako użytkownika / grupy, która jest właścicielem plików i katalogów serwisu WWW. Problem pojawia się, gdy wiele procesów może korzystać z użytkownika nobody, takich jak katalogi NFS i serwer WWW.

jeffmcneill
źródło
0

Drobne poprawki do „ Użytkownik nikt nie jest zarezerwowany tylko dla NFS. ' odpowiedź. W nobodytym momencie użytkownik jest również używany do nieuprzywilejowanych kontenerów z mocowaniami powiązań.

Jest to pobierane z systemd-nspawn, w szczególności opcji --bind mount:

Zauważ, że gdy ta opcja jest używana w połączeniu z --private-users, wynikowe punkty montowania będą własnością użytkownika nobody. Wynika to z faktu, że mount oraz jego pliki i katalogi nadal są własnością odpowiednich użytkowników hosta i grup, które nie istnieją w kontenerze, a zatem pojawiają się pod symbolem wieloznacznym UID 65534 (nikt). Jeśli takie montowania powiązań są tworzone, zaleca się, aby były one tylko do odczytu, używając --bind-ro =.

systemd-nspawn

Ykuksenko
źródło