Почему chown 600 id_rsa исправляет проблему с разрешениями?

Почему chown 600 id_rsa исправляет проблему с разрешениями?

Недавно я импортировал свои ключи на новую машину (Mac) и забыл изменить разрешения на 600. При этом я случайно написал chownвместо chmod. Как ни странно, это исправило проблему с разрешениями, как можно увидеть здесь:

% 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$

Почему это так?

решение1

СогласноOpenSSHисходный код, sshпроверяет разрешения на файл закрытого ключа только в том случае, если владельцем файла является пользователь, запустивший ssh. Если файл принадлежит другому пользователю, то ssh позволит любому, кто может прочитать файл, использовать его.

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

Это, кажется, не прописано встраница руководства.

Исходный код содержит следующий комментарий, указывающий на то, что такое поведение является преднамеренным:

/*
 * 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.
 */

С практической точки зрения проверка разрешений на ключевой файл, принадлежащий другому пользователю, не улучшит безопасность. Если вы можете прочитать файл, вы можете обойти проверку разрешений, сделав копию файла и ограничив разрешения на копии.

решение2

Команда chmod означает «изменить режим» и позволяет изменять разрешения файлов и папок, также известные как «режимы» в UNIX. Команда chown означает «изменить владельца» и позволяет изменять владельца указанного файла или папки, которым может быть пользователь и группа.

Связанный контент