Linux - Chroot - klatka dla użytkowników
Liczba odwołań : 7502 autor : Tomasz Czwarno
1. Stryktura katalogów dla chroot'owanego środowiska
2. Skrypt dla nowego chroot'owanego shella
3. Skrypt dla nowego chroot'owanego basha
4. Wpis informujący system o nowym shellu
5. Wpis informujący system o nowym shellu dla użytkowników user1 i user2
6. Wpis informujący system o ustawieniach dla użytkowników user1 i user2
1. Stryktura katalogów dla chroot'owanego środowiska :
| /chroot/bin |
Polecenia dla użytkowników np. : bash, ls, cp itd. |
| /chroot/lib |
Biblioteki dla poleceń : bash, ls, cp itd. |
| /chroot/etc |
Pliki : passwd, group, bashrc, profile, chroot-bash |
| /chroot/home/user1 |
Katalog użytkownika 1 |
| /chroot/home/user2 |
Katalog użytkownika 2 |
Struktura katalogów może być bardziej rozbudowana - wszystko zależy od tego co chce sie dać użytkownikom zamknietym w chroot'owanym środowisku.
Użytkownik w takim środowisku jest lokalnym root'em - zależy to jednak od odpowiedniego ustawienia praw. Dla uzytkownika /chroot jest widziany jako katalog startowy - nie może z niego wyjść - bynajmniej teoretycznie.
Wszystkie polecenia, które znajdują się w /chroot/bin są kopiami poleceń z katalogu /bin.
Można też umieścić, pewne polecenie z katalogu /sbin w katalogu /chroot/sbin lub /chroot/bin.
Zaleca się jednak, aby udostępniana polecenia, znajdowały sie w tych samych katalogach - odwzorowuje to semantykę ich
zastosowania jak i wprowadza ogólnoprzyjetą lokalizację poleceń linuxowych.
W katalogu /chroot/lib umieszczamy biblioteki potrzebne do uruchomienia przekopiowanych poleceń. Uzytkownik w chroot'owanym
środowisku znajduje się jak w klatce gdzie ma dostęp tylko do tego co mu damy - dlatego też trzeba przekopiowac biblioteki.
Polecenie ldd umozliwia określenie potrzebnych bibliotek dla wybranego polecenia np. :
ldd /bin/bash
ldd /bin/ls
ldd /bin/cp
...
W katalogu /chroot/etc umieszczamy pliki : passwd, group, bashrc, profile. Wszystkie pliki należy odpowiednio pozmieniać. Dalej zostanie opisany passwd i group.
W plikach bashrc i profile należy zadbać, aby wszystkie wpisy odnosiły się do nowego chroot'owanego środowiska, czyli nie odnosiły się do tych rzeczy których nie umieściliśmy w naszym shell'u.
|
2. Skrypt dla nowego chroot'owanego shella - chroot-shell :
| Lokalizacja skryptu |
/bin/chroot-shell |
#!/bin/bash
/usr/sbin/chroot /chroot /bin/chroot-bash
|
/usr/sbin/chroot wywołuje nowego shella i zamykow go w obrębie katalogu /chroot.
/bin/chroot-bash odnosi się już do chroot'owanego katalogu /chroot, więc skrypt chroot-bash
musi się znajdować faktycznie w katalogu /chroot/bin/chroot-bash.
|
3. Skrypt dla nowego chroot'owanego basha - chroot-bash :
| Lokalizacja skryptu |
/chroot/bin/chroot-bash |
#!/bin/bash
cd $HOME
/bin/bash
|
/chroot/bin/chroot-bash jest naszym nowym BASH'em. Jego zadanie jest przejście do katalogu użytkownika i odpalenie basha'a.
Moglibyśmy w skrypcie /bin/chroot-shell zmienić wpis na :
/usr/sbin/chroot /chroot /bin/bash
Wówczas, zarówno użytkownik user1 jak i user2 po zalogowaniu się znajdowaliby się w tym samym katalogu - /chroot
Dla zapewnienia jeszcze szczelniejszej izolacji, możnabybyło dla każdego uzytkownika tworzyć shella. Wtedy każdy użytkownik po zalogowaniu się
czułby się jak "root" - miałby własną strukturę katalogów. To rozwiązanie wiąże się z tym, że dla każdego chroot'owanego środowiska
trzebabyłoby przygotować odpowiednią strukturę katalogów, oraz umieścic w każdej z nich polecenia i biblioteki udostepniane użytkownikowi - co wiąże się ze znaczną konsumpcją pamięci dyskowej.
W przyjętym rozwiązaniu użytkownicy user1 i user2 mają dostep do tych samych poleceń.
|
4. Wpis informujący system o nowym shellu - shells :
| Lokalizacja pliku |
/etc/shells |
/bin/sh
/bin/bash
/sbin/nologin
/bin/bash2
/bin/ash
/bin/bsh
/bin/tcsh
/bin/csh
/bin/chroot-shell
|
|
Teraz system wie, jakie shell'e są dostepne - zarejestrowane. Umożliwi to pożniej zmianę wpisu w pliku passwd
|
5. Wpis informujący system o nowym shellu dla użytkowników user1 i user2 - passwd :
| Lokalizacja pliku |
/etc/passwd |
root:x:0:0:root:/root:/bin/bash
...
user1:x:500:500:User 1:/home/user1:/bin/chroot-shell
user2:x:501:501:User 2:/home/user2:/bin/chroot-shell
|
6. Wpis informujący system o ustawieniach dla użytkowników user1 i user2 - passwd, group :
| Lokalizacja pliku |
/chroot/etc/passwd |
user1:x:500:500:User 1:/home/user1:/bin/bash
user2:x:501:501:User 2:/home/user2:/bin/bash
|
| Lokalizacja pliku |
/chroot/etc/group |
user1:x:500:user1
user1:x:501:user1
|
W plikach passwd i group w chroot'owanym środowisku umieszczamy tylko tych uzytkowników, którzy maja dostąp
do do tego shell'a. Uniemożliwia to tym użytkownikom dowiedzenie się, kto jeszcze jest w systemie - poprzez czytanie tych plików.
W systemie muszą istnieć użytkownicy user1 i user2 - to oczywiste. Katalog użytkowników /chroot/home/user1 może być twardym linkiem do starego
ich katalogu /home/user, jeśli chroot'owane środowisko jest robione później i użytkownicy mieli juz dostęp do shell'a.
Wówczas jeśli serwer http zaglądał do katalogów użytkowników i wyświetlał strony www z katalogu /home/user1/public_html to użytkownicy nie odczują zmiany shell'a.
|
|