'sudo su -' vs 'sudo -i' vs 'sudo / bin / bash' - kiedy ma znaczenie, które jest używane, czy w ogóle ma to znaczenie?

193

Kiedy robię coś, co wymaga wpisania root'a dziesiątki razy z rzędu, wolę przełączyć sesję na sesję root. W różnych samouczkach i instrukcjach używanych w Internecie widzę sudo su , sudo su - , sudo -i i sudo /bin/bash używanych do otwarcia sesji root, ale nie jestem pewien różnicy między nimi a kiedy lub czy ta różnica ma znaczenie.

Czy ktoś może mi to wyjaśnić?

    
zadawane Paul 13.11.2013, 00:30
źródło

1 odpowiedź

252

Aby to wyjaśnić, musisz wiedzieć, co robią programy:

su - Polecenie su służy do przełączania się na innego użytkownika ( s czarownica u ser), ale możesz także przełączyć się na użytkownika root przez wywołanie polecenia bez parametru. su prosi o hasło użytkownika do zmiany, po wpisaniu hasła, które przełączyłeś na środowisko użytkownika.

sudo - sudo służy do uruchamiania pojedynczego polecenia z uprawnieniami roota. Ale w przeciwieństwie do su wyświetla monit o podanie hasła bieżącego użytkownika. Ten użytkownik musi znajdować się w pliku sudoers (lub grupie, która znajduje się w pliku sudoers). Domyślnie system Ubuntu "zapamiętuje" twoje hasło przez 15 minut, dzięki czemu nie musisz wpisywać swojego hasła za każdym razem.

bash - Interfejs tekstowy do interakcji z komputerem. Ważne jest, aby zrozumieć różnicę między powłokami logowania, logowania, interaktywnymi i nieinteraktywnymi:

  • powłoka logowania: Powłoka logowania loguje cię do systemu jako określony użytkownik, niezbędny do tego jest nazwa użytkownika i hasło. Kiedy klikniesz ctrl + alt + F1 , aby zalogować się do wirtualnego terminala, który otrzymasz po pomyślnym zalogowaniu się do powłoki logowania.
  • powłoka bez logowania: Powłoka, która jest wykonywana bez zalogowania, jest niezbędna do zalogowania się do zalogowanego użytkownika. Po otwarciu terminalu graficznego w gnome jest to powłoka niezalogowana.
  • interaktywna powłoka: Powłoka (login lub bez logowania), w której można interaktywnie wpisywać lub przerywać polecenia. Na przykład terminal gnome.
  • Nieinteraktywna powłoka: Powłoka A (podrzędna) prawdopodobnie uruchamiana z zautomatyzowanego procesu. Nie zobaczysz ani wejścia, ani wyjścia.

sudo su Wywołuje sudo za pomocą polecenia su . Bash jest nazywany interaktywną powłoką niezalogowaną. Zatem bash wykonuje tylko .bashrc . Widać, że po przejściu na root nadal jesteś w tym samym katalogu:

user@host:~$ sudo su
root@host:/home/user#

sudo su - Tym razem jest to powłoka logowania, więc /etc/profile , .profile i .bashrc są wykonywane i znajdziesz się w katalogu domowym root ze środowiskiem root'a.

sudo -i Jest prawie taki sam jak sudo su - Opcja -i (symuluj początkowe logowanie) uruchamia powłokę określoną przez wpis bazy danych hasła użytkownika docelowego jako powłokę logowania. Oznacza to, że pliki zasobów specyficzne dla logowania, takie jak .profile , .bashrc lub .login będą odczytywane i wykonywane przez powłokę.

sudo /bin/bash Oznacza to, że wywołujesz sudo za pomocą polecenia /bin/bash . /bin/bash jest uruchamiany jako powłoka bez logowania, więc wszystkie pliki-kropki nie są wykonywane, ale bash sam odczytuje .bashrc użytkownika wywołującego. Twoje środowisko pozostaje takie samo. Twój dom nie będzie domem root'a. Więc jesteś rootem, ale w środowisku dzwoniącego użytkownika.

sudo -s odczytuje zmienną $SHELL i wykonuje zawartość. Jeśli $SHELL zawiera /bin/bash , wywołuje sudo /bin/bash (patrz wyżej).

Sprawdź: Aby sprawdzić, czy jesteś w powłoce logowania, czy nie (działa tylko w bash, ponieważ shopt jest wbudowanym poleceniem):

shopt -q login_shell && echo 'Login shell' || echo 'No login shell'
    
odpowiedział chaos 13.11.2013, 10:43
źródło

Przeczytaj inne pytania na temat tagów