Información blog

Linux, tutoriales, noticias, sistemas, redes y seguridad informática, entre otras cosas.

martes, 25 de agosto de 2015

Como crear una sesión enjaulada sin usar chroot

Anteriormente he hablado sobre las bondades que ofrece chroot y las posibilidades que puede ofrecer esta herramienta. Si bien es cierto que es muy útil; a veces queremos que un usuario acceda remotamente a la consola de nuestro sistema y que simplemente ejecute un script o que tenga que realizar una acción muy concreta, cosa que a veces requiere múltiples binarios y que puede resultar muy aparatoso y poco práctico en algunos casos concretos. Es por ello que a veces lo que nos interesa es que el usuario que se vaya a loggear, simplemente tenga acceso a un script o una TUI (Text User Interface) con un menú o un cuadro de entrada de texto en el que se hagan unas labores muy concretas y muy limitadas sin permitirle que "juegue" con la consola y sin que el usuario final necesite tener conocimientos sobre la consola de Linux, que probablemente sea uno de los mayores problemas con los que se puede encontrar éste.

jaula

Este proceso es algo más limitado que chroot, pero por otro lado es mucho más restrictivo y no deja la integridad del sistema en manos del usuario final, ya que solamente hará lo que nosotros le permitamos hacer en el script, sin la posibilidad de que éste introduzca comandos directos a menos que nosotros hayamos diseñado el script estrictamente para ello.

Comenzaríamos creando un pequeño script que representará aquello a lo que el usuario estará limitado hacer... No debe de ser un script realmente espectacular ni tampoco tenemos que seguir unas directrices especificas en la creación de éste; es decir que puede ser un script que interactue con el usuario o que simplemente se limite a realizar una tarea en concreto... En este caso optaré por la primera opción, que suele ser la más práctica de las dos. Para ello crearé una TUI muy sencilla que se limite a que el usuario pueda escoger entre apagar el equipo, reiniciarlo o salir del script... Esto a nivel de código podría ser algo parecido a lo siguiente:

  1. #!/bin/bash
  2. INPUT=~/input.sh
  3. dialog \
  4. --title "SESION LIMITADA" \
  5. --menu "Usuario con permisos limitados. Escoja una opcion" \
  6. 15 100 3 \
  7. APAGAR "Apagar equipo" \
  8. REINICIAR "Reiniciar equipo" \
  9. SALIR "Salir" 2>"${INPUT}"
  10. SELECCIONADO=$(<"${INPUT}")
  11. case ${SELECCIONADO} in
  12. APAGAR) sudo shutdown -h now;;
  13. REINICIAR) sudo reboot;;
  14. SALIR) exit;;
  15. esac
  16. rm ${INPUT}

Esto se trata de evidentemente un ejemplo, pero podría aplicarse a un caso practico en el que queramos un usuario que únicamente se pueda limitara a reiniciar o a apagar el equipo. A este script podríamos denominarlo jaula.sh y en este caso es necesario almacenarlo en una carpeta en concreto; dicha carpeta se trata de /bin y más adelante veremos el motivo de ésto... También es importante otorgarle a nuestro nuevo script permisos de ejecución con el fin de que éste pueda ser ejecutado por cualquiera.

Ahora sería el turno de crear un nuevo usuario que estaría pensado únicamente para desempeñar esta tarea; un usuario que en ningún momento podrá actuar con "normalidad" sino que estaría limitado por unas directrices muy específicas. Aún así, la creación de este usuario no difiere del procedimiento habitual; es decir que bastaría con el mismo comando usado para la agregación de nuevos usuarios: adduser. Supongamos que por ejemplo deseamos agregar un usuario denominado testuser; el comando para agregar dicho usuario sería:

  1. adduser testuser

Como podéis ver, se trata del procedimiento habitual de agregación de usuario, pero en este caso necesitaremos hacerle unos pequeños retoques a éste tras su creación. Dichos retoques habría que hacerlos concretamente en el fichero /etc/passwd, fichero que almacena información importante sobre los usuarios. Dicho fichero mostrará línea por línea todo lo referente a nuestros usuarios, más únicamente nos interesará modificar aquella que haga referencia a nuestro nuevo usuario; es decir a testuser. En la línea en cuestión veremos diferentes parámetros, tales como el user id, el group id, la carpeta home y el interprete que se ejecuta tras loggearse. Sería este último parámetro en concreto el que nos interesa modificar, pues si si observais bien muestra que el interprete en cuestión es /bin/bash, interprete usado por defecto por todos los usuarios que agreguemos... 

La cuestión es que dicho valor puede ser modificado por nosotros para que apunte a otro destino; destino que se ejecutaría automáticamente tras loggearse el usuario, con lo que... ¿Qué pasaría si apuntásemos al script jaula.sh que recién hemos creado? Que éste sería ejecutado en caso de que el usuario en cuestión se loggearse, impidiendo que éste pueda navegar por la consola. Eso significaría que mientras que antes la línea en cuestión mostraba un aspecto parecido a éste:

bash
Ahora mostraría este aspecto:
jaula

Además, al ejecutar procesos de cierta relevancia, tales como apagar o reiniciar el sistema, se necesitan tener permisos de administrador, es decir, privilegios de sudo. Al ser un nuevo usuario que nosotros hemos creado, esto no es así con lo que necesitamos remediar ésto. Por fortuna dicha solución es tan sencilla como escribir el comando que muestro a continuación:

  1. echo 'testuser ALL=(ALL) NOPASSWD:ALL' >> /etc/passwd

Ahora si nos loggeasemos como testuser en vez de mostrarse la típica consola, tendríamos ante nuestros ojos la TUI que hemos creado sin tener la posibilidad de salir de ésta.

TUI_jaula


Espero que os haya resultado útil.

Saludos.

2 comentarios :

  1. Muy bueno para los sysadmin! Desconocía de que se puediera hacer esto...

    Tanto este como el de chroot me los guardo para favoritos. Buenos artículos! ;-)

    ResponderEliminar