Na Ubuntu 12.04, kiedy I sudo -s
zmienna $ HOME nie jest zmieniana, więc jeśli mój zwykły użytkownik jest regularuser
, sytuacja wygląda następująco:
$ cd
$ pwd
/home/regularuser
$ sudo -s
# cd
# pwd
/home/regularuser
Dawno temu zrezygnowałem z Ubuntu, więc nie jestem pewien, ale myślę, że jest to zachowanie domyślne. Tak więc moje pytania to:
Pytanie 1 Jak to się robi? Gdzie jest konfiguracja?
Q2 Jak mogę to wyłączyć?
Edycja: Dzięki za odpowiedzi, które nieco to wyjaśniły, ale chyba muszę dodać kilka pytań, aby uzyskać odpowiedź, której szukam.
Pytanie 3 W Debianie sudo -s
zmienia zmienną $ HOME na /root
. Z tego, co otrzymałem z odpowiedzi i man sudo
powłoki, z którą uciekłem, sudo -s
jest ta podana /etc/passwd
, prawda?
Pytanie 4 Jednak zarówno w Ubuntu, jak i Debianie, powłoką podaną /etc/passwd
dla roota jest /bin/bash
. W żadnym systemie również nie mogę znaleźć, gdzie jest różnica .profile
lub w .bashrc
plikach, jeśli chodzi o $ HOME, więc zachowanie się sudo -s
różni. Jakaś pomoc na ten temat?
sudo
zachowywał się inaczej między Debianem a Ubuntu.sudo
, myślę, że rzeczywiście istnieje różnica domyślnie. Jednak nie stawiam na to, ponieważ jestem na polu, które zostało ustawione przez kogoś innego i działa od dłuższego czasu. W każdym razie dla wszystkich zainteresowanych znalazłem security.stackexchange.com/questions/18369/... i bugs.launchpad.net/ubuntu/+source/sudo/+bug/760140 .Odpowiedzi:
Sudo ma wiele opcji konfiguracji czasu kompilacji. Możesz wymienić ustawienia w swojej wersji za pomocą
sudo -V
. Jedną z różnic między konfiguracją w wheezy Debiana i Ubuntu 12.04 jest to, żeHOME
zmienna środowiskowa jest zachowana w Ubuntu, ale nie w Debianie; obie dystrybucje usuwają wszystkie zmienne środowiskowe z wyjątkiem kilku, które są wyraźnie oznaczone jako bezpieczne do zachowania. W ten sposóbsudo -s
zachowuje sięHOME
na Ubuntu, podczas gdy na DebianieHOME
jest usuwany, asudo
następnie ustawia go w katalogu osobistym użytkownika docelowego.Możesz zastąpić to zachowanie w
sudoers
pliku. Uruchom,visudo
aby edytowaćsudoers
plik. Istnieje kilka odpowiednich opcji:env_keep
określa, które zmienne środowiskowe są zachowywane. SłużyDefaults env_keep += "HOME"
do zachowaniaHOME
zmiennej środowiskowej dzwoniącego lubDefaults env_keep -= "HOME"
do jej skasowania (i zastąp ją katalogiem osobistym użytkownika docelowego).env_reset
określa, czy zmienne środowiskowe są w ogóle resetowane. Resetowanie zmiennych środowiskowych jest często konieczne w przypadku reguł, które pozwalają na uruchomienie określonej komendy, ale nie zapewnia bezpośredniej korzyści bezpieczeństwa dla reguł, które i tak pozwalają na uruchamianie dowolnych komend.always_set_home
, jeśli jest ustawiony, powodujeHOME
zastąpienie, nawet jeśli został zachowany z powoduenv_reset
wyłączenia lubHOME
pozostania naenv_keep
liście. Ta opcja nie działa, jeśli iHOME
tak nie zostanie zachowana.set_home
jest jakalways_set_home
, ale dotyczy tylkosudo -s
, a nie podczas wywoływaniasudo
za pomocą jawnego polecenia.Opcje te można ustawić dla danego użytkownika źródłowego, określonego użytkownika docelowego lub danego polecenia; szczegóły w
sudoers
instrukcji obsługi.Zawsze możesz przesłonić
HOME
dane połączeniesudo
, podając opcję-H
.Powłoka nigdy nie zastąpi wartości
HOME
. (HOME
Ustawiłby się, gdyby był rozbrojony, alesudo
zawsze ustawia wHOME
taki czy inny sposób)Jeśli uruchomisz
sudo -i
,sudo
symuluje początkowe logowanie. Obejmuje to ustawienieHOME
katalogu domowego użytkownika docelowego i wywołanie powłoki logowania .źródło
Użyj
sudo -H -i
zamiast,sudo -s
aby uzyskać interaktywną powłokę główną logowania:Od
man sudo
:źródło
-i
implikuje-H
.Nie ma to wiele wspólnego z zachowaniem
sudo
i ma wiele wspólnego z różnicą między „powłoką logowania” a „powłoką bez logowania”. Szybka poprawka tojak widać z:
Jak zauważono w podręczniku sudo:
źródło
HOME
czy nie, wszystko ma związek z konfiguracją sudo./etc/sudoers
Debianie i Ubuntu nie ma nic innego jak $ HOME.always_set_home
iset_home
wsudoers
.Dość popularnym sposobem uzyskania powłoki roota jest również:
źródło
sudo -i -H
, ale nie udało się zainstalować globalnego pakietu npm z git. Dziękisudo su -
temu działa! Dziękuję Ci.Aby pozbyć się różnych zachowań odpowiednio
sudo -s
Ubuntu i Debiana, możesz użyćsudo
wrappera (odpowiedź na pytanie 4):źródło