Dlaczego nie mam hasła do „su”? Problemy z „sudo”

34

Zainstalowałem Ubuntu za pomocą GUI, podając sobie hasło i wszystko. Nie pamiętam dokładnie tego procesu. Martwi mnie jednak to, że nie znam następującego hasła:

$ su
Password: <the only password I've ever created on this machine>
su: Authentication failure

Po prostu nie wiem co robić. Nie mam kłopotów, ale chcę tylko wiedzieć, co się tutaj dzieje. Mogę również zablokować dostęp do katalogów:

starkers@ubuntu:~/Desktop$ mkdir foobs
starkers@ubuntu:~/Desktop$ sudo chmod 777 -R foobs
sudo: /var/lib/sudo writable by non-owner (040777), should be mode 0700
[sudo] password for starkers: <the only password I've ever created on this machine> 
starkers@ubuntu:~/Desktop$ cd foobs
bash: cd: foobs: Permission denied

Jestem trochę zmieszany. Jak mogę się tak zablokować? Myślę, że sudojest to kluczowe polecenie tutaj. Ale sprawiam, że foobsplik jest tak otwarty, jak to możliwe, przez chmod, więc dlaczego mnie to blokuje?

Starkers
źródło
6
Prawie nigdy nie powinieneś tego robić chmod -R 777 whatever, chyba że chcesz spowodować ogromne zagrożenie bezpieczeństwa.
1
@BroSlow Dzięki za górę. Poza tym pytaniem, ale jak można bezpiecznie ustawić uprawnienia do odczytu zapisu w katalogu? 666?
Starkers,
1
Zdecydowanie lepiej, ale zależy od tego, co próbujesz zrobić. np. czy naprawdę potrzebujesz, aby wszyscy użytkownicy mieli dostęp r / w do wszystkiego. Jeśli nie, możesz zrobić coś w rodzaju 644 (tylko do odczytu dla wszystkich oprócz ciebie). Ogólnie rzecz biorąc, byłbym bardzo ostrożny podczas robienia rekurencji chmod, że zmienia ona tylko pliki, które zamierzałeś.
1
@broslow Czy jesteś na haju? 666 to 1) wciąż zapisywalny na całym świecie, a zatem taki sam poziom ryzyka bezpieczeństwa, i 2) usuwa bit wykonywalny, co oznacza, że ​​nie byłby już w stanie wejść do tego katalogu.
Shadur
@Starkers Prawdziwy problem bezpieczeństwa, jaki tu widzę, polega na tym, że z jakiegoś szalonego powodu /var/lib/sudojest ustawiony do zapisu na całym świecie. To nie powinno się dziać i powinieneś spróbować dowiedzieć się, dlaczego tak się stało.
Shadur

Odpowiedzi:

49

Domyślnie rootkonto superuser ( ) jest wyłączone i nie ma hasła. Możesz go utworzyć, uruchamiając:

$ sudo passwd root

Będziesz wtedy mógł zalogować się jako root, suużywając tego hasła.

Jeśli chodzi o chmod, prawidłowe polecenie to:

$ chmod 777 -R foobs

Możesz także użyć:

$ sudo -i

aby zalogować się jako root przy użyciu hasła (bez tworzenia hasła roota, jak opisano powyżej).

Oli
źródło
4
@Oli Może możesz edytować swoje pytanie, aby dodać sudo su. Daje to również stałe uprawnienia su w terminalu.
pobudka
13
nie używaj sudo su, ponieważ psuje środowisko i rzeczy się psują. zamiast tego użyj sudo -i.
strugee
20
Nie ustawiaj hasła roota. Czy nie ustawić hasło roota.
wchargin
4
chmod 777 jest prawie zawsze zły (lepki bit jest wyłączony; jak w przypadku / tmp). Ta odpowiedź stanowi zagrożenie bezpieczeństwa. Plus ustawienie hasła roota nie jest tym sposobem, w jaki powinien być używany Ubuntu; ponownie zapraszając na zagrożenie bezpieczeństwa. Postępuj zgodnie z odpowiedzią neon_overload.
Rinzwind,
4
@WChargin dlaczego sugerujesz, że nie masz konta root / hasła? Jestem naprawdę ciekawy jako użytkownik archlinuxa.
Rob
67

1. Dlaczego nie masz hasła roota?

Podczas gdy można utworzyć hasło dla konta superużytkownika pozwalającego zalogować się jako root su, to warto wspomnieć, że nie jest to zwykły sposób robienia rzeczy z Ubuntu (lub coraz częściej, inne dystrybucje również). Ubuntu zdecydowało się nie podawać loginu i hasła roota z jakiegoś powodu. Zamiast tego zostanie użyta domyślna instalacja Ubuntu w sudocelu nadania uprawnień administratora. W domyślnej instalacji Ubuntu osoba, która zainstalowała system operacyjny, domyślnie otrzymuje uprawnienia „sudo”.

Każdy, kto ma pełne uprawnienia „sudo”, może wykonać coś „jako superużytkownik”, oczekując sudona polecenie. Na przykład, aby uruchomić apt-get dist-upgradejako superużytkownik, możesz użyć:

sudo apt-get dist-upgrade

Korzystanie z sudo zobaczysz wszędzie, gdzie przeczytasz tutorial o Ubuntu w Internecie. To alternatywa dla tego.

su
apt-get dist-upgrade
exit

Dzięki sudo z góry wybierasz, którzy użytkownicy mają dostęp do sudo. Nie muszą pamiętać hasła roota, ponieważ używają własnego hasła. Jeśli masz wielu użytkowników, możesz odwołać dostęp do swojego administratora tylko poprzez usunięcie ich uprawnień sudo, bez konieczności zmiany hasła roota i powiadamiania wszystkich o nowym haśle. Możesz nawet wybrać, które polecenia użytkownik może wykonywać za pomocą sudo i które polecenia są dla niego zabronione. I wreszcie, w przypadku naruszenia bezpieczeństwa może w niektórych przypadkach pozostawić lepszą ścieżkę audytu pokazującą, które konto użytkownika zostało naruszone.

Sudo ułatwia wykonywanie pojedynczych poleceń z uprawnieniami administratora. Za pomocą su, na stałe upadasz do powłoki superużytkownika, którą należy zamknąć za pomocą exitlub logout. Może to spowodować, że ludzie pozostaną w powłoce superużytkownika dłużej niż to konieczne tylko dlatego, że jest to wygodniejsze niż wylogowanie i ponowne zalogowanie później.

W sudo nadal możesz otworzyć stałą (interaktywną) powłokę superużytkownika za pomocą polecenia:

sudo su

... i nadal można tego dokonać bez hasła roota, ponieważ sudodaje on superużytkownikowi uprawnienia do supolecenia.

Podobnie, zamiast su -powłoki logowania można użyć sudo su -lub jej skrótu sudo -i.

Jednak robiąc to, musisz mieć świadomość, że działasz jako superużytkownik dla każdego polecenia. Dobrą zasadą bezpieczeństwa jest nie pozostawanie jako superużytkownik dłużej niż jest to konieczne, aby zmniejszyć możliwość przypadkowego spowodowania uszkodzenia systemu (bez niego możesz tylko uszkodzić pliki, które posiadasz).

Właśnie w celu wyjaśnienia, to może , jeśli zdecydujesz, daj użytkownik root hasło pozwalające logowania jako root, jak opisano w odpowiedzi @ Oli, jeśli konkretnie chcesz robić rzeczy w ten sposób zamiast. Chciałem tylko poinformować Cię o konwencji preferowania Ubuntu sudozamiast tego i dać znać, że istnieje alternatywa.


2. Problemy z poleceniem chmod 777 -R

Twoje pytanie ma także drugą część: twoje problemy z poleceniem sudo chmod 777 -R foobs.

Po pierwsze, następujące ostrzeżenie wskazuje na potencjalnie poważny problem bezpieczeństwa na twoim komputerze:

sudo: /var/lib/sudo writable by non-owner (040777), should be mode 0700

Oznacza to, że na pewnym etapie masz /var/lib/sudomożliwość zapisywania na całym świecie. Wyobrażam sobie, że zrobiłeś to na pewnym etapie przy użyciu polecenia podobnego do sudo chmod 777 -R /. Niestety, robiąc to, prawdopodobnie prawie złamałeś wszystkie uprawnienia do plików w całym systemie. Jest mało prawdopodobne, aby był to jedyny ważny plik systemowy, którego uprawnienia zostały zmienione, tak aby można je było zapisać na całym świecie. Zasadniczo masz teraz łatwy do zhakowania system, a jedynym łatwym sposobem na odzyskanie go jest ponowna instalacja.

Po drugie, polecenie, którego użyłeś:

sudo chmod 777 -R foobs

Podczas manipulowania plikami w katalogu domowym, w tym przypadku ~/Desktopnie powinieneś używać sudo. Wszystkie pliki, które utworzysz w katalogu domowym, i tak powinny być przez ciebie modyfikowalne (a jeśli nie, dzieje się coś śmiesznego).

Ponadto musisz być w pełni świadomy konsekwencji masowej zmiany uprawnień do plików, takich jak robienie tego rekurencyjnie lub na ogromną liczbę plików. W takim przypadku zmieniasz starannie skonfigurowane uprawnienia do plików, tak aby można je było zapisywać na całym świecie. Każdy inny użytkownik lub dowolne błędne oprogramowanie serwera na komputerze może mieć łatwy dostęp do zastąpienia wszystkich tych plików i katalogów.

Jest prawie pewne, że chmod 777 -R [dir]to nie odpowiednim rozwiązaniem dla cokolwiek problem, który staraliśmy się rozwiązać (a jak już wspomniano powyżej, istnieją dowody na to, że zrobiłeś go do systemu plików w / var / lib zbyt, i zakładam do wielu innych miejsca).

Kilka podstawowych zasad:

  • Jeśli po prostu bawisz się własnymi plikami w katalogu domowym, na pulpicie itp., Nigdy nie powinieneś używać sudopraw administratora. Jeśli to zrobisz, będzie to znak ostrzegawczy, że robisz coś złego.

  • Nigdy nie należy ręcznie modyfikować plików systemowych należących do pakietów. Wyjątek: chyba że robisz to specjalnie w sposób udokumentowany w tych pakietach, na przykład poprzez modyfikację ich konfiguracji /etc. Dotyczy to również zmiany uprawnień do plików. Jeśli samouczek lub próba rozwiązania problemu wymaga sudouprawnień administratora lub nie jest to po prostu zmiana konfiguracji w / etc /, oznacza to, że robisz coś źle.

thomasrutter
źródło
Niesamowite wyjaśnienie .. Kciuki w górę .. :)
Saurav Kumar
7
Myślę, że „sudo -i” to „oficjalny” sposób na uzyskanie powłoki roota, a nie „sudo su”
Max.
3
Tak, powinieneś użyć sudo -iponad sudo su.
Seth
sudo -i(lub sudo su -) nie są ogólnie lepsze, ale po prostu inne - uruchamiają powłokę logowania, która symuluje środowisko logowania użytkownika root, które wykonuje na przykład .profileplik lub .loginplik użytkownika root. Są one lepsze, jeśli chcesz, aby środowisko w powłoce było bardziej podobne do powłoki logowania roota niż do powłoki interaktywnej, która ma uprawnienia administratora. Prawdopodobnie lepiej jest używać powłok opartych na logowaniu, jeśli używasz powłoki, ale to jest dyskusja: chodzi o to, że Ubuntu jest przeznaczony głównie sudodo uruchamiania poleceń z uprawnieniami administratora.
thomasrutter