Permisos en clave privada en la carpeta .ssh?

381

Cambié mis permisos en mi .sshcarpeta y ahora cuando uso un software que usa mi clave privada, tengo que escribir mi contraseña cada vez. ¿Cuáles deberían ser mis permisos en mi id_rsaarchivo para no tener que escribir una contraseña cada vez que uso una aplicación que la usa?

Actualmente mis permisos están configurados en:

-rw-------@ 1 Jody  staff   114 Nov  4 23:29 config
-rw-------  1 Jody  staff  1743 Oct 21  2009 id_rsa
-rw-------@ 1 Jody  staff   397 Oct 21  2009 id_rsa.pub 
-rw-------@ 1 Jody  staff  3855 Sep 13 22:35 known_hosts
JakeGould
fuente

Respuestas:

640

Por lo general, desea que los permisos sean:

  • .ssh directorio: 700 (drwx------)
  • clave pública ( .pubarchivo):644 (-rw-r--r--)
  • clave privada ( id_rsa):600 (-rw-------)
  • Por último, el directorio principal no debe poder escribir su directorio personal (como máximo 755 (drwxr-xr-x)).

Supongo que quiere decir que debe ingresar su contraseña de sistema / usuario cada vez, y que anteriormente no tenía que hacerlo. La respuesta de cdhowie es suponer que establece una contraseña / frase de contraseña al generar sus claves, y si lo hizo, como él dice, tendrá que ingresar su contraseña cada vez que use un agente ssh.

Fabs
fuente
13
En otras partes encontré que si usaba el archivo autorizado_claves, debería cambiarse a 640, es decir, -rw-r -----.
AnneTheAgile
55
¿Dónde puedo encontrar esta información en las páginas man?
Sonique
132
He vuelto a esta publicación unas 30 veces. No puedo creer que no pueda recordarlo.
JREAM
77
Lo único importante es que nada en .ssh es grabable para nadie más y ninguna de las claves secretas es legible para nadie más.
Markus Kuhn
55
El permiso de ejecución @Cerin en un directorio otorga la capacidad de enumerar archivos / directorios secundarios inmediatos de ese directorio, los archivos dentro de la carpeta no "heredan" el bit de ejecución de su carpeta principal.
Thomas
87

Estaba luchando con esto para siempre y finalmente descubrí lo que se necesitaba. Reemplace en $USERtodas partes con el nombre de usuario SSH en el que desea iniciar sesión en el servidor. Si está intentando iniciar sesión ya rootque necesitaría usar /root/.sshetc., en lugar de /home/root/.sshlo que es para usuarios no root.

  • El directorio de inicio en el servidor no debe ser editable por otros: chmod go-w /home/$USER
  • La carpeta SSH en el servidor necesita 700 permisos: chmod 700 /home/$USER/.ssh
  • El archivo Authorized_keys necesita 644 permisos: chmod 644 /home/$USER/.ssh/authorized_keys
  • Asegúrese de que userposee los archivos / carpetas y no root: chown user:user authorized_keysychown user:user /home/$USER/.ssh
  • Ponga la clave pública generada (desde ssh-keygen) en el authorized_keysarchivo del usuario en el servidor
  • Asegúrese de que el directorio de inicio del usuario esté configurado en lo que espera que sea y que contenga la .sshcarpeta correcta que ha estado modificando. Si no, utilícelo usermod -d /home/$USER $USERpara solucionar el problema.
  • Finalmente, reinicie ssh: service ssh restart
  • Luego, asegúrese de que el cliente tenga la clave pública y los archivos de clave privada en la .sshcarpeta del usuario local e inicie sesión:ssh [email protected]
Alex W
fuente
Con respecto a su primer párrafo, puedo ssh con claves públicas / privadas con un usuario en mi cuadro de Linux local (por ejemplo abc), diferente del usuario en el servidor remoto (por ejemplo [email protected]). Solo tenía que asegurarme de que el usuario local poseía los archivos .ssh locales (por ejemplo abc:abc, no root:abc) `
Michael
1
Gracias por poner todos los pasos y comandos para los novatos, Alex. La suya es una de las respuestas más útiles aquí.
Nav
66
+1. "El archivo Authorized_keys necesita 644 permisos" <= ¡eso fue crucial!
Le Quoc Viet
Si está dando el modo .ssh directorio 700 , entonces no tiene sentido dar r-- a group y otros, porque solo usted puede "pasar" .ssh entonces (suponiendo que no existan enlaces duros para estos archivos). Lo mismo para la respuesta aceptada. El valor predeterminado 755 es suficiente.
user3125367
400 para los archivos pem son suficientes en mi experiencia.
AL
37

También asegúrese de que su directorio personal no sea escribible por otros usuarios.

chmod g-w,o-w ~

Felipe Alvarez
fuente
8
Para su información, este comando asume que ha iniciado sesión como usuario y no root
Alex W
6

Los permisos no deberían tener nada que ver con esto. Su clave privada está encriptada con la contraseña, por lo que debe ingresarla para que la clave privada se desencripte y pueda usarse.

Puede considerar ejecutar un agente ssh, que puede almacenar en caché las claves descifradas y las proporcionará a las aplicaciones que las necesiten.

cdhowie
fuente
Gracias por la información adicional sobre el agente ssh. Parece que hay uno integrado en Leopard, así que creo que lo haré. Tengo un poco de problema con eso, pero haré otra pregunta.
55
No subestimes los permisos. Definitivamente todavía entran en juego.
Alex W
@AlexW Entran en juego con otros aspectos de ssh, pero no con el que se les preguntó en la pregunta.
cdhowie
Si no tiene una contraseña en las claves privadas (una combinación de comandos remotos automáticos llamados scripts), no lo ayudará. Los permisos son necesarios aquí.
nerdoc
"Tengo que escribir mi contraseña cada vez. ¿Cuáles deberían ser mis permisos en mi archivo id_rsa para no tener que escribir una contraseña cada vez que uso una aplicación que la usa?"
Craig Hicks
4

Felipe tiene razón: el directorio que contiene su directorio .ssh no debe poder escribirse por grupo u otro. Por chmod go-w ~lo tanto, es el siguiente paso lógico que debe probar si aún se le solicita una contraseña cuando ssh'ing después de ejecutar ssh-keygen -t rsa; cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys, suponiendo que no asigne una frase de contraseña en el comando ssh-keygen, y su directorio .ssh está en su directorio de inicio.

mikentalk
fuente