Aby uruchomić powłokę główną na komputerach, na których konto root jest wyłączone, możesz uruchomić jedną z następujących opcji:
sudo -i
: uruchom interaktywną powłokę logowania (czyta/root/.bashrc
i/root/.profile
)sudo -s
: uruchom interaktywną powłokę bez logowania (czyta/root/.bashrc
)
W świecie Ubuntu bardzo często widzę sudo su
sugestię jako sposób na uzyskanie powłoki roota. Po co uruchamiać dwa osobne polecenia, gdy jedno z nich zrobi? O ile mogę powiedzieć, sudo -i
jest równoważne sudo su -
i sudo -s
jest takie samo jak sudo su
.
Wydaje się, że jedyne różnice (porównanie sudo -i
po lewej i sudo su -
po prawej):
I porównując sudo -s
(po lewej) i sudo su
(po prawej):
Główne różnice (ignorowanie SUDO_foo
zmiennych i LS_COLORS
) wydają się być XDG_foo
zmiennymi systemowymi w sudo su
wersjach.
Czy są jakieś przypadki, w których ta różnica uzasadnia stosowanie raczej nieeleganckiego sudo su
? Czy mogę bezpiecznie powiedzieć ludziom (jak często to robię), że nigdy nie ma sensu biegać, sudo su
czy coś mi brakuje?
źródło
ubuntu
które uniemożliwiają użytkownikom standardsu -
. Stworzyli problem i teraz trwają niekończące się dyskusje na temat jego rozwiązania.su -
? Czy nie uważasz, że stanowi to lukę w zabezpieczeniach w środowiskach wielu użytkowników, w których więcej niż jedna osoba musi mieć dostęp do konta root?su -
? Tak, trzeba ustawić hasło roota, ale to banalne.Odpowiedzi:
Jak zauważyłeś w swoim pytaniu, główną różnicą jest środowisko.
sudo su -
vs.sudo -i
W przypadku
sudo su -
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 su
vs.sudo -s
sudo su
połączeniasudo
z poleceniemsu
. Bash jest nazywany interaktywną powłoką niezalogowaną. Więcbash
tylko wykonuje.bashrc
. Możesz zobaczyć, że po przejściu na root nadal jesteś w tym samym katalogu:sudo -s
odczytuje$SHELL
zmienną i wykonuje treść. Jeśli$SHELL
zawiera/bin/bash
, wywołujesudo /bin/bash
, co oznacza, że/bin/bash
jest uruchamiany jako powłoka niezalogowana, więc wszystkie pliki kropek nie są wykonywane, alebash
same czyta.bashrc
użytkownika wywołującego. Twoje środowisko pozostaje takie samo. Twój dom nie będzie domem roota. Jesteś więc rootem, ale w środowisku dzwoniącego użytkownika.Wniosek
-i
Flag Dodanosudo
w 2004 roku , aby zapewnić podobną funkcję dosudo su -
, więcsudo su -
było szablonsudo -i
i przeznaczona do pracy podoba. Myślę, że tak naprawdę nie ma znaczenia, którego używasz, chyba że środowisko nie jest ważne.Dodanie
Podstawową kwestią, o której należy tutaj wspomnieć, jest to, że
sudo
zostało zaprojektowane, aby uruchomić tylko jedno polecenie z wyższymi uprawnieniami, a następnie upuścić te uprawnienia do pierwotnych. Nigdy nie miało to na celu zmiany użytkownika i pozostawienia otwartej powłoki roota. Z biegiem czasusudo
został rozszerzony o takie mechanizmy, ponieważ ludzie byli zirytowani tym, dlaczego używaćsudo
przed każdym poleceniem.Więc znaczenie
sudo
nadużyło.sudo
miał zachęcić użytkownika do zminimalizowania korzystania z uprawnień roota.To, co mamy teraz,
sudo
staje się coraz bardziej popularne. Jest zintegrowany z prawie każdą dobrze znaną dystrybucją linuksową. Oryginalne narzędzie do przełączania na inne konto użytkownika tosu
. Dla weterana starej szkoły * nix takie rzeczysudo
mogą wydawać się niepotrzebne. Dodaje złożoności i zachowuje się bardziej prawdopodobne w przypadku mechanizmów znanych z rodziny os Microsofts, a zatem jest sprzeczny z filozofią prostoty systemów * nix.Nie jestem tak naprawdę weteranem, ale także moim zdaniem
sudo
zawsze był po mojej stronie cierniem, od czasu kiedy został wprowadzony i zawsze pracowałem nad użyciemsudo
, jeśli to możliwe. Jestem bardzo niechętny do użyciasudo
. We wszystkich moich systemach konto root jest włączone. Ale rzeczy się zmieniają, może nadejdzie czas, kiedysu
będzie przestarzały i całkowiciesudo
zastąpisu
.Dlatego myślę, że najlepiej będzie użyć
sudo
wewnętrznych mechanizmów (-s
,-i
) zamiast polegać na starym narzędziu, takim jaksu
.źródło
sudo su
? W tym czasie korzystałem z dystrybucji bez sudo i aktywnych kont root, więc nie wiem. To może tłumaczyć rozpowszechnienie sudo su meme w świecie Ubuntu.sudo -i
anisudo -s
wcześniej - od 1991 roku prowadzę różnego rodzaju UNIX-y i dla mniesudo su -
jest to tylko zakorzeniony nawyk.sudo -s
to samo cosudo $SHELL
wtedy?sudo su -
jest 1) to, że działa i wiesz dokładnie, co robi, oraz 2) że nie musisz pamiętać innej opcjisudo
(gdy już wieszsu -
) i 3) nie „ muszę pamiętać, z którą wersjąsudo
aktualnie pracujesz. Po co zapamiętywać jeszcze jedną ciekawostkę, skoro to, co już masz, działa dobrze? Czy jest cośsu -i
lepszego niż unikanie wpisu do dziennika? Nie używamsudo su -
wystarczająco dużo, aby się tym martwić.sudo
i jestem bardzo przyzwyczajonysu
. To połączenie dwóch błędów mnie wkurza.Aby odpowiedzieć bezpośrednio na twoje pytanie: nie, nie ma dobrego powodu, aby to zrobić. Ponadto sudo su tworzy dwa wpisy dziennika, gdy wystarczyłoby jeden.
Widziałem, jak wielu ludzi to robi, a kiedy pytam, dlaczego po prostu nie uciekają
sudo -s
, odpowiedź jest taka, że nie wiedzą o-s
flagi sudo, i generalnie zmieniają się po tym, jak to zaznaczam.Jednak do twojej listy
sudo -s
isudo -i
chciałbym dodać jeszcze jedną opcjęsudo -sE
, która jest swego rodzaju zamiennikiemsu -m
.sudo -sE
chroni środowisko, w tym katalog domowy. Jest to niebezpieczne, jeśli twój katalog domowy jest niepewny (w NFS). Ale w środowisku, w którym wiele osób korzysta z roota, pozwala to uniknąć konieczności uzgadniania zawartości.bashrc
pliku root . Moja.bashrc
zawiera wiele specjalizacji dla roota, więc nie otrzymuję dokładnie tego samego środowiska co root, ale przynajmniej dostaję dokładnie takie środowisko, jakie chcę.źródło
$HOME
oznacza to, że wszystkie nowe pliki utworzone w folderze domowym są własnością użytkownika root, a nie ciebie. Z tego powodu wiele trudnych do zdiagnozowania błędów uprawnień.sudo -sE
a następnieecho $HOME
podaje/root
CentOS 7, bash 4.2.-sE
nie wydaje się, aby zachować katalog główny, jak powiedziałeś.