Sudo for Windows — obsługa sudo w środowisku Windows

avlab.pl 7 miesięcy temu
Zdjęcie: Sudo for Windows — obsługa sudo w środowisku Windows


W build 26052 systemu Windows 11 Insider Preview jedną z dodanych opcji jest wsparcie dla znanego z Linuxa sudo. Standardowo sudo w systemach Linux umożliwia wykonanie poleceń na prawach innego użytkownika (nawet bez konieczności przelogowania), z czego najbardziej powszechnym przypadkiem jest wykonanie poleceń jako root. Nie jest to funkcjonalność dostępna dla wszystkich użytkownika — musi on przynależeć do grupy sudo (wheel w systemach RHEL) lub posiadać odpowiedni wpis w /etc/sudoers.

Opracowane przez Microsoft rozwiązanie, którego kod źródłowy (całość napisana w PowerShell) znajdziemy w repozytorium na GitHub, pozwala wykonać podane jako argument polecenie na prawach administratora. Zapoznałem się w praktyce z możliwościami sudo w systemie Windows i jest to zdecydowane ułatwienie pracy, szczególnie w systemach desktopowych (z nieaktywnym wbudowanym kontem Administrator), gdzie przykładowo w celu wykonania poleceń CMD wymagających szerszych uprawnień należy „ręcznie” uruchomić Wiersz polecenia jako użytkownik uprzywilejowany.

Istniało już co prawda gsudo, ale to narzędzie rozwijane przez zewnętrznego autora. Sudo for Windows będzie oficjalnym dodatkiem i pewnie pojawi się także w standardowych edycjach systemu Windows 11.

Wspomniany build 26052 nie jest już najnowszą kompilacją, na dzień przygotowywania tego tekstu najnowsza wersja to 26058. Obsługa sudo została w niej oczywiście zawarta. Dedykowany dla nas link do pliku ISO z aktualnym build można wygenerować pod stałym adresem https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewiso. Sposoby instalacji tego systemu są dwa. Można zamontować dysk z pobranym plikiem (a choćby sam plik ISO poprzez opcję Instalacja widocznym po kliknięciu ikony pliku prawym przyciskiem myszy) i uruchomić z niego program setup.exe, który w kilku niewymagających wyjaśnień krokach przeprowadzi nas przez cały proces.

Próbowałem skorzystać z tej możliwości w środowisku maszyny wirtualnej VirtualBox z Windows 11 i niestety każda próba kończyła się niepowodzeniem, a ostatecznie wykonanym automatycznie rollback’iem do oryginalnie zainstalowanej wersji. O ile udało mi się rozwiązać problemy po stronie VirtualBox, to jednak wszystkie próby zajęły znaczną ilość czasu. Po ilości wątków w witrynach VirtualBox i Microsoft Community mogę stwierdzić, iż nie jestem pierwszą osobą, która napotkała te trudności.

Dlatego sugeruję wybranie drugiej opcji, czyli czystej instalacji. Wtedy szanse na ewentualne niepowodzenie są znacznie mniejsze niż w przypadku „zastępowania” wcześniej zainstalowanego systemu Windows. Użycie maszyny wirtualnej będzie dobrym wyborem, ale jeżeli preferowane jest wykorzystanie fizycznego sprzętu, to wcześniej powinna zostać wykonana kopia zapasowa (najlepiej całego dysku). Systemy pochodzące z Insider Preview mogą zwyczajnie zawierać różne błędy, nie są to wydania stabilne.

Sudo nie jest domyślnie aktywne. Aby umożliwić jego działanie, wystarczy wejść w Ustawienia -> System -> Dla deweloperów i kliknąć interaktywny element przy opcji Włącz program sudo. Pojawi się okno informacyjne, w którym wybieramy Tak.

Sudo for Windows może działać w trzech trybach o następujących nazwach:

  • In a new window (W nowym oknie) — opcja domyślna, otwiera nowe okno z uruchomionym na prawach administratora poleceniem
  • With input disabled (Z wyłączonymi danymi wejściowymi) — uruchamia polecenie w oknie bieżącym, ale jednocześnie blokuje strumień wejścia (stdin)
  • Inline (Wbudowany) — uruchamia standardowo polecenie w oknie bieżącym, najbardziej sensowna opcja

Pomoc dla polecenia sudo możemy wyświetlić z użyciem przełącznika –help.

Załóżmy, iż zamierzamy zainstalować FileZilla Server (właściwie bezkonkurencyjny serwer FTP dla Windows). Używam narzędzia Scoop, które pozwala na instalację wielu różnych aplikacji z poziomu CLI. Jak widać, ta konkretna paczka musi zostać zainstalowana na prawach administratora.

Możemy wykonać polecenie

sudo cmd /c scoop install extras/filezilla-server

W Linuxie pierwsze (lub po upływie czasu ustawionego jako timestamp_timeout) wykonanie sudo przy domyślnej opcji (czyli bez NOPASSWD) będzie związane z koniecznością podania hasła naszego użytkownika. Windows do tej kwestii ma inne podejście i zostanie wyświetlone dobrze znane okno UAC (User Access Control). Przy każdym użyciu sudo potrzebne będzie zatwierdzenie akcji.

Po wybraniu Tak zostanie otwarte kolejne okno cmd.exe, w którym na prawach administratora zostanie wykonane podane polecenie.

Tryb W nowym oknie nie zawsze pozwoli na wykonanie wszystkich czynności. Nie zadziała np. uruchomienie graficznego instalatora wybranej aplikacji. Poniższe zrzuty ekranu przedstawiają próby wykonania pliku EXE z domyślną opcją oraz po ustawieniu trybu Wbudowany (wtedy wyświetla się UAC dla programu sudo, zamiast dla programu do uruchomienia podanego jako parametr).

Sudo potrafi ułatwić i przyspieszyć pracę. jeżeli użytkownik wcześniej wykonywał inne operacje w cmd.exe uruchomionym na prawach zwykłego użytkownika, to chcąc wykonać polecenie jako administrator, nie ma potrzeby otwierania drugiego okna Wiersza polecenia (chociaż aplikacja Terminal i ten proces uprościła).

Do przedstawienia pozostał nam jeszcze tryb Z wyłączonymi danymi wejściowymi. Przygotowałem prosty skrypt Batch, który jako argumenty przyjmuje adres serwera, nazwę użytkownika i jego hasło, po czym zapisuje te dane do pliku hasla.txt. Można zauważyć, iż po użyciu sudo skrypt został wykonany, ale podane na wejściu dane nie zostały obsłużone i nie znalazły się w pliku hasla.txt.

Sudo for Windows to z pewnością warte uwagi rozwiązanie. Aktywujemy je w ustawieniach Dla deweloperów, co wydaje się rozsądną lokalizacją, ponieważ zwykli użytkownicy raczej nie korzystają z konsoli, a programy jako administrator uruchamiają w razie potrzeby w trybie graficznym. Narzędzie nie oferuje na ten moment użyteczności porównywalnej ze swoim prekursorem z systemów Linux, natomiast według podanego w pierwszym akapicie źródła zespół odpowiedzialny za rozwój Sudo for Windows zamierza w najbliższych miesiącach podać więcej szczegółów o dalszych planach.

Idź do oryginalnego materiału