Si se desea que un usuario pueda entrar en un sistema por SSH y que tenga una shell limitada, lShell es la solución.
Para un caso particular mio, requería que mi equipo de desarrollo tuviera acceso a mi servidor de base de datos de prueba en un servidor local.
La base de datos es MySQL, pero era necesario que la conexión fuese por SSH, para dotar de seguridad y pudiera tener el puerto 3306 cerrado y sólo aquellos que tuviesen el acceso ya sea vía contraseña o bien por llave pública.
De esta manera, cuando un desarrollador dejaba el proyecto, se quitaba su usuario o bien se daba de baja su llave pública y ya no tendría acceso al servidor de base de datos.
El problema se generaba cuando el usuario externo generaba un puente SSH en background al servidor de base de datos, bien podría modificar el comando para establecer una conexión SSH directa.
Esto significaba que podría tener acceso al servidor, al home del usuario, y a alterar archivos, que, aunque era usuario limitado, no me agradaba la idea de permitir que se tuviera oportunidad de tener una consola abierta con conexión SSH.
Así que la solución es utiliza lshell, que es un entorno shell escrito en Python que limita al usuario para escribir solo los comandos que indicamos, así como evita que puedan salirse de la carpeta inicial.
Instalar lShell
Para Debian y derivados (Ubuntu, MInt…)
apt-get install lshell
Para RHEL (Fedora, Red hat, CentOS)
yum install lshell
O bien
dnf install lshell
Configuración
El archivo de configuración está en /etc/lshell.conf y lo siguiente es un ejemplo de archivo de configuración.
# CONFIGURATION START
[global]
logpath : /var/log/lshell/
loglevel : 2
[default]
allowed : ['ls','pwd']
forbidden : [';', '&', '|']
warning_counter : 2
timer : 0
path : ['/etc', '/usr']
env_path : ':/sbin:/usr/foo'
scp : 1 # or 0
sftp : 1 # or 0
overssh : ['rsync','ls']
aliases : {'ls':'ls --color=auto','ll':'ls -l'}
[grp:users]
warning_counter : 5
overssh : - ['ls']
[foo]
allowed : 'all' - ['su']
path : ['/var', '/usr'] - ['/usr/local']
home_path : '/home/users'
[bar]
allowed : + ['ping'] - ['ls']
path : - ['/usr/local']
strict : 1
scpforce : '/home/bar/uploads/'
# CONFIGURATION END
Como podemos observar, el usuario foo tiene acceso a /var, a /usr, pero no a /usr/local.
Además, tiene acceso a todos los comandos de su ruta, excepto “su”.
Para el usuario bar, tiene acceso a todo (con la restricción de su usario) excepto a /usr/local.
Además tiene acceso a los comandos más “ping”, excepto “ls”.
Para todos los demás usuarios, tienen acceso solo a “ls” y “pwd”.
Modo de uso
Si queremos accesar al shell lShell desde un usuario ya iniciado en la shell actual, sólo debemos escribir
lshell
Y con ello nos cargará el shell con sus restricciones.
Para hacer que un usuario siempre cargue lShell por default, se realiza de la siguiente manera.
chsh -s /usr/bin/lshell elUsuario
Más información aquí.
0 Comentarios