jak skonfigurować Linux chroot jails

termin chroot jail został po raz pierwszy użyty w 1992 roku, w artykule autorstwa wybitnego badacza bezpieczeństwa, Billa Cheswicka (co jest interesujące, jeśli interesujesz się tego rodzaju rzeczami, możesz znaleźć artykuł tutaj). Chroot jails zaczął pojawiać się w 2003 roku, z aplikacjami takimi jak IRC i FTP. W 2005 roku firma Sun wprowadziła technologię” kontenerów ” o nazwie Zones, która z kolei była prekursorem koncepcji przestrzeni nazw, która jest podstawową technologią stosowaną w kontenerach.

podstawy Chroot

Chroot pozwala administratorowi kontrolować dostęp do usługi lub systemu plików, kontrolując jednocześnie ekspozycję na podstawowe środowisko serwera. Dwa typowe przykłady, które możesz napotkać, to sekwencja rozruchu i “powłoka awaryjna” w systemach Red Hat/CentOS/Fedora oraz w bezpiecznym FTP (SFTP).

polecenie wygląda tak:

chroot <newroot> ]

podobnie jak polecenie sudo, polecenie chroot zmienia środowisko następującego polecenia. Innymi słowy, spowoduje to zmianę na katalog newroot, a także uczyni ten katalog “działającym” katalogiem. command następnie wykonuje w tej lokalizacji, co jest przydatne do takich rzeczy jak ratowanie systemu, który nie chce się uruchomić.

w przeciwieństwie do sudo, będziesz ” w ” katalogu. Ta praktyka, ponownie, jest przydatna, jeśli uruchamiasz z zewnętrznych nośników, ale potrzebujesz dostępu do “lokalnego” systemu plików lub polecenia do pracy.

innym powszechnym zastosowaniem chroot jest ograniczenie usługi lub Użytkownika za pomocą wrappera do ukrycia reszty systemu plików, co ogranicza widok zdalnego użytkownika na dane innych użytkowników. Popularna implementacja wykorzystująca takie podejście SFTP.

przykład

zanim zaczniesz pracować nad tym przykładem, upewnij się, że masz kopie zapasowe. W tym przypadku wykonaj kopię zapasową pliku /etc/ssh/sshd_config, ponieważ będziesz wprowadzać zmiany w tym pliku:

# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

na razie ograniczysz tylko użytkowników SFTP do ich katalogów domowych na serwerze. Ten wymóg oznacza, że musisz dodać użytkowników i umieścić ich w grupie:

# useradd -g sftpusers -s /sbin/nologin -p nick nick

zauważ, że zrobienie tego spowoduje przypisanie nick konta bez powłoki logowania. Ta technika jest zarówno praktyczna, jak i dobra praktyka bezpieczeństwa: jeśli używa tylko SFTP, nie powinien mieć uprawnień do logowania. Omówię dostarczanie powłoki do zdalnych użytkowników w następnym artykule.

teraz musisz powiedzieć serwisowi ssh, co zrobić, gdy zalogują się użytkownicy SFTP. Otwórz plik /etc/ssh/sshd_config i dodaj na końcu:

Subsystem sftp internal-sftpMatch Group sftpusersForceCommand internal-sftpChrootDirectory /homeX11Forwarding noAllowTcpForwarding no

ważne jest, aby dodać te ustawienia jako osobny zestaw wpisów i użyć składni Match, aby wskazać, że ta sekcja dotyczy tylko użytkowników z tej grupy. Jeśli wprowadzisz zmiany w istniejących wpisach, będą one miały zastosowanie do wszystkich użytkowników SSH, którzy mogliby przerwać zdalny dostęp.

linie konfiguracyjne rozkładają się następująco:

  • ForceCommand sprawia, że ssh wybiera swoją wbudowaną funkcję, aby zapewnić usługę SFTP (którą możesz kontrolować niezależnie).
  • ChrootDirectory mówi sshd gdzie ograniczyć użytkownika.
  • Subsystem sftp internal-sftp każe sshd załadować wewnętrzną usługę sftp i udostępnić ją.

może być konieczne upewnienie się, że ta Subsystem nie jest już zdefiniowana, komentując tę linię wcześniej w pliku konfiguracyjnym:

# override default of no subsystems# Subsystem sftp /usr/libexec/openssh/sftp-server

po wprowadzeniu zmian i sprawdzeniu pisowni, Zapisz zmiany. Następnie uruchom ponownie sshd:

# systemctl restart sshd

Przetestuj nowego użytkownika:

$ sftp nick@showmenick@showme's password:Connected to [email protected]> lsaccounting ansible fred jason kenny lisa nicksftp> pwdRemote working directory: /sftp> exit

UPS, poczekaj chwilę: wygląda na to, że możesz zobaczyć wszystkie katalogi innych użytkowników. Nie możesz jednak przejść do tych katalogów:

sftp> cd fredsftp> lsremote readdir("/fred"): Permission denied

możesz skierować użytkownika chrooted do własnego katalogu domowego, zmieniając linię ChrootDirectory w pliku sshd_config w ten sposób:

ChrootDirectory /

ta szybka zmiana sprawia, że Nick wygląda tak, jakby był we własnym katalogu domowym i nie będzie mógł zobaczyć plików innych użytkowników:

sftp> pwdRemote working directory: /home/nicksftp>sftp> exit$ touch test.txt$ sftp nick@showmenick@showme's password:Connected to [email protected]> put test.txtUploading test.txt to /home/nick/test.txttest.txt 100% 0 0.0KB/s 00:00sftp> lstest.txtsftp>

gdzie to się podziało? Zobacz też:

# ls /home/nicktest.txt

należy zauważyć, że chroot jail nie jest uważane za odpowiednie ograniczenie bezpieczeństwa samo w sobie. Chociaż uniemożliwia to użytkownikowi zmianę katalogu z ograniczonym katalogiem, istnieją sposoby obejścia tego problemu (ogólna idea znajduje się na stronie podręcznika chroot(2), na którą powinieneś się przyjrzeć, jeśli rozważasz użycie tej sztuczki w krytycznym kontekście produkcyjnym lub biznesowym.)

więc widać, że chroot może być całkiem użytecznym narzędziem. W części 2 przyjrzę się bardziej przypisywaniu określonych katalogów do użytkowników i dostarczaniu środowiska powłoki do Zdalnego Użytkownika bez narażania reszty serwera.

nowy w kontenerach? Pobierz podkład Containers i poznaj podstawy kontenerów Linuksa.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.