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