Dlaczego nie ma już użytkownika z uprawnieniami roota ~?

20

Z ciekawości chciałbym wiedzieć, dlaczego logując się jako root, nie jestem już w / home / user . Jaki jest powód i co dokładnie robi katalog / root ?

Nie jestem zaawansowanym użytkownikiem. Proszę odpowiedzieć prostymi słowami lub podać link, który zawiera jasne, proste wyjaśnienia. Używam Ubuntu 16.04 i loguję się jako root sudo -i. Jak wyjaśniono tutaj , sudo -ima / root jako home. Chcę wiedzieć, jaki jest powód; czy może być jakaś korzyść? I nie w ~ jak użytkownik sudo -s.

Codito ergo sum
źródło
11
root jest także użytkownikiem, więc ma swój osobisty homekatalog, ale ten nazywa sięroot
damadam
3
Możesz użyć, sudo -saby być w tym samym katalogu użytkownika.
Pilot6
3
@ Pilot6 przepraszam, dodałem, że w tym samym czasie, gdy zobaczyłem twój komentarz: D Mam nadzieję, że nie masz nic przeciwko :)
Rinzwind
2
@Unbesiegbarkeit man sudoodpowie na pytanie. Aby być prostym, user -inależy użyć ustawień użytkownika root, ale sudo -sbieżących ustawień użytkownika.
Pilot6

Odpowiedzi:

28

Nie logujesz się jako root, uruchamiając sudopolecenie. Uruchamiasz powłokę z uprawnieniami roota.

Jeśli chcesz pozostać w bieżącym katalogu osobistym użytkownika, możesz użyć sudo -szamiast sudo -ipolecenia.

cd ~przeniesie Cię do tego samego katalogu, jakbyś nie był w powłoce z uprawnieniami roota. Dosłownie /home/$USER.

Podczas używania sudo -isystem działa tak, jakbyś był zalogowany jako rootużytkownik. Z tego powodu

cd ~ 

przenosi cię do katalogu domowego użytkownika root /root.

/rootkatalog to katalog domowy rootużytkownika.

Główną różnicą jest to, że pliki ustawień powłoki, takie jak, .bashrcsą używane /rootw przypadku sudo -ii od zwykłego użytkownika w przypadku sudo -s.

Pilot 6
źródło
3
Jakie zalety ma posiadanie / root jako domu?
Codito ergo sum
2
Pliki takie .bashrcsą używane stamtąd w określonej powłoce. W większości przypadków nie ma dużej różnicy.
Pilot6
11
@Unbesiegbarkeit / home może nie zostać zamontowany w pewnych okolicznościach, np. W trybie pojedynczego użytkownika, braku dostępu do sieci itp., A root nadal musi mieć możliwość zalogowania się w takich okolicznościach.
doneal24
2
@ DougO'Neal Jeśli /homenie jest dostępny, problem nie istnieje. Następnie naprawdę logujesz się jako root.
Pilot6
4
@ Pilot6: Istnieją różnice lub powinny być. Na przykład na moich komputerach konfiguruję plik shr. Roota. *, Aby wizualnie pokazać, że działam jako root - np. Monit w innym formacie i kolorze czerwonym. Skonfigurowane są również aliasy, aby nie robić pewnych rzeczy, które mogą być szkodliwe, jeśli zostaną wykonane jako root, i c.
jamesqf
29

Powodem, dla którego dom rootużytkownika jest /rooti nie /home/rootjest, jest to, że zwykle /homejest to punkt montowania oddzielnej partycji / woluminu / dysku ... (z różnych powodów, takich jak miejsce na dysku lub zdalne ...)

Jeśli z jakiegoś powodu montowanie się /homenie powiedzie, możesz nadal łączyć się rooti znajdować się w /rootkatalogu domowym, aby sprawdzić i naprawić problemy

Co więcej, w celu konserwacji, wstępnej konfiguracji, zmiany rozmiaru ... będziesz podłączony tak jak rootpowinien i możesz być w stanie odmontować / ponownie zamontować/home

alexf
źródło
7
+1, To powinna być zaakceptowana odpowiedź. Możesz zmienić lokalizację roota na dowolną, ale pozostawiamy / root na / a nie w / home z powodów odzyskiwania.
ntg
16

Jaki jest powód i co dokładnie robi katalog / root?

root ma / root jako swój dom, a kiedy przełączysz się na root, skończysz w jego domu. Taka jest natura sudo -i. sudo -srobi to samo, ale nie przełącza katalogów. Podręcznik do sudo :

-s [command]

Opcja -s (shell) uruchamia powłokę określoną przez zmienną środowiskową SHELL, jeśli jest ustawiona, lub powłokę określoną w bazie danych haseł. Jeśli podano polecenie, jest ono przekazywane do powłoki w celu wykonania za pomocą opcji -c powłoki. Jeśli nie podano polecenia, wykonywana jest powłoka interaktywna.

-i [command]

Opcja -i (symuluj początkowe logowanie) uruchamia powłokę określoną przez wpis bazy danych haseł użytkownika docelowego jako powłokę logowania . Oznacza to, że pliki zasobów specyficzne dla logowania, takie jak .profile lub .login, zostaną odczytane przez powłokę. Jeśli podano polecenie, jest ono przekazywane do powłoki w celu wykonania za pomocą opcji -c powłoki. Jeśli nie podano polecenia, wykonywana jest powłoka interaktywna. sudo próbuje przejść do katalogu domowego tego użytkownika przed uruchomieniem powłoki. Polityka bezpieczeństwa powinna zainicjować środowisko na minimalny zestaw zmiennych, podobny do tego, który jest obecny, gdy użytkownik się loguje. Sekcja Środowisko poleceń w podręczniku sudoers (5) dokumentuje, w jaki sposób opcja -i wpływa na środowisko, w którym polecenie jest uruchamiany, gdy używana jest zasada sudoers.

Użytkownik root musi być częścią systemu. Gdy umieścisz / home na innej partycji, a root był częścią / home, możesz mieć poważne kłopoty, jeśli partycja nie zostanie zamontowana. Z tego samego powodu my także

/bin
/sbin 

i

/usr/bin
/usr/sbin

Kiedy umieścisz / usr na partycji i / usr nie zamontuje się, nadal masz działający system.

Rinzwind
źródło
2
Jak to odpowiada na pytanie? Czy to jest komentarz?
Pilot6
2
Sudo -i nie było częścią pytania, kiedy odpowiedziałem ;-)
Rinzwind
2
Czy mamy pytania i odpowiedzi dotyczące sudo -ivs sudo -s?
Pilot6
2
Hmm możemy. Będę szukać. edytuj Nie znalazłem żadnego, ale pamiętałem, że go widziałem, ale to było na naszych holenderskich forach ubuntu: D
Rinzwind
2
Wygląda na to, że widziałem go tutaj, ale nie mogłem go znaleźć.
Pilot6
15

System plików Linux ma określoną strukturę. Niezbędne są pliki binarne /bin/, pliki modułu ładującego /boot/, większość plików urządzeń /dev/, punkty montowania nośników wymiennych /media/itp.

Zobacz https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard .

Niektóre drobne szczegóły mogą się różnić w zależności od dystrybucji (np. /usr/bin/Vs. /usr/local/bin/), ale ogólnie prawie wszystkie dystrybucje Linuksa mają tę samą strukturę katalogów.

Odpowiedzieć na Twoje pytanie:

Katalogi domowe użytkowników są w /home/. Zasadniczo Linux to system operacyjny dla wielu użytkowników. Możesz mieć tylko jedno konto użytkownika na swoim laptopie z jego katalogiem domowym /home/<username>/, ale jeśli spojrzysz /home/na udostępniony serwer Linux, zobaczysz wiele katalogów domowych: po jednym dla każdego konta użytkownika. Chodzi o to, że każdy użytkownik systemu ma uprawnienia do zapisu tylko we własnym katalogu domowym. Jeśli masz nazwę użytkownika bob, możesz odczytywać, zapisywać i usuwać pliki, /home/bob/ale nie możesz niczego dotykać w /home/alice/ani w /var/log/.

rootjest jednak inny. rootjest użytkownikiem administracyjnym i ma uprawnienia do zapisu w dowolnym miejscu w systemie (i może działać jako dowolny użytkownik systemu). rootMa więc sens, że ma specjalny katalog domowy, /root/ponieważ rootnie jest zwykłym użytkownikiem. Poza tym /root/jest to zwykły katalog bez specjalnej magii, chociaż jest cicho możliwe (nawet prawdopodobne), że narzędzia systemowe polegają na /root/tym, że są domem użytkownika root.

Kiedy wykonujesz polecenie sudo -iw terminalu, przełączasz się z bycia np. Zwykłym użytkownikiem bobna bycie root. Zauważ, że ten przełącznik wpływa tylko na okno terminala, w którym wpisałeś sudo -i. W przypadku menedżera plików nadal jesteś, boba jeśli otworzysz inne okno terminala, nadal bobtam będziesz . W tym kontekście symbol ~jest skrótem dla katalogu domowego bieżącego użytkownika. Dla bob ~środków, /home/bob/ale dla root ~środków /root/.

Mam nadzieję, że wszystko to wyjaśni.

Maria S.
źródło
3
To idealna odpowiedź!
Pilot6
5
Prawdopodobnie warto zauważyć, że katalog domowy Roota był pierwotnie /. Standardowa lokalizacja została zmieniona ze względów bezpieczeństwa (każdy musi mieć możliwość wyświetlania listy plików /, aby każdy mógł zobaczyć, jakie pliki kropkowe posiadał użytkownik root
Austin Hemmelgarn,
14

Widzę, że wszyscy odpowiadają, co się dzieje, gdy logujesz się jako root (dostajesz katalog ~, który nie znajduje się w / home), ale nikt nie mówi dlaczego. Dlatego:

Jeśli cała struktura / home staje się bezużyteczna i musisz ją naprawić, lub jeśli musisz zmienić przydział / home, ponieważ brakuje miejsca, musisz to jakoś zrobić. Nie możesz zalogować się jako każdy użytkownik, który ma ~ in / home, ponieważ zawiesisz się, gdy tylko spróbujesz cokolwiek zrobić. Więc użytkownik root ma hir ~ gdzie indziej.

Jennifer
źródło
3
Wypróbuj, a w zależności od ustawień dystrybucji i zabezpieczeń jako zwykły użytkownik nie zalogujesz się lub skończysz z / as cwd i $ HOME po prostu niedostępnymi. Chodzi o to, że root najprawdopodobniej będzie chciał mieć dostęp do swojego katalogu domowego, gdy inni tego nie robią, np. Z powodu plików specjalnych potrzeb. Podobnie na większości fss masz zarezerwowane miejsce dla roota, a konta systemowe mają katalog domowy poza / home
PlasmaHH
2
Odpowiedzi zamieszczone później przez alexf i arp mówią w zasadzie to samo. Czy nikt nie czyta istniejących postów przed dodaniem własnej odpowiedzi?
Jennifer
@ Dan - wycofałem twoje zmiany. To znaczy:
Jennifer
(1) Przypuszczam, że poprawa polega na umieszczaniu / home i ~ w polach wyboru, ale nie jest to aż tak ważne, ponieważ wszyscy wiedzą, co mam na myśli. Wiedziałeś o co mi chodzi. (2) „rozbiłbyś się, gdy tylko spróbujesz” jest niespójny w czasie. „chcesz” to „chciałbyś”, a „chciałbyś” jest czasem przeszłym, więc musi iść w parze z „wypróbowanym”, który jest czasem przeszłym, a nie „wypróbować”, który jest obecny. (3) „hir” to nowy zaimek wymyślony przez Kate Bornstein; obejmuje on „go” i „ją” i jest przydatny, gdy nie znasz płci. („Ze” obejmuje „on” i „ona”.)
Jennifer
@Jennifer Bez obaw. Każdego dnia uczysz się czegoś nowego. Myślałem, że hirto literówka. Dzięki za wszystkie informacje! Zalecam, aby formatowanie kodu było trudne, ale to zależy od ciebie.
Dan
8

Mówisz, że nie jesteś zaawansowanym użytkownikiem, więc postaram się napisać odpowiedź krok po kroku.

Kiedy używasz Linuksa, musisz pamiętać o kilku ważnych rzeczach:

  • Linux to system dla wielu użytkowników. Zostało tak pomyślane od samego początku, zgodnie z filozofią uniksową (zwróć uwagę na inne podejście systemu Windows, który został pomyślany jako system dla jednego użytkownika)

  • Jako system wielu użytkowników, Linux ma możliwość oddzielania plików należących do każdego użytkownika w systemie. Linux to osiąga, przypisując każdemu użytkownikowi podfolder w /home/katalogu. Każdy plik użytkownika jest jego własnością i tylko on może go otworzyć, zmodyfikować lub zezwolić innym użytkownikom na korzystanie z nich. I odwrotnie, każdy plik w systemie plików należy do użytkownika i ten użytkownik ma kontrolę nad tym, kto może zobaczyć ten plik lub z niego korzystać. Jak wspomniano w innej odpowiedzi, pierwotnie użytkownicy mogli umieszczać swoje pliki w dowolnym miejscu w systemie, ale w pewnym momencie stało się jasne, że rzeczy powinny być lepiej zorganizowane, a /home/(„slash-home”) stało się miejscem, w którym powinny znajdować się pliki użytkownika.

  • Są jednak pliki, których potrzebuje sam system i / lub każdy użytkownik w systemie: pliki binarne, pliki urządzeń, pliki systemowe itp. (Pamiętaj: w Linuksie i każdym innym systemie uniksowym wszystko jest plikiem) . Wymagało globalnie pliki są przechowywane w różnych miejscach wzdłuż plików, organizowanych w różnych folderach w katalogu głównym systemu plików : /. Te globalnie potrzebne pliki nie należą do konkretnego użytkownika systemu, ale do samego systemu ... ale to może być mylące: kto jest właścicielem plików binarnych? Kto daje uprawnienia na te globalnie potrzebne pliki?

  • Ponieważ każdy plik w systemie „potrzebuje właściciela”, musi istnieć „specjalny użytkownik”, który może administrować plikami potrzebnymi na całym świecie. Co więcej, ten „użytkownik specjalny” może robić rzeczy, których nie może zrobić żaden inny użytkownik w systemie: może tworzyć innych użytkowników dla systemu. Ten użytkownik nazywa się „superużytkownikiem” (dla nas śmiertelników) lub „rootem” (dla systemu).

  • Teraz ten superużytkownik jest innym użytkownikiem systemu, ale ma uprawnienia (i obowiązki) znacznie przewyższające uprawnienia innych użytkowników: na przykład konserwację. Naturalne jest więc myślenie, że „root” potrzebuje miejsca do umieszczenia swoich rzeczy, ale nie należy tego mylić z rzeczami należącymi do innych użytkowników. Zatem zamiast podfolderu poniżej /home/„root” ma swoje własne zarezerwowane miejsce w systemie plików: /root/(zwane „slash-root”). Pamiętaj: „root” jest bardzo wyjątkowym użytkownikiem, więc potrzebuje specjalnego, uprzywilejowanego miejsca do umieszczenia swoich rzeczy.

  • Teraz Ubuntu nie ma domyślnie włączonego konta root, więc „normalny” użytkownik musi mieć uprawnienia do systemu jako całości. W tym momencie sudouruchamia się polecenie („zmień użytkownika i zrób”): pozwala zwykłemu użytkownikowi (wcześniej znajdującemu się na liście „sudoers”) wykonywać polecenia tak, jakby był innym użytkownikiem, na przykład „root”.

  • Wreszcie, -iopcje te oznaczają „symuluj początkowe logowanie”. Oznacza to, że sudoodczyta dane „profilu użytkownika docelowego” przed wykonaniem danego polecenia. Jeśli nie podasz polecenia, sudouruchomi się instancja powłoki z profilem docelowego użytkownika (root) ... i zaczyna się od przejścia do folderu „home” „docelowego użytkownika”. Tak sudo -iprzeniesie Cię do zrobienia katalogu domowego roota ( /root/).

Mam nadzieję, że to pomoże ci zrozumieć, co się dzieje sudo -i.


EDYTOWAĆ

Myślę, że zostawiłem coś nieokreślonego, więc dodam je tutaj:

  • Powiedziałem powyżej: „w Linuksie wszystko jest plikiem”. I mam na myśli to dosłownie! Twoje dokumenty i obrazy to pliki, ale także terminale (te, do których możesz uzyskać dostęp naciskając [CTRL] + [ALT] + [Fn]), a także dyski fizyczne i klawiatura. System uniksowy działa poprzez odczytywanie lub zapisywanie danych z / do plików oraz kierowanie przepływu danych do / z odpowiednich plików w systemie, które reprezentują plik, z którym pracujesz, oraz wprowadzanie wpisywanych klawiszy, i wyjście, które widzisz na ekranie. Niektóre z tych plików mogą być używane bezpośrednio przez użytkowników, ale inne nie; na przykład nie możesz odczytywać ani zapisywać bezpośrednio na dysku twardym, ale musisz pozwolić Linuxowi połączyć normalny, możliwy do przeglądania folder z plikiem urządzenia (poniżej /dev/) reprezentującym twój dysk twardy.

  • System plików Linux może obejmować wiele dysków fizycznych . Prostym przykładem jest podłączenie pendriva USB: Linux może zamontować ten dysk (montowanie to proces, w którym system łączy standardowy folder, w którym można zobaczyć pliki w powłoce lub nawigatorze plików, do pliku urządzenia /dev/) i możesz z nim pracować, a kiedy skończysz, poprosisz Linuksa o odinstalowanie napędu, a następnie usunięcie go z portu USB. Ważne jest tutaj to, że ten cykl „podłączania - odmontowywania” wpływa na * ten sam system plików, którego używasz na co dzień: nie tworzysz nowego systemu plików za każdym razem, gdy dodajesz lub usuwasz dysk fizyczny, ale dodajesz ten dysk fizyczny do systemu plików ( ponownie porównaj tę filozofię z podejściem Wndowsa).

  • Ponieważ system plików może obejmować wiele dysków fizycznych, staje się oczywiste, że różne pliki systemu można zapisać na różnych dyskach fizycznych. Jeden dysk może przechowywać systemowe pliki binarne ( /bin/), a drugi może przechowywać pliki użytkownika ( /home/i jego potomków). W konfiguracji z wieloma dyskami często /home/zapisuje się na innym dysku fizycznym niż /root/, więc jeśli system się zepsuje, a użytkownicy nie będą mogli się zalogować, ponieważ dysk, na którym /home/przestaje działać, root może. (Jest to uproszczone ... wiele rzeczy musi zostać skopiowanych na każdy dysk fizyczny, aby umożliwić rootowi zalogowanie się, jeśli żaden inny użytkownik nie może, ale może to dać ogólny pomysł).

  • I ten ~znak tyldy ( ) ... oznacza katalog domowy bieżącego użytkownika. Jeśli jesteś zalogowany jako „bob”, cd ~zabierze Cię do /home/bob/, ale jeśli jesteś zalogowany jako „root”, cd ~zabierze Cię do/root/

tl; dr Więc teraz myślę, że wszystko zostało powiedziane:

  • „root” to specjalny użytkownik, którego uprawnienia i obowiązki znacznie przewyższają innych użytkowników

  • „/ root /” to miejsce, w którym „root” może przechowywać swoje rzeczy, nie ryzykując, że zostaną pomylone z innymi rzeczami należącymi do zwykłych użytkowników. Ten folder można zapisać na innym dysku fizycznym niż /home/.

  • sudo -iuruchamia powłokę symulującą logowanie roota, co oznacza przejście do katalogu głównego roota. Podobnie jak w przypadku każdego innego użytkownika, cd ~zabierze Cię do katalogu domowego, ale jeśli jesteś rootem, tak będzie/root/

  • Jeśli system jest zainstalowany na różnych dyskach fizycznych, root może się zalogować i spróbować naprawić problemy, nawet jeśli inny dysk w systemie ulegnie awarii.

Barranka
źródło
1
Idealna odpowiedź!
Arch
7

Główny powód, dla którego katalog domowy root'a jest traktowany inaczej:

Kiedy coś pójdzie nie tak, musisz być w stanie wykonać zadania odzyskiwania systemu, gdy tylko zdołasz zamontować system plików /.

W zależności od konfiguracji katalogi domowe użytkowników mogą znajdować się w innym systemie plików lub nawet mogą być montowane w sieci.

Aby zalogować się jako root (tj. Wpisać nazwę root i hasło root po wyświetleniu monitu logowania) z konsoli, wystarczy zamontowany tylko jeden system plików.

(Z tego też powodu podstawowe narzędzia znajdują się w / bin i / sbin zamiast / usr / bin lub / usr / sbin - wszystko w / usr jest zbywalne).

arp
źródło