14 marca 2019 PLEASE NOTE: Ten artykuł wiki jest w znacznym stopniu przeredagowywany, ponieważ zawiera sporo starego, przestarzałego i prawdopodobnie wątpliwego materiału. Stosowanie ostrożności i konsultowanie się z innymi na Ubuntu Forums lub Ask Ubuntu jest wysoce zalecane! |
Uwaga: Aby uzyskać pomoc w konfiguracji uprawnień sudo za pomocą pliku konfiguracyjnego /etc/sudoers, zobacz Sudoers.
Informacje ogólne
W Linuksie (i ogólnie w Uniksie), istnieje SuperUser o nazwie root. Windowsowym odpowiednikiem roota jest grupa Administratorów. SuperUser może robić wszystko i wszystko, a więc wykonywanie codziennej pracy jako SuperUser może być niebezpieczne. Możesz błędnie wpisać polecenie i zniszczyć system. Najlepiej jest pracować jako użytkownik, który ma tylko takie uprawnienia, jakie są potrzebne do wykonania danego zadania. W niektórych przypadkach jest to koniecznie root, ale w większości przypadków jest to zwykły użytkownik.
Domyślnie, hasło do konta root jest zablokowane w Ubuntu. Oznacza to, że nie można zalogować się jako root bezpośrednio lub użyć polecenia su, aby stać się użytkownikiem root. Jednakże, ponieważ konto roota fizycznie istnieje, nadal możliwe jest uruchamianie programów z uprawnieniami roota. W tym miejscu pojawia się sudo – pozwala ono autoryzowanym użytkownikom (zwykle użytkownikom „administracyjnym”; więcej informacji można znaleźć w AddUsersHowto) na uruchamianie niektórych programów jako root bez konieczności znajomości hasła roota.
To oznacza, że w terminalu powinieneś używać sudo dla poleceń, które wymagają uprawnień roota; po prostu dodaj sudo do wszystkich poleceń, które musisz uruchomić jako root. Więcej przykładów użycia znajdziesz poniżej. Podobnie, kiedy uruchamiasz programy GUI, które wymagają uprawnień roota (np. aplet konfiguracji sieci), użyj graficznego sudo, a zostaniesz również poproszony o hasło (więcej poniżej). Pamiętaj, że kiedy sudo prosi o hasło, potrzebuje TWOJEGO hasła użytkownika, a nie hasła konta roota.
Proszę pamiętać, znaczna liczba użytkowników Ubuntu są nowe do Linuksa. Istnieje krzywa uczenia się związana z każdym systemem operacyjnym i wielu nowych użytkowników próbuje pójść na skróty, włączając konto roota, logując się jako root i zmieniając własność plików systemowych.
Przykład: Uszkodzony system przez (nie)użycie roota przez nowego użytkownika
Uwaga: W czasie pisania tego postu, był to pierwszy post użytkownika na forum Ubuntu. Podczas gdy niektórzy mogą nazwać to „doświadczeniem edukacyjnym”, nauka poprzez uszkodzenie systemu jest frustrująca i może spowodować utratę danych.
Podczas udzielania porad na forach Ubuntu i IRC, proszę poświęcić czas na nauczenie „podstaw”, takich jak własność, uprawnienia i jak korzystać z sudo / gksu / kdesudo w taki sposób, że nowi użytkownicy nie łamią systemów.
Wady i zalety
Korzyści z używania sudo
Istnieje wiele korzyści z Ubuntu pozostawiając domyślnie wyłączone logowanie roota, w tym:
- Instalator ma mniej pytań do zadania.
- Użytkownicy nie muszą pamiętać dodatkowego hasła do okazjonalnego użytku (tj. hasła roota). Gdyby to robili, prawdopodobnie zapomnieliby go (lub zapisali w sposób niebezpieczny, umożliwiając każdemu łatwe włamanie się do systemu).
-
Domyślnie unika interaktywnego logowania „Mogę wszystko”. Zostaniesz poproszony o podanie hasła, zanim zajdą poważne zmiany, co powinno skłonić Cię do zastanowienia się nad konsekwencjami tego, co robisz.
-
sudo dodaje wpis do logu o wykonanym poleceniu (w /var/log/auth.log). Jeśli coś zepsujesz, możesz wrócić i zobaczyć, jakie polecenia zostały uruchomione.
-
Na serwerze, każdy cracker próbujący sforsować swoją drogę będzie wiedział, że ma on konto o nazwie root i spróbuje go najpierw. Nie wie natomiast, jak nazywają się inni użytkownicy. Ponieważ hasło do konta root jest zablokowane, atak ten staje się w zasadzie bezsensowny, ponieważ nie ma hasła do złamania lub odgadnięcia w pierwszej kolejności.
- Pozwala na łatwe przenoszenie praw administratora poprzez dodawanie i usuwanie użytkowników z grup. Gdy używasz pojedynczego hasła roota, jedynym sposobem na pozbawienie użytkowników uprawnień jest zmiana hasła roota.
- sudo może być skonfigurowany z dużo bardziej szczegółową polityką bezpieczeństwa.
- Hasło do konta root nie musi być udostępniane każdemu, kto musi wykonywać jakieś zadania administracyjne w systemie (patrz poprzedni punkt).
- Uwierzytelnienie automatycznie wygasa po krótkim czasie (który może być ustawiony na tak mały jak chcesz lub 0); więc jeśli odejdziesz od terminala po uruchomieniu poleceń jako root używając sudo, nie zostawisz terminala roota otwartego w nieskończoność.
Wady używania sudo
Mimo, że dla komputerów stacjonarnych korzyści z używania sudo są wielkie, są możliwe problemy, które muszą być zauważone:
-
Przekierowywanie danych wyjściowych poleceń uruchamianych za pomocą sudo wymaga innego podejścia. Na przykład rozważ sudo ls > /root/somefile nie zadziała, ponieważ to powłoka próbuje zapisać do tego pliku. Możesz użyć ls | sudo tee -a /root/somefile do dołączenia, lub ls | sudo tee /root/somefile do nadpisania zawartości. Można też przekazać całą komendę do procesu powłoki uruchomionego pod sudo, aby plik został zapisany z uprawnieniami roota, np. sudo sh -c „ls > /root/somefile”.
- W wielu środowiskach biurowych JEDYNYM lokalnym użytkownikiem w systemie jest root. Wszyscy inni użytkownicy są importowani przy użyciu technik NSS, takich jak nss-ldap. Aby skonfigurować stację roboczą lub naprawić ją w przypadku awarii sieci, w której nss-ldap jest uszkodzony, wymagany jest root. To zazwyczaj sprawia, że system nie nadaje się do użytku, chyba że zostanie złamany. Potrzebny jest tutaj dodatkowy lokalny użytkownik, lub włączone hasło roota. Lokalne konto użytkownika powinno mieć swój $HOME na lokalnym dysku, _nie_ na NFS (ani na żadnym innym sieciowym systemie plików), oraz .profile/.bashrc, który nie odwołuje się do żadnych plików na montowniach NFS. Tak jest zazwyczaj w przypadku roota, ale jeśli dodasz konto ratunkowe nie będące rootem, będziesz musiał podjąć te środki ostrożności ręcznie. Jednak zaletą używania lokalnego użytkownika z sudo jest to, że polecenia mogą być łatwo śledzone, jak wspomniano w korzyściach powyżej.
Użytkowanie
- Gdy używasz sudo, twoje hasło jest domyślnie przechowywane przez 15 minut. Po tym czasie będziesz musiał ponownie wprowadzić swoje hasło.
-
Twoje hasło nie będzie wyświetlane na ekranie w trakcie wpisywania, nawet w postaci rzędu gwiazdek (******). Jest ono wprowadzane z każdym naciśnięciem klawisza!
sudo
Aby użyć sudo w wierszu poleceń, poprzedzamy polecenie słowem sudo, jak poniżej: Przykład #1
sudo chown bob:bob /home/bob/*
Przykład #2
sudo /etc/init.d/networking restart
Aby powtórzyć ostatnio wpisane polecenie, tyle że z poprzedzonym sudo, należy uruchomić:
sudo !!
Graficzne sudo
Nigdy nie powinieneś używać zwykłego sudo do uruchamiania aplikacji graficznych jako root. Używanie sudo z aplikacjami graficznymi może potencjalnie uszkodzić twoje środowisko, pozwalając rootowi na przejęcie własności i/lub zmianę uprawnień do krytycznych plików, które musisz posiadać. Na forum często pojawiają się spanikowane prośby o pomoc od użytkowników, którzy nie mogą się już zalogować po uruchomieniu aplikacji graficznych pod sudo.
Proszę zauważyć, że wiele stron internetowych i starych wątków radzi używanie gksu. Jednak takie wyniki wyszukiwania są przestarzałe. gksudo nie był aktualizowany od lat i nie jest nawet dostępny w Bionic (18.04) i nowszych. gksu został zastąpiony przez pkexec, ale nawet pkexec jest wycofywany przez deweloperów Ubuntu. Przyjęli oni stanowisko, że manipulacja i edycja plików pod rootem powinna być ograniczona do wiersza poleceń.
Możemy tylko przypuszczać, jakie motywy stały za tą decyzją: być może jest zbyt wielu użytkowników, którzy napotykają problemy z uruchamianiem aplikacji graficznych jako root. W każdym razie, uruchamianie aplikacji graficznych jako root wymaga teraz obejścia i dodatkowych kroków.
Obejścia specyficzne dla danego smaku
Istnieje kilka opcji specyficznych dla danego smaku, które umożliwiają uruchamianie aplikacji graficznych jako root:
-
Możesz użyć pkexec na tych smakach, które wspierają tę opcję. Od wersji 18.04, tylko Xubuntu obsługuje tę opcję domyślnie, jak pokazano na poniższych przykładach:
-
pkexec thunarpkexec mousepad /etc/fstab
-
-
Domyślnie Kubuntu umożliwia łatwy dostęp do menedżera plików root: KDE Launcher → Komputer → Root-Dolphin
-
Stamtąd: (→ edytuj plik) otworzy się główna instancja Kate.
-
-
Mainline Ubuntu i Gnome używają Nautilusa jako menedżera plików. Każdy smak działający z Nautilusem pozwoli ci zainstalować pakiet nautilus-admin, który doda dwa pythonowe rozszerzenia do Nautilusa. Rozszerzenia te dodają opcje, które pozwalają na dostęp roota: Otwórz jako Administrator oraz Edytuj jako Administrator
-
Możliwe jest również zainstalowanie brakujących plików Policykit zarówno dla Nautilusa jak i Gedit. Instrukcje i linki znajdują się na tej stronie. Doświadczony użytkownik może zbudować kolejne pliki Policykit dla innych menedżerów plików i edytorów, używając tych plików jako szablonów. Są to proste pliki XML, które mogą być edytowane za pomocą standardowego edytora tekstu.
-
Ogólne obejścia
Następujące metody będą działać na wszystkich wersjach systemu:
- Użyj wiersza poleceń. Proste edytory tekstu jak nano są całkiem łatwe do nauczenia. Jeśli wolisz quasi-graficzny menedżer plików, zainstaluj Midnight Commander. Obie te aplikacje działają pod sudo bez żadnych problemów. Przykłady:
-
sudo mcsudo nano /etc/fstab
-
-
Niezależnie od wcześniejszego ostrzeżenia, możliwe jest używanie sudo z aplikacjami graficznymi pod warunkiem dodania flagi -H. Flaga ta jest krytyczna: prawidłowo ustawia roota w jego własnym środowisku, zamiast nieprawidłowo dziedziczyć środowisko użytkownika. Użycie flagi -H jest obowiązkowe. Nie użycie tej flagi może spowodować uszkodzenie krytycznych plików systemowych i uniemożliwić zalogowanie się.
-
Z sudo -H prawie każda graficzna aplikacja może być uruchomiona pod rootem w każdym smaku 'buntu'. Obejmuje to domyślny edytor graficzny i menedżer plików każdego smaku.
Niebezpieczeństwo związane z sudo -H polega na tym, że flagę -H można łatwo zapomnieć. A wystarczy jedno przeoczenie, by szkody zostały wyrządzone.
-
Użytkownicy
Pozwalanie innym użytkownikom na uruchamianie sudo
Aby dodać nowego użytkownika do sudo, otwórz okno Ustawienia, a następnie menu Szczegóły → Użytkownicy. Najpierw kliknij przycisk Odblokuj, a następnie wybierz użytkownika i naciśnij przycisk Administrator.
W terminalu (dla Precyzyjnego Pangolina, 12.04) byłoby to:
sudo adduser <username> sudo
gdzie zastępujemy <username> nazwą użytkownika (bez <>).
W poprzedniej wersji Ubuntu
sudo adduser <username> admin
byłoby to właściwe, ale grupa admin została zdeprecjonowana i nie istnieje już w Ubuntu 12.04.
Logowanie się jako inny użytkownik
Nie używaj tego, aby stać się rootem, zobacz w dalszej części strony, aby uzyskać więcej informacji na ten temat.
sudo -i -u <username>
Na przykład, aby stać się użytkownikiem amanda do celów zarządzania taśmami.
sudo -i -u amanda
Pytanie o hasło jest twoje, nie amandy.
konto root
Uaktywnienie konta root
Uaktywnienie konta root rzadko jest konieczne. Prawie wszystko, co trzeba zrobić jako administrator systemu Ubuntu można zrobić za pomocą sudo lub gksudo. Jeśli naprawdę potrzebujesz trwałego logowania roota, najlepszą alternatywą jest symulowanie powłoki logowania roota za pomocą następującego polecenia… |
sudo -i
Aby włączyć konto root (tj. ustawić hasło) należy użyć:
sudo passwd root
Używaj na własne ryzyko!
Logowanie się do X-ów jako root może spowodować bardzo poważne kłopoty. Jeśli uważasz, że potrzebujesz konta roota do wykonania pewnej czynności, skonsultuj się najpierw z oficjalnymi kanałami pomocy technicznej, aby upewnić się, że nie ma lepszej alternatywy. |
Re-…wyłączenie konta root
Jeśli z jakiegoś powodu włączyłeś konto root i chcesz je ponownie wyłączyć, użyj następującego polecenia w terminalu… |
sudo passwd -dl root
Inne informacje
Nieporozumienia
-
Czy sudo nie jest mniej bezpieczne niż su?
-
Podstawowy model bezpieczeństwa jest taki sam, a zatem te dwa systemy mają wspólne podstawowe słabości. Każdy użytkownik, który używa su lub sudo musi być uważany za użytkownika uprzywilejowanego. Jeśli konto tego użytkownika zostanie naruszone przez napastnika, może on również uzyskać uprawnienia roota następnym razem, gdy użytkownik to zrobi. Konto użytkownika jest słabym ogniwem w tym łańcuchu, a więc musi być chronione z taką samą troską jak root.
Na bardziej ezoterycznym poziomie, sudo zapewnia pewne cechy, które zachęcają do innych nawyków pracy, co może pozytywnie wpłynąć na bezpieczeństwo systemu. sudo jest powszechnie używane do wykonywania tylko jednego polecenia, podczas gdy su jest zwykle używane do otwierania powłoki i wykonywania wielu poleceń. Podejście sudo zmniejsza prawdopodobieństwo pozostawienia otwartej powłoki roota na czas nieokreślony i zachęca użytkownika do zminimalizowania korzystania z uprawnień roota.
-
-
Nie będę mógł wejść w tryb pojedynczego użytkownika!
- Program sulogin w Ubuntu został poprawiony tak, aby obsługiwał domyślny przypadek zablokowanego hasła roota.
-
Mogę uzyskać powłokę roota z konsoli bez wpisywania hasła!
- Musisz podać swoje hasło.
Użytkownicy konsoli mają dostęp do programu ładującego i mogą uzyskać uprawnienia administracyjne na różne sposoby podczas procesu uruchamiania systemu. Na przykład, poprzez podanie alternatywnego programu init(8). Systemy linuksowe nie są zazwyczaj skonfigurowane tak, aby były bezpieczne na konsoli, a dodatkowe kroki (na przykład ustawienie hasła roota, hasła do programu ładującego i hasła do BIOS-u) są konieczne, aby tak było. Należy pamiętać, że użytkownicy konsoli zazwyczaj mają fizyczny dostęp do maszyny, więc mogą manipulować nią także w inny sposób.
- Musisz podać swoje hasło.
Specjalne uwagi na temat sudo i powłoki
Żadna z poniższych metod nie jest sugerowana lub wspierana przez projektantów Ubuntu.
Proszę nie sugerować tego innym, chyba że osobiście jesteś dostępny 24/7, aby wspierać użytkownika, jeśli mają problemy w wyniku uruchomienia powłoki jako root.
Aby uruchomić powłokę roota (tj. okno poleceń, w którym można uruchamiać polecenia roota), uruchamiając środowisko roota i skrypty logowania, użyj:
sudo -i (similar to sudo su - , gives you roots environment configuration)
Aby uruchomić powłokę roota, ale zachować środowisko bieżącej powłoki, użyj:
sudo -s (similar to sudo su)
W celu uzyskania krótkiego przeglądu niektórych różnic między su, su -, i sudo -{i,s} zobacz : Ubuntu Forums Post z ładną tabelą .
Podsumowanie znalezionych różnic –
corrupted by user's HOME=/root uses root's PATH env varssudo -i Y Y Nsudo -s N Y Ysudo bash N Y Ysudo su Y N Y PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games probably set by /etc/environment PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
Dla szczegółowego opisu różnic zobacz man su i man sudo .
Remove Password Prompt For sudo
Jeśli wyłączysz hasło sudo dla swojego konta, poważnie naruszysz bezpieczeństwo swojego komputera. Każdy, kto siedzi przy Twoim nienadzorowanym, zalogowanym koncie, będzie miał pełny dostęp do roota, a zdalne exploity staną się dużo łatwiejsze dla złośliwych crackerów. |
-
Ta metoda NIE jest sugerowana ani wspierana przez projektantów Ubuntu.
- Proszę nie sugerować tego innym, chyba że osobiście jesteś dostępny 24/7, aby wspierać użytkownika, jeśli mają problemy w wyniku uruchomienia powłoki jako root.
Te instrukcje mają na celu usunięcie monitu o podanie hasła podczas używania polecenia sudo. Polecenie sudo nadal będzie musiało być używane dla dostępu roota.
Edytuj plik sudoers
Otwórz okno Terminala. Wpisz sudo visudo. Dodaj następującą linię na KONIEC pliku (jeśli nie jest na końcu, może zostać zniweczona przez późniejsze wpisy):
<username> ALL=NOPASSWD: ALL
Zastąp <username> swoją nazwą użytkownika (bez <>). To jest przy założeniu, że Ubuntu utworzył grupę o tej samej nazwie co nazwa użytkownika, co jest typowe. Możesz alternatywnie użyć użytkowników grupy lub innej takiej grupy, w której jesteś. Po prostu upewnij się, że jesteś w tej grupie. Można to sprawdzić, przechodząc do System->Administracja->Users and Groups
Przykład:
michael ALL=NOPASSWD: ALL
Wpisać ^x, aby wyjść. Powinna pojawić się opcja zapisania pliku, wpisz Y, aby zapisać.
Wyloguj się, a następnie zaloguj się ponownie. To powinno teraz pozwolić ci na uruchomienie polecenia sudo bez pytania o hasło.
Or to do this for the system wide group sudo
root$ echo "%sudo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
Log out, and then back in.
Reset sudo timeout
Możesz upewnić się, że sudo poprosi o hasło następnym razem, uruchamiając:
sudo -k
Domyślną długość sudo timeout można zmienić, postępując zgodnie z tym artykułem: RootSudoTimeout.