Дозволи на закритий ключ у папці .ssh?


381

Я змінив свої дозволи у своїй .sshпапці, і тепер, коли я використовую програмне забезпечення, яке використовує мій приватний ключ, я повинен щоразу вводити свій пароль. Які мають бути мої дозволи на мій id_rsaфайл, щоб не вводити пароль щоразу, коли я використовую додаток, який його використовує?

Наразі мої дозволи встановлено:

-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

Відповіді:


640

Зазвичай ви хочете, щоб дозволи були:

  • .ssh каталог: 700 (drwx------)
  • відкритий ключ ( .pubфайл):644 (-rw-r--r--)
  • приватний ключ ( id_rsa):600 (-rw-------)
  • нарешті, ваш домашній каталог не повинен записуватись групою чи іншими особами (максимум 755 (drwxr-xr-x)).

Я припускаю, що ви маєте на увазі, що вам потрібно вводити пароль системи / користувача кожного разу, і раніше цього вам не довелося. Відповідь cdhowie передбачає, що ви встановлюєте пароль / парольну фразу під час генерації ваших ключів, і якщо ви зробили це, як він каже, вам доведеться вводити свій пароль кожен раз, якщо ви не використовуєте ssh-агент.


13
В іншому місці я виявив, що якщо використовувати файл санкціонованих_кісів, він повинен бути chmod'd до 640, тобто -rw-r -----.
AnneTheAgile

5
Де я можу знайти цю інформацію на сторінках man?
Sonique

131
Я вже близько 30 разів повертаюся до цієї публікації. Я не можу повірити, що не можу це запам'ятати.
JREAM

7
Важливо лише те, що нічого в .ssh не можна записувати нікому іншому, і жоден із секретних ключів не читається нікому іншим.
Маркус Кун

5
Дозвіл на виконання @Cerin в каталозі надає можливість перелічити безпосередні дочірні файли / режими цього каталогу, а файли всередині папки не «успадковують» біт виконання їх батьківської папки.
Томас

87

Я боровся з цим назавжди і нарешті зрозумів, що потрібно. Повсюдно замініть $USERім'я користувача SSH, на яке потрібно увійти на сервері. Якщо ви намагаєтесь увійти в систему, як rootвам потрібно було б використовувати /root/.sshі т.д., замість того /home/root/.ssh, як це робиться для не-root користувачів.

  • Домашній каталог на сервері не повинен бути доступним для запису іншими: chmod go-w /home/$USER
  • Папка SSH на сервері потребує 700 дозволів: chmod 700 /home/$USER/.ssh
  • Файлу Authorized_keys потрібно 644 дозволи: chmod 644 /home/$USER/.ssh/authorized_keys
  • Переконайтеся, що userналежать файли / папки, а не root: chown user:user authorized_keysіchown user:user /home/$USER/.ssh
  • Помістіть створений відкритий ключ (від ssh-keygen) у authorized_keysфайл користувача на сервері
  • Переконайтеся, що в домашньому каталозі користувача встановлено те, що ви очікуєте від нього, і що він містить правильну .sshпапку, яку ви змінювали. Якщо ні, використовуйте usermod -d /home/$USER $USERдля виправлення проблеми
  • Нарешті, перезапустіть ssh: service ssh restart
  • Потім переконайтеся, що у клієнта є файли відкритого ключа та приватного ключа у .sshпапці локального користувача та вхід:ssh user@host.com

Що стосується вашого першого абзацу, я можу відкрити приватні / приватні ключі з користувачем у моєму локальному вікні linux (наприклад abc), відмінному від користувача на віддаленому сервері (наприклад def@123.456.789). Я просто повинен був переконатися, що місцевий користувач має місцеві файли .ssh (наприклад abc:abc, ні root:abc) `
Michael

1
Дякуємо, що ви поставили всі кроки та команди для новачків, Алекс. Ваш - тут одна з найкорисніших відповідей.
Nav

6
+1. "Файлу Authorized_keys потрібно 644 дозволи" <= це було важливо!
Le Quoc Viet

Якщо ви надаєте режим .ssh каталогу 700 , тоді немає сенсу давати r-- групі та іншим, тому що тільки ви можете "пройти" .ssh тоді (якщо припустимо, що для цих файлів немає жорстких посилань). Те саме для прийнятої відповіді. За замовчуванням 755 достатньо.
user3125367

На мій досвід достатньо 400 файлів pem.
AT

37

Також переконайтесь, що ваш домашній каталог не можна писати іншими користувачами.

chmod g-w,o-w ~


8
FYI, ця команда передбачає, що ви зареєстровані як користувач, а не root
Alex W

6

Дозволи не повинні мати нічого спільного з цим. Ваш приватний ключ зашифрований паролем, тому вам потрібно ввести його, щоб приватний ключ був розшифрований та застосований.

Ви можете розглянути запуск агента ssh, який може кешувати розшифровані ключі та надавати їх додаткам, які їм потрібні.


Дякуємо за додаткову інформацію про агента ssh. Схоже, є одна вбудована в Leopard, тож я думаю, що я це зроблю. Виникли проблеми з цим, але я поставлю ще одне питання.

5
Не варто недооцінювати дозволи. Вони, безумовно, все-таки вступають у гру.
Alex W

@AlexW Вони вступають у гру з іншими аспектами ssh, але не з тим, про кого йдеться у запитанні.
cdhowie

Якщо у вас немає пароля на приватних ключах (химер автоматичних віддалених скриптів, що називаються), це вам не допоможе. Тут потрібні дозволи.
nerdoc

"Я маю щоразу вводити свій пароль. Які мають бути мої дозволи у моєму файлі id_rsa, щоб не вводити пароль щоразу, коли я використовую додаток, який його використовує?"
Крейг Хікс

4

Felipe правильний - каталог, що містить ваш каталог .ssh, не повинен писати групу чи інше. Таким чином chmod go-w ~, наступна логічна річ, яку слід спробувати, якщо вам все-таки запропоновано ввести пароль під час виконання ssh'ing після запуску ssh-keygen -t rsa; cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys, припускаючи, що ви не присвоюєте парольну фразу в команді ssh-keygen, а ваш каталог .ssh знаходиться у вашому домашньому каталозі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.