Gestión de intérpretes de comandos en Linux con add-shell

Introducción a la administración de shells del sistema

Cuando implementamos intérpretes de comandos alternativos o diseñamos scripts de entorno restringido para usuarios específicos, la utilidad add-shell surge como el estándar recomendado por las distribuciones basadas en Debian y Ubuntu. Esta herramienta actualiza de forma controlada el registro central /etc/shells, garantizando una integración limpia con utilidades de asignación de usuarios como chsh. A lo largo de esta guía práctica, exploraremos la estructura de los shells admitidos en el sistema, la inclusión de scripts personalizados y el ciclo completo de desincorporación mediante remove-shell.

1. El fichero maestro /etc/shells y la auditoría de intérpretes válidos

Para que un proceso de inicio de sesión o un demonio como FTP/SSH autorice un intérprete de comandos a un usuario convencional, su binario debe figurar explícitamente en el archivo de configuración global. Podemos inspeccionar la nómina actual de shells homologados ejecutando cat /etc/shells.
Esta lista blanca restringe las opciones disponibles al invocar herramientas como chsh y previene que accesos no privilegiados apunten a ejecutables no auditados.

Visualización del contenido del archivo de shells autorizados

Con el fin de comprobar dónde residen los binarios estándares en nuestro árbol de directorios, recurrimos a which bash sh.
Al contrastar las rutas devueltas (/usr/bin/bash y /usr/bin/sh) contra el contenido de /etc/shells, ratificamos que los intérpretes base de nuestro entorno cuentan con la validación requerida.

Localización de los ejecutables de Bash y Sh

2. Incorporación de Zsh y registro automático con add-shell

Para ilustrar el proceso con un intérprete moderno de terceros, procedemos a aprovisionar el paquete zsh en la máquina mediante la paquetería del sistema.

Instalación del paquete zsh mediante apt-get

Una vez concluida la descarga, corresponde corroborar la disponibilidad del ejecutable resolviendo su ruta absoluta con which zsh.
Si la consulta no devuelve ningún resultado, se evidencia que la instalación aún no culminó o que el binario no se encuentra indexado en el PATH activo.

Búsqueda del binario zsh en el sistema

La sintaxis sudo add-shell $(which zsh) está diseñada para añadir automáticamente el binario localizado a la lista de shells válidos en /etc/shells.
No obstante, al no haberse obtenido una ruta en el paso previo, el comando se ejecuta sin parámetros obligatorios y el sistema despliega el mensaje de ayuda indicando el formato add-shell shellname.

Ejecución de add-shell sin argumentos válidos

Podemos certificar el estado del archivo mediante una búsqueda por expresión regular con grep -E 'zsh$' /etc/shells.
La ausencia de coincidencias en la salida confirma que el intérprete en cuestión todavía no ha sido incorporado al registro de shells permitidos.

Búsqueda de zsh en /etc/shells mediante grep

3. Despliegue de un script personalizado como shell restringido con add-shell

En ciertos escenarios de administración es necesario limitar la actividad del operador a un menú cerrado o una sesión predeterminada. Procedemos a crear un script mínimo de bienvenida alojado en /usr/local/bin/custom-menu.sh.

Creación del script personalizado con tee

Para posibilitar su ejecución directa como intérprete de login, asignamos los permisos necesarios a través de sudo chmod +x /usr/local/bin/custom-menu.sh.

Asignación de permisos de ejecución al script

Con el ejecutable listo, procedemos a elevar este script al estatus de shell oficial del sistema aplicando sudo add-shell /usr/local/bin/custom-menu.sh, lo que evita la edición manual propensa a errores de /etc/shells.

Registro del script en el listado de shells oficiales

Para comprobar que la operación fue exitosa, revisamos los registros finales del archivo ejecutando tail -n 3 /etc/shells.
La aparición de /usr/local/bin/custom-menu.sh al final del documento confirma que el sistema operativo reconoce formalmente nuestro script como un entorno de inicio de sesión legítimo.

Verificación de los últimos registros en /etc/shells

4. Validación práctica con cuentas de usuario y desincorporación limpia con remove-shell

Evaluamos la compatibilidad asignando este nuevo entorno a una cuenta de pruebas denominada testuser mediante la orden sudo id -u testuser >/dev/null 2>&1 || sudo useradd -m -s /usr/local/bin/custom-menu.sh testuser.

Alta del usuario de pruebas con el shell configurado

Para corroborar la correcta vinculación, consultamos la base de datos de usuarios ejecutando grep '^testuser:' /etc/passwd.
El séptimo campo del registro confirma que testuser tiene asignado /usr/local/bin/custom-menu.sh como su intérprete por defecto.

Inspección del registro del usuario en /etc/passwd

Finalizadas las pruebas de funcionamiento, retiramos la cuenta temporal y su directorio personal asociado con sudo userdel -r testuser 2>/dev/null || true.

Eliminación de la cuenta de pruebas y su directorio home

Una vez dado de baja el usuario, debemos revocar el estado del script en la lista de shells autorizados. Para ello, invocamos sudo remove-shell /usr/local/bin/custom-menu.sh, eliminando de forma segura su entrada en /etc/shells.

Revocación del shell con la utilidad remove-shell

A continuación, suprimimos el archivo físico residual del disco utilizando el comando sudo rm -f /usr/local/bin/custom-menu.sh.

Borrado definitivo del archivo de script en el disco

Por último, auditamos que no queden rastros huérfanos en la configuración mediante grep 'custom-menu.sh' /etc/shells || echo '등록 해제 완료'.
Al no hallarse la cadena, el sistema emite el mensaje de confirmación, corroborando que el entorno ha quedado perfectamente limpio y consistente.

Comprobación final del desregistro del script

Emplear herramientas estándar como add-shell y remove-shell en lugar de manipular /etc/shells con editores de texto previene bloqueos por concurrencia y errores sintácticos, garantizando una administración sólida y segura en servidores Linux empresariales.