GNU/Linux >> Tutoriales Linux >  >> Linux

Profundizando en las cárceles chroot de Linux

En la primera parte, Cómo configurar cárceles chroot de Linux, cubrí el chroot comando y aprendiste a usar el envoltorio chroot en sshd para aislar los sftpusers grupo. Cuando editas sshd_config para invocar el envoltorio chroot y darle características coincidentes, sshd ejecuta ciertos comandos dentro de chroot jail o wrapper. Viste cómo esta técnica podría ser potencialmente útil para implementar un acceso contenido, en lugar de seguro, para usuarios remotos.

Ejemplo ampliado

Comenzaré ampliando lo que hice antes, en parte como revisión. Comience configurando un directorio personalizado para usuarios remotos. Usaré los sftpusers grupo de nuevo.

Comience por crear el directorio personalizado que desea usar y establezca la propiedad:

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

Esta vez, haz que root sea el propietario, en lugar de los sftpusers grupo. De esta forma, cuando agregas usuarios, no comienzan con permiso para ver todo el directorio.

A continuación, cree el usuario que desea restringir (en este caso, debe hacerlo para cada usuario), agregue el nuevo usuario a sftpusers group, y negar un shell de inicio de sesión porque estos son sftp usuarios:

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

Luego, crea el directorio para sanjay y establezca la propiedad y los permisos:

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

A continuación, edite el sshd_config expediente. Primero, comente la invocación del subsistema existente y agregue la interna:

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

Luego agregue nuestra entrada de caso coincidente:

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

Tenga en cuenta que ha vuelto a especificar un directorio, pero esta vez, ya ha configurado la propiedad para evitar que sanjay de ver las cosas de otra persona. Ese / final también es importante.

Luego, reinicie sshd y prueba:

[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.

Asi que. Sanjay solo puede ver su propia carpeta y necesita cd en él para hacer algo útil.

Aislar un servicio o usuario específico

Ahora, ¿qué sucede si desea proporcionar un entorno de shell utilizable para un usuario remoto o crear un entorno chroot jail para un servicio específico? Para hacer esto, cree el directorio encarcelado y el sistema de archivos raíz, y luego cree enlaces a las herramientas y bibliotecas que necesita. Hacer todo esto es un poco complicado, pero Red Hat proporciona un script e instrucciones básicas que facilitan el proceso.

Nota: Probé lo siguiente en Red Hat Enterprise Linux 7 y 8, aunque tengo entendido que esta capacidad estaba disponible en Red Hat Enterprise Linux 6. No tengo motivos para pensar que este script no funcionaría en Fedora, CentOS o cualquier otro distribución de Red Hat, pero su kilometraje (como siempre) puede variar.

Primero, crea tu directorio chroot:

# mkdir /chroot

Luego ejecute el script desde yum que instala los bits necesarios:

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

El --releasever=/ flag pasa la información de la versión local actual para inicializar un repositorio en el nuevo --installroot , define dónde está la nueva ubicación de instalación. En teoría, podría crear un chroot jail basado en cualquier versión de los repositorios yum o dnf (sin embargo, el script seguirá comenzando con los repositorios del sistema actual).

Con esta herramienta, instala utilidades de red básicas como el editor VIM y Python. Inicialmente, puede agregar otras cosas si lo desea, incluido cualquier servicio que desee ejecutar dentro de esta cárcel. Esta es también una de las cosas geniales de yum y dependencias. Como parte de la resolución de dependencias, yum hace las adiciones necesarias al árbol del sistema de archivos junto con las bibliotecas. Sin embargo, omite un par de cosas que debe agregar a continuación. Llegaré a eso en un momento.

Por ahora, los paquetes y las dependencias se han instalado, y se creó una nueva clave GPG para este nuevo repositorio en relación con este nuevo sistema de archivos raíz. A continuación, monte sus sistemas de archivos efímeros:

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

Y configure sus enlaces de desarrollo:

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

Tenga en cuenta que estas monturas no sobrevivir a un reinicio de esta manera, pero esta configuración te permitirá probar y jugar con un entorno chroot jail.

Ahora, prueba para comprobar que todo funciona como esperas:

# 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

Puede ver que el sistema de archivos y las bibliotecas se agregaron correctamente:

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

Desde aquí, verá la raíz correcta y no podrá navegar hacia arriba:

bash-4.2# exit
exit
#

Ahora ha salido del envoltorio chroot, lo que se esperaba porque lo ingresó desde un shell de inicio de sesión local como root. Normalmente, un usuario remoto no debería poder hacer esto, como vio en el sftp ejemplo:

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

Tenga en cuenta que todos estos directorios fueron creados por root, por lo que es quien los posee. Ahora, agregue este chroot a sshd_config , porque esta vez coincidirá solo con este usuario:

Match User leo
ChrootDirectory /chroot

Luego, reinicie sshd .

También necesita copiar el /etc/passwd y /etc/group archivos del sistema anfitrión al /chroot directorio:

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

Nota: Si te saltas el paso anterior, puedes iniciar sesión, pero el resultado no será confiable y serás propenso a errores relacionados con inicios de sesión conflictivos.

Ahora la prueba:

[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

Se ve bien. Ahora, ¿puedes encontrar algo útil que hacer? Divirtámonos:

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

Tú podrías suelte el releasever=/ , pero me gusta dejar eso porque deja menos posibilidades de resultados inesperados.

[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)

Entonces, httpd está ahí si lo quieres, pero solo para demostrar que puedes usar una línea rápida de Python, que también instalaste:

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

Y ahora tiene un servidor web simple ejecutándose en una cárcel chroot. En teoría, puede ejecutar cualquier cantidad de servicios desde el interior de la cárcel chroot y mantenerlos 'contenidos' y alejados de otros servicios, lo que le permite exponer solo una parte de un entorno de recursos más grande sin comprometer la experiencia de su usuario.

¿Es nuevo en los contenedores de Linux? Descarga el Manual de contenedores y aprende los conceptos básicos.


Linux
  1. Cómo mover Request Tracker a un contenedor de Linux

  2. Cómo mover MediaWiki a un contenedor de Linux

  3. Cómo mover WordPress a un contenedor de Linux

  4. Cómo configurar Chroot SFTP en Linux (Permitir solo SFTP, no SSH)

  5. Ejemplos de comandos sftp en Linux

Cómo SSH en un directorio particular en Linux

Cómo configurar SFTP chroot en Linux

Mi viaje hacia la administración del sistema Linux

Guía para configurar el servidor SFTP en Linux

Una guía práctica para el comando chroot en Linux

¿Cómo habilitar sFTP en un VPS Linux?