¿Por qué chown 600 id_rsa soluciona el problema de permisos?

¿Por qué chown 600 id_rsa soluciona el problema de permisos?

Recientemente importé mis claves a una nueva máquina (Mac) y olvidé modificar los permisos a 600. Al hacerlo, accidentalmente escribí chownen lugar de chmod. Curiosamente, esto solucionó el problema de permisos como se puede ver aquí:

% git pull origin develop
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/Users/m/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/Users/m/.ssh/id_rsa": bad permissions
git@<redacted>: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
%
% sudo chown 600 ~/.ssh/id_rsa
Password:
%
% ls -l ~/.ssh/id_rsa
-rw-r--r--@ 1 600  staff  1679 Mar 25 15:14 /Users/m/.ssh/id_rsa
%
% git pull origin develop
From <redacted>
 * branch            develop    -> FETCH_HEAD
Already up to date.
%
% ssh <redacted>
The authenticity of host '<redacted> (<redacted>)' can't be established.
ECDSA key fingerprint is <redacted>.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '<redacted>' (ECDSA) to the list of known hosts.
Warning: your password will expire in 5 days
Last login: Fri Jul 27 19:51:32 2018 from <redacted>
-bash-4.2$

¿Por qué es este el caso?

Respuesta1

De acuerdo con laAbiertoSSHEl código fuente, sshsolo verifica los permisos en el archivo de clave privada si el propietario del archivo es el usuario que ejecuta ssh. Si el archivo pertenece a otro usuario, ssh permitirá que cualquiera que pueda leer el archivo lo utilice.

if ((st.st_uid == getuid()) && (st.st_mode & 077) != 0) {
     ^^^^^^^^^^^^^^^^^^^--owner ^^^^^^^^^^^^^^^^--permissions
    error("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
    error("@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @");
    error("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
    ...

Esto no parece estar detallado en elpágina de manual.

El código fuente contiene este comentario que indica que el comportamiento es intencionado:

/*
 * if a key owned by the user is accessed, then we check the
 * permissions of the file. if the key owned by a different user,
 * then we don't care.
 */

En la práctica, comprobar los permisos de un archivo clave que pertenece a otro usuario no mejoraría la seguridad. Si puede leer el archivo, puede solucionar la verificación de permisos haciendo una copia del archivo y restringiendo los permisos sobre la copia.

Respuesta2

El comando chmod significa "cambiar modo" y permite cambiar los permisos de archivos y carpetas, también conocidos como "modos" en UNIX. El comando chown significa "cambiar propietario" y permite cambiar el propietario de un archivo o carpeta determinado, que puede ser un usuario y un grupo.

información relacionada