Contamos con servidor bastión. Deberíamos tener algunos usuarios que necesiten SSH desde local a través de bastión a C, usando proxyCammand y clave privada.
Quiero crear usuarios y grupos que deberían tener acceso SÓLO a ssh desde el host de Bastion (sucede a través de proxyCommand). Tampoco necesitan leer archivos.
¿Cómo puedo hacer eso? ¿Hay alguna manera?
La otra alternativa, si lo anterior no es posible, es tener solo acceso de lectura para los archivos permitidos, excepto los archivos restringidos (predeterminados por el sistema operativo) que tienen acceso de lectura solo para sus grupos.
Respuesta1
Así es como permitir que un usuario determinado solo use algunos comandos específicos:
Cambie el shell de usuario a bash restringido:
chsh -s /bin/rbash <username>
Cree un directorio bin en el directorio de inicio del usuario:
sudo mkdir /home/<username>/bin sudo chmod 755 /home/<username>/bin
Cambie la RUTA predeterminada del usuario a este directorio bin:
echo "PATH=$HOME/bin" >> /home/<username>/.bashrc echo "export PATH >> /home/<username>/.bashrc
Cree enlaces simbólicos para los comandos que el usuario requiere:
sudo ln -s /bin/<command> /home/<username>/bin/
Restrinja el cambio del usuario
~/.bashrc
haciéndolo inmutable:chattr +i /home/<username>/.bashrc
De esta manera, solo crea enlaces simbólicos a los comandos que desea permitir.
Para hacer lo mismo para más de un usuario, puede crear un script bash que contenga estos comandos y que tenga el nombre del usuario como parámetro.
EDITAR: En CentOS, es posible que rbash no se implemente directamente y que sea necesario crear un enlace simbólico, y de manera similar en algunas otras versiones de GNU/Linux como Red Hat:
# cd /bin
# ln -s bash rbash
Editar2:
Si rbash es demasiado restrictivo, entonces el bash normal podría funcionar también, pero esto supone más trabajo: deberá impedir la ejecución de casi todos los comandos /bin
usando setfacl -m u:user1:r /bin/su
for su
y otros comandos que no desee utilizar, para que se vuelvan leídos. sólo para el usuario y especialmente no son ejecutables.
Veresta respuesta para más detalles.
Respuesta2
Tráfico de red
Puedes usariptables
para limitar el tráfico de la red:
# Allow port 22 traffic to a specific IP/hostname for a specific user
iptables -A OUTPUT -p tcp --dport 22 -d allowed_host -m owner --uid-owner username -j ACCEPT
# Block all other outgoing port 22 (SSH) traffic
iptables -A OUTPUT -p tcp --dport 22 -d 0.0.0.0/0 -j REJECT
Acceso al sistema de archivos
Para restringir el acceso al sistema de archivos puede utilizarPermisos del sistema de archivos
Tampoco necesitan leer archivos.
Para poder iniciar sesión necesitan poder leer algunos archivos:
- El directorio de inicio de los usuarios.
- El ejecutable y todas las bibliotecas del shell de los usuarios.
Para no permitir el acceso de lectura a un usuario normal, puede eliminar el indicador de lectura mundial de un archivo propiedad de root, o eliminar el indicador de lectura mundial y ejecutable de un directorio propiedad de root:
# chmod o-r secret-file
# ls -l secret-file
-rw-r----- 1 root root 0 Mar 27 13:23 secret-file
# chmod o-rx secret-dir/
# ls -ld secret-dir/
drwxr-x--- 2 root root 64 Mar 27 13:24 secret-dir/