Pracuję z członkiem wsparcia dla produktu, a on nalega, że muszę być rootem, aby zainstalować serię poprawek, a sudo nie będzie działać; nie podaje powodu, ale wydaje się bardzo mocny w swoich przekonaniach. Przeglądanie superużytkownika Nie mogę ustalić żadnego możliwego powodu, dla którego tak się dzieje, i po potwierdzeniu, gdy uruchamiam:
sudo -l
Dostaję:
...
User [MY USERNAME] may run the following commands on this host:
(ALL) ALL
Jak rozumiem, uzyskanie dostępu od zespołu Linux / serwera do bycia rootem nie jest natychmiastowym procesem, więc wolałbym je zainstalować sam.
Czy istnieje jakiś praktyczny powód, dla którego sudo zachowuje się inaczej niż root podczas instalowania oprogramowania na serwerze?
sudo
i skryptów, ponieważ skrypty są obecnie napisane. Jeśli o to chodzi, to odpowiedź SDS' może być bardzo pomocne dla Ciebie:sudo su -
.Odpowiedzi:
Zależy to w dużej mierze od sposobu wywołania programu za pomocą
sudo
lubsu
.Np. W systemie, w którym aktualnie jestem:
Gdzie [1] = / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin
Env = Zmienne środowiskowe są resetowane dla 1 i 5, wzięte z $ USER w 2,3,4.
Więc skrypt lub program, który zostanie uruchomiony z innej opcji można zobaczyć różne
$PATH
,$HOME
jego powłoka może odczytać inny.bashrc
,.profile
i zmiennych środowiskowych. Czyta plik związany z$HOME
. Każdy użytkownik może modyfikować swoje środowisko w inny sposób (zmienne$PATH
, .bashrc, .profile, .bash_profile, alias ...). W szczególności użytkownik może mieć w swojej książce inną kolejność katalogów$PATH
, w wyniku czego skrypt może wykonać polecenie, np./home/$USER/bin
Zamiast w ścieżce oczekiwanej od roota.Możesz uruchomić program pod,
sudo -i
gdy jesteś zalogowany jako rootsu -
, ale możesz mieć inne zachowanie, jeśli uruchomisz go zsudo MyCommand
lub zsu -c MyCommand
.Od
man su
:Od człowieka
sudo
źródło
sudo
może być ograniczone przez uprawnienia w pliku sudoers w porównaniu do robienia rzeczy, ponieważ root nie ma tych ograniczeń? Ostatni cytat blokowy może to sugerować, ale jeśli dobrze rozumiem, wydaje się to inną istotną różnicą poza samym środowiskiem (a może ze względu na środowisko?).Jeśli masz pełny
sudo
dostęp, możesz zacząćroot
korzystaćsudo su -
, więc punkt bezpieczeństwa jest dyskusyjny.Rzeczywiście istnieje sposób na rozpoznanie różnicy między programem uruchomionym jako
root
a programem uruchomionym podsudo
- używającgetuid
vsgeteuid
- ale jest to wymyślona sztuczka. Dlaczego system łatek miałby to robić?źródło
su -
, może chcieć korzystać z niegosudo -i
, aby miał takie samo środowisko, jak podczas bezpośredniego logowania.sudo myscript
, Zachowasz $ PATH i zmienne środowiskowe z powłoki, w której się znajdujesz. Jeśli biegniesz z nimsudo -i myscript
, biegnij tak, jakbyś logował się jako root. Zobacz odpowiedź z naszym _zoo połączeń :-) _sudo
jak przy logowaniu jako rootgeteuid()
igetuid()
różnią się od siebie, jest mitem. su i sudo zmieniają zarówno rzeczywisty, jak i efektywny identyfikator użytkownika na identyfikator użytkownika docelowego przed uruchomieniem określonej komendy lub powłoki, z wyjątkiem bardzo nietypowej sytuacji, w której jawnie skonfigurowałeś je tak, aby zachowywały się inaczej. Możesz to zweryfikować (dla sudo), uruchamiającsudo id -u
isudo id -ru
(oba pokazują 0), czytając sudo (8) (w obszarze WYKONYWANIE POLECEŃ ) lub pisząc program testowy .Istnieje kilka różnic, jeśli otrzymujesz powłokę root, jak wskazał @Hastur.
Jeśli nie otrzymujesz powłoki roota, istnieje więcej różnic. Element nośny może mieć doświadczenie staramy się robić takie rzeczy jak
sudo patch -p0 < /root/patch.file
gdziepatch
jest uruchamiany jako root, ale<
(rurociągów z pliku) nie jest.źródło
sudo /bin/bash -c "./patch -p0 < /root/patch"
. Jeszcze bardziej delikatny jest przypadek, w którym przekierowanie służy do utworzenia pliku>
. W pierwszej kolejności utworzysz plik, który należy do użytkownika tylko wtedy, gdy masz wystarczające prawo do zapisu w końcowym katalogu. W ten drugi sposób utworzysz plik należący do roota ... ciemna strona Uniksa ;-)Wierzę, że podczas korzystania z dostępu sudo tworzony jest plik dziennika, jednak przy bezpośrednim dostępie przez root nie ma.
źródło
To zależy od tego, jak drobnoziarnisty ma być dostęp do katalogu głównego. Jeśli masz kilku użytkowników wykonujących różne zadania w systemie, sudo byłoby bardziej idealne. Jednym z przykładów, z których często korzystam, jest konieczność ponownego uruchomienia aplikacji lub bazy danych. Bezpieczeństwo zawsze najlepiej jest robić najmniej uprzywilejowane. Używam grup i zezwalam tym grupom na wykonywanie wyraźnych działań. Dobra książka opisująca ten proces to „Sudo Mastery: Kontrola dostępu użytkownika dla prawdziwych ludzi”. Właściwie jest to dobra książka o sudo w ogóle ...
źródło