Kiedy robię coś, co wymaga wpisania roota dziesiątki razy z rzędu, wolę przełączyć moją sesję na sesję root. W różnych tutoriali i instrukcji Użyłem w Internecie, widzę sudo su
, sudo su -
, sudo -i
i sudo /bin/bash
są wykorzystywane do otwarcia sesji użytkownika root, ale nie jestem jasne na różnicy między nimi a kiedy i czy to się liczy różnicę.
Czy ktoś może mi to wyjaśnić?
command-line
bash
sudo
su
Paweł
źródło
źródło
sudo -s
isudo su
.Odpowiedzi:
Aby to wyjaśnić, musisz wiedzieć, co robią programy:
su
- Komendasu
służy do przełączania do innego użytkownika ( s czarownica u Ser), ale można również przełączyć się na roota poprzez wywołanie polecenia bez parametru.su
prosi o zmianę hasła użytkownika, po wpisaniu hasła, które przełączyłeś do środowiska użytkownika.sudo
-sudo
ma na celu uruchomienie pojedynczej komendy z uprawnieniami roota. Ale w przeciwieństwie dosu
monituje o hasło bieżącego użytkownika. Ten użytkownik musi znajdować się w pliku sudoers (lub grupie, która znajduje się w pliku sudoers). Domyślnie Ubuntu „zapamiętuje” twoje hasło przez 15 minut, dzięki czemu nie musisz wpisywać 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, bez logowania, interaktywnymi i nieinteraktywnymi:Rodzaje muszli:
Tak więc przypadki to:
sudo su
Połączeniasudo
z poleceniemsu
. Bash jest nazywany interaktywną powłoką niezalogowaną. Więc bash tylko się wykonuje.bashrc
. Możesz zobaczyć, że po przejściu na root nadal jesteś w tym samym katalogu:sudo su -
Tym razem jest to powłoka logowania, tak/etc/profile
,.profile
i.bashrc
są realizowane i znajdą się w katalogu domowym roota ze środowiskiem roota.sudo -i
Jest prawie taki sam jaksudo su -
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
,.bashrc
lub.login
zostaną odczytane i wykonane przez powłokę.sudo /bin/bash
Oznacza to, że dzwoniszsudo
za pomocą polecenia/bin/bash
./bin/bash
jest uruchamiany jako powłoka niezalogowana, więc wszystkie pliki kropek nie są wykonywane, ale sam bash czyta.bashrc
wywołującego użytkownika. Twoje środowisko pozostaje takie samo. Twój dom nie będzie domem roota. Jesteś więc rootem, ale w środowisku dzwoniącego użytkownika.sudo -s
odczytuje$SHELL
zmienną i wykonuje treść. Jeśli$SHELL
zawiera/bin/bash
, wywołujesudo /bin/bash
(patrz wyżej).Czek:
Aby sprawdzić, czy jesteś w powłoce logowania, czy nie (działa tylko w bash, ponieważ
shopt
jest to wbudowane polecenie):źródło
sudo
pozwala uprawnionemu użytkownikowi wykonać polecenie jako administrator lub inny użytkownik . W każdym razie +1 za twój wysiłek.root
sesji użytkownika (w porównaniu do używaniasudo
), gdy robię coś, co wymaga dużego użyciaroot
uprawnień, na przykład podczas instalowania czegoś nowego lub przeprowadzania poważnej rekonfiguracji . Używamsudo /bin/bash
, ale najwyraźniej ta metoda ma zły rap z jakiegoś powodu, którego nie rozumiem.sudo -i
jest zalecane. Przeczytaj tutaj: ubuntuforums.org/showthread.php?t=1817402 i tutaj: unix.stackexchange.com/questions/98531/...Aby szukać różnic, możesz podzielić środowisko wynikowe między różne wywołania.
Można znaleźć pewne „małe” różnice w niektórych zmiennych krytycznych:
PATH
,LD_LIBRARY_PATH
,LD_PRELOAD
lub pewna różnica w ~ /. Obsługa plików dotfiles (
~/.config
).Weź również pod uwagę własność plików logów $ HOME (
~/.xsession.errors
itp.) Lub xauth cookies (~/.Xauthority
) generowanych przez polecenia.Wypróbuj następujące polecenia:
źródło