Jak uniwersalna jest sudo?


26

Pisałem kilka instrukcji, jak coś zainstalować (związane z TeXem - jeśli nie zapytasz, nie zepsuję ci dnia, dostarczając więcej szczegółów) i używane sudodo instalacji w całym systemie. Ktoś skomentował, że nie sądzi, aby sudobył dostępny we wszystkich dystrybucjach Linuxa (lub Uniksa).

Czy istnieją dystrybucje uniksowe, których nie ma sudo, a jeśli tak, to jakie są? Czy istnieje powszechnie uznana komenda „Uzyskaj uprawnienia administratora”, która jest dostępna we wszystkich systemach?

Odpowiedzi:


34

sudo nie można uznać za uniwersalny:

  • Red Hat Enterprise Linux : sudojest domyślnie instalowany w systemie Red Hat Enterprise Linux i jego pochodnych 1, ale instaluje się tylko w wersji gotowej do użycia w wersji RHEL 7 i nowszych.

    Red Hat Enterprise Linux 7 dodał nową opcję do ekranu instalacji, na której tworzysz pierwszego użytkownika innego niż root , pole wyboru oznaczone „Ustaw tego użytkownika jako administratora”. Jego cel nie jest udokumentowany na tej stronie przewodnika instalacji, ale jednym z jego efektów jest umożliwienie temu użytkownikowi uruchomienia dowolnej komendy sudo. Robi to, dodając tego użytkownika do wheelgrupy, która może uruchomić dowolne polecenie w sudokonfiguracji pakietu podstawowego.

    Red Hat Enterprise Linux od 3 do 6 również sudojest domyślnie instalowany , 2, ale do wersji RHEL 7 był skonfigurowany tak, aby rootmógł uruchamiać tylko polecenia. Najłatwiej to naprawić, dodając jednego lub więcej użytkowników do wheelgrupy, a następnie uruchom visudojako root i odkomentuj %wheel ALL=(ALL)...linię.

  • Debian : Począwszy od Debian 9, minimalna instalacja obejmuje sudo.

    W Debianie 7 i 8 trzeba było wybrać pakiet „ Standardowe narzędzia systemowe ” podczas instalacji sudo. Jeśli zainstalujesz w sudoten sposób, instalator systemu operacyjnego automatycznie doda do grupy użytkownika nieadministracyjnego utworzonego wcześniej w procesie instalacji sudo, który ma uprawnienia do uruchamiania wszystkich poleceń.

    W Debianie 6 i wcześniej, trzeba było zainstalować sudopoprzez apt-getpo instalacji i skonfigurować go ręcznie, aby udzielić użytkownikom innym niż root zdolność do korzystania z niego.

  • FreeBSD : sudonie jest domyślnie instalowany we FreeBSD. Musisz zbudować go z portów.

  • NetBSD : Taki sam jak FreeBSD.

  • OpenBSD : sudokiedyś instalowany domyślnie w OpenBSD, ale już włączony do doasjak od 5.8, wydany w październiku 2015 roku . doasstatki są domyślnie wyłączone.

    Aby uzyskać sudoaktualne wersje, musisz zainstalować go z repozytorium pakietów. sudoPakiet OpenBSD jest skonfigurowany podobnie jak w RHEL od 3 do 6, dzięki czemu rootmożna przez niego uruchamiać tylko polecenia, co raczej nie spełnia celu sudo. Jeśli dodałeś rootużytkownika niebędącego użytkownikiem podczas instalacji, został on dodany do wheelgrupy, więc najprostszym sposobem uczynienia sudoużytecznym w systemie OpenBSD jest usunięcie polecenia z %wheel ALL=(ALL)...linii visudo.

  • Solaris : sudojest instalowany domyślnie w Solaris 11, ale Solaris 10 i starsze korzystają z podobnego, ale niezupełnie tego samego pfexec.

    Możesz dostać sudodla starszych systemów, ale domyślne mają znaczenie. Solaris 10 i starszy będzie z nami przez lata, więc jeśli masz Solaris w swoim środowisku i nie masz osobistej kontroli nad tymi systemami, a więc możesz upewnić sudosię, że tam jest, nie możesz na niego liczyć.

Im starszy system, tym większa szansa, że ​​go nie ma sudo. Chociaż sudojest bardzo stary , zaczął zyskiwać popularność dopiero w połowie 2000 roku. Jest mało prawdopodobne, aby systemy starsze były starsze sudo. Pudełka unixowe mają tendencję do długiego życia, więc nie jest wykluczone, że nadal można by spotkać się z takim systemem.

Liczę tylko sudona systemy, którymi osobiście zarządzam, lub takie jak Ubuntu, macOS lub openSuSE , w których domyślnie jest to jedyny sposób na uzyskanie uprawnień roota.

sujest bliżej uniwersalnej komendy „Uzyskaj mi superużytkownika” niż sudo, ale wtedy masz systemy takie jak Ubuntu i macOS, w których konto root jest domyślnie zablokowane, aby zmusić cię do użycia sudozamiast su. Nie można też nazwać suuniwersalnym.


Przypisy :

  1. CentOS, Oracle Linux, Scientific Linux ...

  2. Tak, nawet przy minimalnych instalacjach.


9

sudoto narzędzie dostępne na prawie wszystkich systemach Linux.
Jednak nie jest on dołączany domyślnie we wszystkich dystrybucjach. Jednak wszystkie główne dystrybucje mają go domyślnie dołączone.

Dystrybucje Linuksa, takie jak Arch Linux, Gentoo, LFS itp., Które pozwalają użytkownikowi na pełną personalizację, domyślnie nie mają sudo.

W Arch Linux podstawowy system nie jest sudozainstalowany. Użytkownik musi ręcznie pobrać sudoi edytować plik sudoers.
To samo dotyczy Gentoo i LFS. Nie znam żadnej innej ważnej dystrybucji bez sudo.

I nie, nie sądzę, aby istniało coś bardziej uniwersalnego niż sudoprzyznawanie uprawnień superużytkownikowi. Oznacza to, że oprócz faktycznego logowania jako root.


1
sudomoże być dołączony do większości dystrybucji, ale nie wszystkie z nich konfigurują każdego użytkownika jako zdolnego do jego uruchomienia.
jsbillings

Kolejna dobra uwaga. Zależy od tego, co mówi plik sudoers.
darnir

7

Najczęściej używana dystrybucja, Ubuntu, wykorzystuje sudojako zalecaną metodę rootowania (podczas korzystania z wiersza poleceń - użytkownicy, którzy trzymają się GUI, otrzymają monit o hasło bez zrozumienia lub dbania o to, co dzieje się pod maską). Inne dystrybucje mogą, ale nie muszą, zachęcać do skonfigurowania sudo i mogą go nawet nie wysyłać. Z drugiej strony sujest dostępny wszędzie i można go stosować w większości systemów, z wyjątkiem tych, w których sudojest dostępny tylko, ponieważ użytkownik nie będzie miał hasła roota.

Pomiędzy sui sudoobejmiesz prawie wszystkich swoich użytkowników. Egzotyczne nielicznych, którzy potrzebują califelub opczy pfexecwiem co już robić. Nawet jeśli nie, system, który nie używa ani sunie sudobędzie prawdopodobnie miał plików w nieznanych miejscach i wystarczająco dużo rzeczy, o których nie pomyślałeś, że instrukcje prawdopodobnie i tak nie będą działać.


6

Aby odpowiedzieć na twoje pytanie, najdokładniej, nie sudojest uważane za uniwersalne. Prawdę mówiąc, cała koncepcja „uniwersalności” jest często czerwonym śledziem. Jest to szczególnie prawdziwe w odniesieniu do kompatybilności między dystrybutorami. Po wprowadzeniu wielu różnych wersji oprogramowania uniwersalność staje się na wpół nierealna. Pisanie skryptów z natury jest pragmatyczne, gdyby było pedantyczne, pisanie przenośnych skryptów byłoby praktycznie niemożliwe.

Normalnie oceniam moje zamierzone środowisko wykonawcze. Pół-nowoczesna dystrybucja Linuksa, oczekuję powłoki POSIX ze wspólnymi GNU Utils. W przypadku skryptów, które mogłyby działać poza Linuksem, oczekuję tylko pełnego standardu POSIX. Oczywiście wiele skryptów jest specyficznych dla Linuksa lub dla dystrybucji, więc często zawęża to zakres przenośności.

Aby rozwiązać konkretny przypadek skryptu,

#!/bin/sh


## Exit Point
die() {
    [ -n "$2" ] && echo "$2"
    exit $1
}


## Require SuperUser Execution, Otherwise Re-Execute
[ `id -u` -ne 0 ] && {

    command -v lsb_release > /dev/null && {
        DISTRO="`lsb_release -is`"
        [ "$DISTRO" = "Ubuntu" ] && SUPERUSER='sudo'
    }
    SUPERUSER="${SUPERUSER:-su}"

    case "$SUPERUSER" in
        su)
            su -c "$0"
            ;;
        sudo)
            sudo "$0"
            ;;
    esac
}

## Require SuperUser Execution
[ `id -u` -ne 0 ] && die 78




echo 'Script Executed by UID'
id -u




## Clean Up
die 0

ten wklejony skrypt jest komplementem powłoki POSIX, zawsze piszę kompatybilny z Dash.


Ale czy twój skrypt nie wymaga instalacji sudo? Czy jest jakiś sposób, aby uzyskać dostęp dla superużytkowników bez użycia sudo? Poprzez proste skrypty?
darnir

@darnir: Nie, wklejony skrypt nie wymaga sudoinstalacji. Wymaga wykonania superużytkownika i można go użyć, sudojeśli jest dostępny. Jeśli sudonie jest dostępny, skrypt musi zostać uruchomiony jako użytkownik root, inaczej będzie die.
JM Becker,

@darnir: Dodatkowo tak naprawdę nie ma tak zwanego „zwykłego skryptu”. Prawie wszystko, z wyjątkiem wbudowanych powłok, odbywa się za pomocą zwykłych plików binarnych. To jest cały punkt powłoki, aby wywoływać inne polecenia, interaktywne lub automatyczne. Jest to ta cecha charakterystyczna, która oddziela powłokę od języków programowania ogólnego przeznaczenia. Niezależnie od tego, w jaki sposób uzyskujesz superużytkownika, robisz to za pomocą zewnętrznych poleceń ..., zakładając, że nie kodujesz za pomocą surowych interfejsów jądra.
JM Becker,

1
@varesa: Co ciekawe, Ubuntu jest dokładnym przeciwieństwem domyślnych konfiguracji sudo / su. Wykonując możesz sprawdzić, jakie uprawnienia sudo ma użytkownik sudo -l. Niestety w tej sytuacji nie można go użyć, ponieważ może wymagać podania hasła. Myśląc o tym ostrożniej, wydaje mi się, że całą koncepcję można najlepiej osiągnąć poprzez test na dystrybucję. Używanie, su -cchyba że uruchamianie sudomyślnej wyłączonej dystrybucji, w takim przypadku używanie sudo su -c. Jak wspomnieli inni, najlepiej pozostawić podniesienie użytkownika superużytkownikowi, uważam, że wszelkie rozglądanie się wokół jest dla wygody.
JM Becker

1
@varesa: Zaktualizowałem wklejony skrypt, aby zmniejszyć ryzyko użycia nieskonfigurowanego sudo. Powinno to działać poprawnie w większości dystrybucji, przy założeniu domyślnych su/ sudokonfiguracji. Wiem, że przestarzałe Ubuntu, wcześniej lsb_release, musiałoby zostać rozwiązane ... Ale to naprawdę jest tylko przykład, i oczywiście można go rozszerzyć.
JM Becker
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.