miten perustaa Linux chroot vankilat
termiä chroot Vankila käytettiin ensimmäisen kerran vuonna 1992, artikkelissa merkittävä tietoturvatutkija, Bill Cheswick, (mikä on mielenkiintoista, jos olet kiinnostunut tuollainen asia, löydät artikkelin täältä). Chroot vankilat alkoi ilmestyä vuonna 2003, sovelluksia kuten IRC ja FTP. Vuonna 2005 Sun esitteli “Containers” – teknologiansa nimeltä Zones, joka puolestaan oli nimiavaruuksien käsitteen edeltäjä, joka on konttien kanssa käytettävä ydinteknologia.
Chroot basics
Chroot sallii ylläpitäjän kontrolloida pääsyä palveluun tai tiedostojärjestelmään samalla kun hän kontrolloi altistumista taustalla olevalle palvelinympäristölle. Kaksi yleistä esimerkkiä, joita saatat kohdata, ovat käynnistysjärjestyksen aikana ja “emergency shell” Red Hat/CentOS/Fedora-järjestelmissä ja Secure FTP (SFTP) – järjestelmässä.
komento näyttää tältä:
chroot <newroot> ]
sudo
– komennon tapaan chroot
– komento muuttaa seuraavan komennon ympäristöä. Toisin sanoen se muuttaa sinut newroot
– hakemistoon, ja tekee tästä hakemistosta myös “toimivan” hakemiston. command
suorittaa sitten kyseisessä paikassa, mikä on hyödyllistä esimerkiksi pelastettaessa järjestelmää, joka ei käynnisty.
toisin kuin sudo
, olet hakemistossa “in”. Tämä käytäntö, jälleen, on hyödyllinen, jos käynnistät ulkoisen median mutta täytyy käyttää “paikallinen” tiedostojärjestelmä tai komento tehdä työtä.
chroot
toinen yleinen käyttötarkoitus on rajoittaa palvelua tai käyttäjää piilottamalla tiedostojärjestelmän loput osat kääreellä, mikä rajoittaa etäkäyttäjän näkymää muiden käyttäjien tietoihin. Suosittu toteutus käyttämällä tätä lähestymistapaa SFTP.
esimerkki
ennen kuin aloitat tämän esimerkin työstämisen, kannattaa varmistaa, että sinulla on varmuuskopiot. Tässä tapauksessa varmuuskopioi /etc/ssh/sshd_config
– tiedosto, koska teet siihen muutoksia.:
# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
toistaiseksi rajoitat vain SFTP-käyttäjien kotihakemistoihin palvelimella. Tämä vaatimus tarkoittaa, että sinun täytyy lisätä käyttäjiä ja laittaa heidät ryhmään:
# useradd -g sftpusers -s /sbin/nologin -p nick nick
huomaa, että jos teet tämän, voit määrittää nick
tilin, jolla ei ole kirjautumisriviä. Tämä tekniikka on sekä käytännöllinen että hyvä tietoturvakäytäntö: jos hän käyttää vain SFTP: tä, hänellä ei pitäisi olla sisäänkirjautumisoikeuksia. Aion keskustella tarjoamalla kuori etäkäyttäjille seuraavassa artikkelissa.
nyt sinun täytyy kertoa ssh
– palvelulle, mitä tehdä, kun SFTP-käyttäjät kirjautuvat sisään. Avaa /etc/ssh/sshd_config
– tiedosto ja lisää loppuun seuraava:
Subsystem sftp internal-sftpMatch Group sftpusersForceCommand internal-sftpChrootDirectory /homeX11Forwarding noAllowTcpForwarding no
on tärkeää, että lisäät nämä asetukset erillisenä tietuekokonaisuutena ja että käytät Match
– syntaksia osoittaaksesi, että tämä osio koskee vain tämän ryhmän käyttäjiä. Jos olet tehnyt muutokset olemassa oleviin merkintöihin, ne koskisivat kaikkia SSH-käyttäjiä, jotka voisivat katkaista etäyhteyden.
konfiguraatiorivit jakautuvat seuraavasti:
-
ForceCommand
saassh
valitsemaan sisäänrakennetun laitoksensa tarjoamaan SFTP-palvelua (jota voi hallita itsenäisesti). -
ChrootDirectory
kertoosshd
, mihin käyttäjä voi rajoittaa. -
Subsystem sftp internal-sftp
kertoosshd
: n lataavan sisäisensftp
palvelun ja antavan sen käyttöön.
saatat joutua varmistamaan, että tätä Subsystem
ei ole määritelty jo kommentoimalla tätä riviä aiemmin asetustiedostossa:
# override default of no subsystems# Subsystem sftp /usr/libexec/openssh/sftp-server
kun olet tehnyt muutokset ja tarkistanut oikeinkirjoituksen, mene eteenpäin ja tallenna muutokset. Käynnistä sitten uudelleen sshd
:
# systemctl restart sshd
testaa uusi käyttäjä:
$ sftp nick@showmenick@showme's password:Connected to [email protected]> lsaccounting ansible fred jason kenny lisa nicksftp> pwdRemote working directory: /sftp> exit
Oho, odota hetki: näyttää siltä, että näet myös kaikki muiden käyttäjien hakemistot. Kuitenkin, et voi navigoida näihin hakemistoihin:
sftp> cd fredsftp> lsremote readdir("/fred"): Permission denied
voit ohjata chrooted-käyttäjän omaan kotihakemistoonsa muuttamalla ChrootDirectory
– riviä sshd_config
– tiedostossa näin:
ChrootDirectory /
tämä nopea muutos saa Nickin näyttämään siltä kuin hän olisi omassa kotihakemistossaan, eikä hän voi nähdä muiden käyttäjien tiedostoja:
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>
minne se meni? Katso tätä.:
# ls /home/nicktest.txt
huomaa, että chroot jail
: ää ei sinänsä pidetä riittävänä turvallisuusrajoituksena. Vaikka se estää käyttäjää muuttumasta pois rajoitetusta hakemistosta, on olemassa tapoja kiertää tämä (yleisideaan viitataan chroot(2)
man-sivulla, johon kannattaa tutustua, jos harkitsee tämän tempun käyttämistä tuotanto-tai liiketoimintakriittisessä kontekstissa.)
paketointi (toistaiseksi)
niin voi nähdä, että chroot
voi olla aika hyödyllinen työkalu. Osassa 2, katson enemmän määrittämällä erityisiä hakemistoja käyttäjille, ja tarjoamalla shell ympäristön etäkäyttäjälle paljastamatta muun palvelimen.
uusia kontteja? Lataa Containers Primer ja opi Linux containers perusteet.