Soluciones predeterminadas para shells de Linux remotos muy limitados

Soluciones predeterminadas para shells de Linux remotos muy limitados

Tengo un usuario que necesita conectarse a una máquina remota M(a través de ssh) y ejecutar uno en un conjunto fijo de comandos (digamos Nen total).

Estos comandos se basan en Python, sus bibliotecas y el acceso privilegiado a la red (qué máquina Mtiene).

¿Existen estrategias predeterminadas para limitar el shell del usuario de Linux solo a la ejecución de estos Ncomandos, sin ninguna posibilidad de:

  • mayor acceso a la fs
  • leer el contenido de los propios comandos
  • adquirir acceso privilegiado a la red
  • y por igual

En otras palabras, ¿cuáles son las estrategias predeterminadas para solicitar una consola limitada al usuario después de iniciar sesión, permitiendo, por ejemplo, sólo números entre 1y Ncomo entradas?

Respuesta1

Hay un buen truco en el archivo autorizado_keys: puede usar la opción de comando para definir el comando que se ejecutará al iniciar sesión, identificado por una clave, por lo que si sus N comandos son estáticos, puede definirlos en el servidor y listo. No restringirá la red, solo ejecutará el comando. Se verá así en el archivo Authorized_keys:

command = "date" ssh-rsa AAAA

Puedes encontrar más información sobre esto.tutorial

Para evitar que el usuario acceda a la red, puede usar SELinux u otro software similar, también puede escribir un enlace eBPF para permitir exactamente lo que desea.

Respuesta2

Supongamos que no se trata de un pequeño chroot o contenedor con sólo lo que necesitan, sino más bien de un sistema operativo multiusuario de propósito general.

Con suficiente automatización, es posible que no sea necesario iniciar sesión en el host. Quizás proporcione a través de algún sistema de autoservicio estas opciones limitadas, lo cual hace la automatización.

Para permitirles hacer cosas en el host, pruebe lo que yo llamaría un menú de texto cautivo. Que es un guión que quizás necesites escribir.

Limitar estrictamente a la persona a hacer otras cosas requiere varios trucos.

  • Inicie sesión como usuario sin privilegios, idealmente exclusivo para ellos. Escala para cosas privilegiadas con herramientas como doas o sudo.
  • Mandar este menú es lo que se ejecuta con ForceCommandlos bloques OpenSSH.
  • Ejecútelo también desde perfiles de shell. exec por lo que reemplaza el proceso de shell, y cuando el menú sale, también lo hace su sesión.
  • Trampa de señales en el script del menú.
  • Tenga cuidado con los programas que pueden ejecutar comandos arbitrarios. Desembolsar es trivialen vim, el comando es:shell
  • Escriba y utilice scripts envolventes de elementos de menú, para operaciones más complejas o mayor control sobre la salida.

Elija uno de los lenguajes de secuencias de comandos para escribir el menú. Considere la posibilidad de utilizar una biblioteca de menús de texto existente. Un bucle de entrada por sí solo no es difícil, pero lo que realmente se desea en producción es hacerlo robusto, fácil de modificar y con una buena experiencia de usuario.

información relacionada