GNU/Linux >> Tutoriales Linux >  >> FreeBSD

Freebsd:¿Ssh en la cárcel con chroot no funciona debido a que la operación /dev/null no es compatible?

Estoy tratando de configurar una cárcel ssh-chroot en uno de mis servidores NAS. El sistema se ejecuta en NAS4Free (que se basa en nanobsd). El usuario debe poder ejecutar solo un comando, que es un script bash que abre ssh a otro servidor y ejecuta un comando allí.

Para configurar el chroot tengo esto en mi configuración sshd.

Match User op
    ChrootDirectory %h
    X11Forwarding no
    AllowTcpForwarding no

El script tiene esta línea:

ssh -i /.ssh/id_rsa [email protected]$externalresource -t "/mnt/storage/backup/run_project.sh '$1' '$2'"

Puedo iniciar sesión en ese chroot usando ssh, pero cuando ejecuto el script, aparece el siguiente error al intentar ejecutar el comando ssh en él.

Couldn't open /dev/null: Operation not supported

Lo mismo sucede cuando trato de ejecutar ssh sin formato dentro del chroot

[I have no [email protected] /]$ ssh
Couldn't open /dev/null: Operation not supported

/dev/null se ve así:

$ ls -la dev/
total 8
drwx--x--x  2 root  staff    512 Nov 29 18:16 .
drwxr-xr-x  8 root  staff    512 Nov 29 18:06 ..
crw-rw-rw-  1 root  staff   0x18 Nov 29 18:16 null

Sin los permisos 666 obtengo un error de denegación de permiso /dev/null, por supuesto.

Creé dev/null usando

mknod dev/null c 2 2

He intentado encontrar una explicación de por qué /dev/null devoluciones no se permite la operación, pero no he encontrado nada que ayude.

¿Podría alguien explicar cómo solucionar esto?

Respuesta aceptada:

Creé dev/null usando

mknod dev/null c 2 2

Tu conocimiento está desactualizado. Las cosas ya no funcionan de esta manera, ahora que NAS4Free se basa en FreeBSD 10 y 11. (De todos modos, tampoco son esos los números de dispositivo para el dispositivo nulo). Lea el mknod manual. Todavía puedes ejecutar mknod para crear nodos de dispositivo en un disco real o en un sistema de archivos RAM, pero los nodos que cree serán completamente inútiles. Como puedes ver, el kernel no te permite abrir dispositivos con ellos.

Es por eso que en las cárceles:cárceles reales, las que vienen con el sistema operativo, no simples entornos chroot que uno puede configurar con sshd_config — uno obtiene los archivos del dispositivo montando un devfs instancia dentro de la cárcel. También es por eso que las cárceles tienen perillas para controlar si devfs se puede montar y qué conjunto de reglas devfs se le aplica.

Si quieres un /dev/null en su entorno raíz modificado, tendrá que usar mount_nullfs para hacer el /dev real árbol visible dentro de la raíz modificada. Si usa una cárcel de buena fe, simplemente configúrela para montar un devfs en /dev .

Si usa una cárcel de buena fe, por supuesto, la configura para ejecutar sshd dentro de la cárcel , escuchando en la dirección IP de la cárcel y habilitado como un servicio en la cárcel /etc/rc.conf de la manera normal.

Relacionado:¿la diferencia entre [[ $a ==z* ]] y [ $a ==z* ]?

Lecturas adicionales

  • mknod . Manual de FreeBSD 11.0.
  • devfs . Manual de FreeBSD 11.0.
  • devfs.rules . Manual de FreeBSD 11.0.
  • Documentación:Cómo:Cárceles. Wiki de NAS4Free.
  • Mateo Riondato. “Cárceles”. Manual de FreeBSD .
  • Scott Robb (2015-03-04). Cárceles de FreeBSD .

FreeBSD
  1. Linux:¿Diferencia entre /dev/console, /dev/tty y /dev/tty0?

  2. ¿Qué tan portátiles son /dev/stdin, /dev/stdout y /dev/stderr?

  3. ¿Cuándo usar /dev/random Vs /dev/urandom?

  4. Cómo silenciar completamente un cronjob a /dev/null/?

  5. Cómo mapear dispositivos /dev/sdX y /dev/mapper/mpathY desde el dispositivo /dev/dm-Z

tty (/dev/tty) vs pts (/dev/pts) en Linux

¿Cómo maneja Linux múltiples separadores de rutas consecutivas (/home////username///file)?

Cómo usa Linux /dev/tty y /dev/tty0

hacer eco o imprimir /dev/stdin /dev/stdout /dev/stderr

¿Por qué se requieren < o > para usar /dev/tcp?

Crear un dispositivo de bloque virtual que escriba en /dev/null