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 sudo
uprawnień dowolnemu edytorowi.
Jest to mniej więcej ten sam powód, dla którego przyznanie uprawnień na poziomie roota sudo do poleceń takich jak tar
i unzip
czę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 vim
pozwala 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ć, sudo
aby 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, sudoedit
a 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ć -e
przełącznika w wierszu polecenia sudo lub użyć sudoedit
polecenia:
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,
sudoers
uż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.
sudoers
Instrukcja zawiera również całą sekcję jaki może zaoferować ograniczoną ochronę przed ucieczek powłoki z RESRICT
i NOEXEC
opcji.
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 NOEXEC
znacznika 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/more
i /usr/bin/vi
ze noexec włączona. Zapobiegnie to wykonywaniu przez te dwa polecenia innych poleceń (takich jak powłoka).
vim
użytkownik może swobodnie otwierać i zapisywać w dowolnym pliku, który mu odpowiada.