Mimo że ograniczasz argumenty wiersza poleceń, nic nie stoi na przeszkodzie, aby użytkownik używał vima do otwierania, edytowania i nadpisywania dowolnego pliku losowego po uruchomieniu go jako root.
Użytkownik może uruchomić, sudo vim /etc/httpd/conf/httpd.conf a następnie
- usuń cały ten tekst z bufora edycji
- następnie dla wygody źródła istniejący plik (choć nie jest to nawet wymagane): na przykład konfiguracja sudo
:r /etc/sudoers UWAGA: O ile nie jest to ograniczone przez SELinux, użytkownik może odczytać dowolny plik w ten sposób!
- przyznać sobie więcej przywilejów sudo
user ALL=(ALL) NOPASSWD: ALL
- zastąp starą konfigurację
:w /etc/sudoers
Mogę sobie wyobrazić dziesiątki podobnych sposobów, w jakie użytkownik może uzyskać dostęp, zmodyfikować lub zniszczyć system.
Nie będziesz nawet mieć ścieżki audytu, które pliki zostały zmienione w ten sposób, ponieważ zobaczysz tylko, jak edytuje konfigurację Apache w komunikatach dziennika sudo. Jest to ryzyko bezpieczeństwa związane z przyznawaniem sudouprawnień dowolnemu edytorowi.
Jest to mniej więcej ten sam powód, dla którego przyznanie uprawnień na poziomie roota sudo do poleceń takich jak tari unzipczęsto jest niepewne, nic nie stoi na przeszkodzie, aby zamienić zamienniki plików binarnych systemu lub plików konfiguracji systemu w archiwum.
Drugie ryzyko, jak zauważyło wielu komentatorów, polega na tym, że vimpozwala na ucieczkę powłoki , w której można uruchomić podpowłokę z poziomu vima, która pozwala wykonać dowolne dowolne polecenie . Z poziomu sesji sudo vim będą one uruchamiane jako root, na przykład ucieczka powłoki:
:!/bin/bash da ci interaktywną powłokę roota
:!/bin/rm -rf / zrobi dobre historie w pubie.
Co zamiast tego zrobić?
Nadal możesz używać, sudoaby umożliwić użytkownikom edycję plików, których nie są właścicielami, w bezpieczny sposób.
W konfiguracji sudoers możesz ustawić specjalne zarezerwowane polecenie, sudoedita następnie pełną (ścieżkę) nazwę pliku (plików), które użytkownik może edytować:
user ALL=(ALL) sudoedit /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf
Użytkownik może następnie użyć -eprzełącznika w wierszu polecenia sudo lub użyć sudoeditpolecenia:
sudo -e /etc/httpd/conf/httpd.conf
sudoedit /etc/httpd/conf/httpd.conf
Jak wyjaśniono na stronie podręcznika :
Ta -e (edit)opcja wskazuje, że zamiast uruchomić polecenie, użytkownik chce edytować jeden lub więcej plików. Zamiast polecenia ciąg „sudoedit” jest używany podczas sprawdzania polityki bezpieczeństwa.
Jeśli użytkownik jest autoryzowany przez zasady, podejmowane są następujące kroki:
- Tworzone są tymczasowe kopie plików, które mają być edytowane z ustawieniem właściciela dla wywołującego użytkownika.
- Edytor określony przez zasadę jest uruchamiany w celu edycji plików tymczasowych. Zasady sudoers używają zmiennych środowiskowych SUDO_EDITOR, VISUAL i EDITOR (w tej kolejności). Jeśli nie ustawiono żadnego z SUDO_EDITOR, VISUAL lub EDITOR,
sudoersużywany jest pierwszy program wymieniony w opcji edytora (5).
- Jeśli zostały zmodyfikowane, pliki tymczasowe są kopiowane z powrotem do oryginalnej lokalizacji, a wersje tymczasowe są usuwane.
Jeśli określony plik nie istnieje, zostanie utworzony.
Zauważ, że w przeciwieństwie do większości poleceń uruchamianych przez sudo, edytor jest uruchamiany w niezmodyfikowanym środowisku wywołującego użytkownika. Jeśli z jakiegoś powodu sudo nie może zaktualizować pliku w edytowanej wersji, użytkownik otrzyma ostrzeżenie, a edytowana kopia pozostanie w pliku tymczasowym.
sudoersInstrukcja zawiera również całą sekcję jaki może zaoferować ograniczoną ochronę przed ucieczek powłoki z RESRICTi NOEXECopcji.
restrict
Unikaj udzielania użytkownikom dostępu do poleceń, które pozwalają użytkownikowi na uruchamianie dowolnych poleceń. Wiele edytorów ma tryb ograniczony, w którym wyłączane są zmiany znaczenia powłoki, jednak sudoedit jest lepszym rozwiązaniem do uruchamiania edytorów przez sudo. Z powodu dużej liczby programów, które oferują ucieczki powłoki, ograniczanie użytkowników do zestawu programów, które tego nie robią, jest często niewykonalne.
i
noexec
Wiele systemów obsługujących biblioteki współdzielone ma możliwość przesłonięcia domyślnych funkcji bibliotecznych poprzez wskazanie zmiennej środowiskowej (zwykle LD_PRELOAD) na alternatywną bibliotekę współdzieloną. W takich systemach można użyć funkcji noexec sudo, aby uniemożliwić uruchamianie programu przez sudo z innych programów. Uwaga: ... ...
Aby włączyć noexec dla polecenia, użyj NOEXECznacznika zgodnie z dokumentacją w sekcji Specyfikacja użytkownika powyżej. Oto przykład, że znowu:
aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
To pozwala użytkownikowi Aaron uruchomić /usr/bin/morei /usr/bin/vize noexec włączona. Zapobiegnie to wykonywaniu przez te dwa polecenia innych poleceń (takich jak powłoka).
vimużytkownik może swobodnie otwierać i zapisywać w dowolnym pliku, który mu odpowiada.