GNU/Linux >> Linux Esercitazione >  >> Linux

Fare un tuffo più approfondito nelle prigioni chroot di Linux

Nella prima parte, Come configurare le jail chroot di Linux, ho trattato il chroot comando e hai imparato a usare il wrapper chroot in sshd per isolare gli sftpusers gruppo. Quando modifichi sshd_config per invocare il wrapper chroot e dargli le caratteristiche corrispondenti, sshd esegue determinati comandi all'interno del chroot jail o wrapper. Hai visto come questa tecnica potrebbe essere potenzialmente utile per implementare l'accesso confinato, anziché sicuro, per gli utenti remoti.

Esempio esteso

Inizierò ampliando ciò che ho fatto prima, in parte come recensione. Inizia configurando una directory personalizzata per gli utenti remoti. Userò i sftpusers gruppo di nuovo.

Inizia creando la directory personalizzata che desideri utilizzare e impostando la proprietà:

# mkdir -p /sftpusers/chroot
# chown root:root /sftpusers/chroot

Questa volta, fai root come proprietario, anziché come sftpusers gruppo. In questo modo, quando aggiungi utenti, questi non iniziano con l'autorizzazione a visualizzare l'intera directory.

Quindi, crea l'utente che vuoi limitare (in questo caso devi farlo per ogni utente), aggiungi il nuovo utente a sftpusers gruppo e negare una shell di accesso perché sono sftp utenti:

# useradd sanjay -g sftpusers -s /sbin/nologin
# passwd sanjay

Quindi, crea la directory per sanjay e imposta la proprietà e le autorizzazioni:

# mkdir /sftpusers/chroot/sanjay
# chown sanjay:sftpusers /sftpusers/chroot/sanjay
# chmod 700 /sftpusers/chroot/sanjay

Quindi, modifica sshd_config file. Innanzitutto, commenta la chiamata del sottosistema esistente e aggiungi quella interna:

#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp

Quindi aggiungi la nostra voce caso di corrispondenza:

Match Group sftpusers
ChrootDirectory /sftpusers/chroot/
ForceCommand internal-sftp
X11Forwarding no
AllowTCPForwarding no

Tieni presente che sei tornato a specificare una directory, ma questa volta hai già impostato la proprietà per impedire sanjay dal vedere le cose di qualcun altro. Quel / finale è anche importante.

Quindi, riavvia sshd e prova:

[skipworthy@milo ~]$ sftp sanjay@showme
sanjay@showme's password:
Connected to sanjay@showme.
sftp> ls
sanjay
sftp> pwd
Remote working directory: /
sftp> cd ..
sftp> ls
sanjay
sftp> touch test
Invalid command.

Così. Sanjay può vedere solo la sua cartella e ha bisogno di cd in esso per fare qualcosa di utile.

Isolamento di un servizio o di un utente specifico

Ora, cosa succede se desideri fornire un ambiente shell utilizzabile per un utente remoto o creare un ambiente jail chroot per un servizio specifico? Per fare ciò, crea la directory incarcerata e il filesystem di root, quindi crea i collegamenti agli strumenti e alle librerie di cui hai bisogno. Fare tutto questo è un po' complicato, ma Red Hat fornisce uno script e istruzioni di base che rendono il processo più semplice.

Nota: Ho testato quanto segue in Red Hat Enterprise Linux 7 e 8, anche se ho capito che questa funzionalità era disponibile in Red Hat Enterprise Linux 6. Non ho motivo di pensare che questo script non funzionerebbe in Fedora, CentOS o qualsiasi altro Red Hat distro, ma il tuo chilometraggio (come sempre) potrebbe variare.

Per prima cosa, crea la tua directory chroot:

# mkdir /chroot

Quindi esegui lo script da yum che installa i bit necessari:

# yum --releasever=/ --installroot=/chroot install iputils vim python

Il --releasever=/ flag passa le informazioni sulla versione locale corrente per inizializzare un repository nel nuovo --installroot , definisce dove si trova il nuovo percorso di installazione. In teoria, potresti creare una jail chroot basata su qualsiasi versione dei repository yum o dnf (lo script, tuttavia, inizierà comunque con i repository di sistema correnti).

Con questo strumento installi le utilità di rete di base come l'editor VIM e Python. All'inizio potresti aggiungere altre cose se lo desideri, incluso qualsiasi servizio che desideri eseguire all'interno di questa prigione. Questa è anche una delle cose interessanti di yum e dipendenze. Come parte della risoluzione delle dipendenze, yum apporta le necessarie aggiunte all'albero del filesystem insieme alle librerie. Tuttavia, tralascia un paio di cose che devi aggiungere in seguito. Ci arriverò tra un momento.

A questo punto, i pacchetti e le dipendenze sono stati installati ed è stata creata una nuova chiave GPG per questo nuovo repository in relazione a questo nuovo filesystem di root. Quindi, monta i tuoi filesystem temporanei:

# mount -t proc proc /chroot/proc/
# mount -t sysfs sys /chroot/sys/

E imposta i tuoi binding di sviluppo:

# mount -o bind /dev/pts /chroot/dev/pts
# mount -o bind /dev/pts /chroot/dev/pts

Nota che queste cavalcature non sopravvivi a un riavvio in questo modo, ma questa configurazione ti consentirà di testare e giocare con un ambiente chroot jail.

Ora, prova per verificare che tutto funzioni come previsto:

# chroot /chroot
bash-4.2# ls
bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr

Puoi vedere che il filesystem e le librerie sono stati aggiunti con successo:

bash-4.2# pwd
/
bash-4.2# cd ..

Da qui, vedi la radice corretta e non riesci a risalire:

bash-4.2# exit
exit
#

Ora sei uscito dal wrapper chroot, il che è previsto perché l'hai inserito da una shell di accesso locale come root. Normalmente, un utente remoto non dovrebbe essere in grado di farlo, come hai visto in sftp esempio:

[skipworthy@milo ~]$ ssh root@showme
root@showme's password:
[root@showme1 ~]# chroot /chroot
bash-4.2#

Nota che queste directory sono state tutte create da root, quindi ecco chi le possiede. Ora aggiungi questo chroot a sshd_config , perché questa volta abbinerai solo questo utente:

Match User leo
ChrootDirectory /chroot

Quindi, riavvia sshd .

Devi anche copiare il /etc/passwd e /etc/group file dal sistema host al /chroot directory:

[root@showme1 ~]# cp -vf /etc/{passwd,group} /chroot/etc/

Nota: Se salti il ​​passaggio precedente, puoi accedere, ma il risultato sarà inaffidabile e sarai soggetto a errori relativi ad accessi in conflitto

Ora per il test:

[skipworthy@milo ~]$ ssh leo@showme
leo@showme's password:
Last login: Thu Jan 30 19:35:36 2020 from 192.168.0.20
-bash-4.2$ ls
-bash-4.2$ pwd
/home/leo

Sembra buono. Ora, puoi trovare qualcosa di utile da fare? Divertiamoci un po':

[root@showme1 ~]# yum --releasever=/ --installroot=/chroot install httpd

Puoi potresti rilascia il releasever=/ , ma mi piace lasciar perdere perché lascia meno possibilità di risultati imprevisti.

[root@showme1 ~]# chroot /chroot
bash-4.2# ls /etc/httpd
conf conf.d conf.modules.d logs modules run
bash-4.2# python
Python 2.7.5 (default, Aug 7 2019, 00:51:29)

Quindi, httpd c'è se lo vuoi, ma solo per dimostrare che puoi usare un veloce one-liner di Python, che hai anche installato:

bash-4.2# python -m SimpleHTTPServer 8000
Serving HTTP on 0.0.0.0 port 8000 ...

E ora hai un semplice server web in esecuzione in una prigione chroot. In teoria, puoi eseguire un numero qualsiasi di servizi dall'interno della jail chroot e tenerli "contenuti" e lontani da altri servizi, consentendoti di esporre solo una parte di un ambiente di risorse più ampio senza compromettere l'esperienza dell'utente.

Nuovo per i container Linux? Scarica Containers Primer e impara le basi.


Linux
  1. Termux trasforma Android in un ambiente di sviluppo Linux

  2. Come configurare le jail chroot di Linux

  3. Come configurare Chroot SFTP in Linux (consenti solo SFTP, non SSH)

  4. Esempi di comandi sftp in Linux

  5. Linux:processo in un servizio

Come SSH in una directory particolare su Linux

Come configurare SFTP in chroot in Linux

Il mio viaggio nell'amministrazione del sistema Linux

Guida per la configurazione del server SFTP in Linux

Una guida pratica per il comando chroot in Linux

Come abilitare sFTP in un VPS Linux?