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, żessh
wybiera swoją wbudowaną funkcję, aby zapewnić usługę SFTP (którą możesz kontrolować niezależnie). -
ChrootDirectory
mówisshd
gdzie ograniczyć użytkownika. -
Subsystem sftp internal-sftp
każesshd
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.