Los usuarios que inician sesión en mi servidor Linux deben poder enviar ssh a una máquina remota específica con una cuenta predeterminada. La autenticación en la máquina remota utiliza la clave pública, por lo que en el servidor está disponible la clave privada correspondiente.
No quiero que los usuarios del servidor puedan leer la clave privada. Básicamente, el hecho de que tengan acceso al servidor les permite el derecho ssh, y eliminarlos del servidor también debería impedir la conexión a la máquina remota.
¿Cómo puedo permitir que los usuarios abran una conexión ssh sin darles acceso de lectura a la clave privada?
Mis pensamientos hasta ahora: obviamente, el ejecutable ssh debe poder leer la clave privada, por lo que debe ejecutarse bajo otro usuario en el servidor que tenga esos derechos. Una vez establecida la conexión ssh, puedo "reenviarla" al usuario para que pueda ingresar comandos e interactuar con la máquina remota.
- ¿Es este un buen enfoque?
- ¿Cómo debo implementar el reenvío?
- ¿Cómo puede el usuario iniciar la conexión (es decir, la ejecución del ssh por el usuario que tiene derechos de lectura en la clave)?
- ¿Hay una escapatoria de seguridad? - si los usuarios pueden ejecutar un ssh como otro usuario, ¿pueden hacer todo lo que otro usuario podría hacer (incluida la lectura de la clave privada)?
fuente
~/.ssh/authorized_keys
archivo?Respuestas:
Esa es una de las razones que
sudo
existen. Simplemente permita que sus usuarios ejecuten un solo comando con solo las opciones de línea de comandos autorizadas previamente y se resuelven las elusiones más obvias. p.ejse configura
sudo
para que todos los miembros del grupousers
puedan ejecutar el comando ssh como usuario some_uid sin ingresar su propia contraseña (o la de la cuenta some_uid) cuando ejecutan:Elimine la
NOPASSWD:
opción para obligar a los usuarios a ingresar sus propias contraseñas antes de iniciar sesión en el host remoto.Posiblemente configure un alias o script de envoltura como una conveniencia para sus usuarios porque
sudo
es bastante exigente con el uso de los argumentos correctos.fuente
Este parece ser un buen caso de uso para la autenticación basada en host. Este es un método de autenticación en el que SSH no utiliza la clave de un usuario individual en la máquina local (en este caso, su servidor) para autenticarse; en su lugar, usa la clave privada del host , la que está almacenada
/etc/ssh/
y que solo es legible porroot
.Para configurar esto, deberá crear un archivo con el nombre
.shosts
en la máquina remota, en el directorio de inicio del usuario con el que desea que las personas inicien sesión como (no en~/.ssh
). El archivo debe tener el contenido.donde
server-hostname
está el nombre de su servidor, y+
es un signo más literal que sirve como comodín que significa "cualquier usuario".Usted también necesita asegurarse de que la máquina remota puede verificar clave de host del servidor, lo que significa que la clave de host del servidor necesita ser enumerado en cualquiera
/etc/ssh/ssh_known_hosts
o~/.ssh/known_hosts
la máquina remota en esta. Si este no es el caso, puede configurarlo iniciando sesión en la máquina remota y ejecutandoUna vez que haya configurado estos pasos, puede eliminar la clave privada del servidor por completo, si no la necesita para nada más. (Y si lo hace, siempre puede configurarlo para que solo sea legible por
root
algo o algo así).También puede hacer fácilmente cosas como permitir o denegar el acceso de ciertos usuarios a la máquina remota. Ver las páginas de manual de
ssh
yhosts.equiv
para más detalles.Un problema con esta configuración es que los usuarios que inician sesión en la máquina remota pueden modificar
.shosts
. No hay nada que puedan hacer que les permita iniciar sesión en la máquina remota como un usuario diferente, pero podrían cortar el acceso propio o ajeno a la máquina remota. Si esto es una preocupación, es posible que.shosts
solo puedas escribirroot
o algo así; no estoy seguro de si esto funciona, pero puedes probarlo y ver. (Otros métodos como el que tienesudo
son susceptibles al mismo riesgo, ya que un usuario siempre podría eliminarlo~/.ssh/authorized_keys
).fuente
sudo
embargo, la opción podría ser mejor para un entorno cerrado ...