Що є найменш небезпечним способом зберігання пароля, який використовується сценарієм?


13

У мене є сценарій Bash, який автоматично підтверджує автентифікацію послуги, використовуючи моє ім’я користувача та пароль. Наразі облікові дані зберігаються як звичайний текст у сценарії.

Які заходи безпеки слід вжити, щоб найбільш безпечно зберігати ці облікові дані, все ж дозволяючи доступ до сценарію?

Точки уточнення:

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

2
можливо, не зберігати частину облікових даних для пароля?
Thomas Ward

Не вдалося б отримати доступ до GNOME Keyring чи щось подібне?
Firefeather

Можливо, якби ви могли зберегти його як криптографічний хеш (наприклад, SHA-1), це було б непогано.
Анонім

ROT13 затьмарив би його, але НЕ захистив би його.
Анонім

@Anonymous Якщо пароль зберігається як криптографічний хеш, як ви рекомендуєте його отримати?
ændrük

Відповіді:


8

Що за послуга? Деякі служби мають інші методи аутентифікації, наприклад, SSH-ключі для SSH спільно з агентом SSH.

Я зберігаю пароль окремо від сценарію і переконуюсь, що всі компоненти контуру мають правильні дозволи. Наприклад, переконайтеся , що на шляху /path/to/file, /, /pathі /path/toналежать користувачеві , якому ви довіряєте ( root) , і що вони не доступні для запису ким - то , хто не має права бачити файли. Нарешті, рекомендовані дозволи для file600 чи 400.

Це fileмогло б виглядати приблизно так:

PASSWORD='something that you cannot remember'

У своєму сценарії використовуйте наведений нижче код для імпорту змінної:

. /path/to/file

Що стосується вашого сценарію, переконайтеся, що він не містить отворів, які можуть дозволити зловмисникам виконувати код у контексті сценарію (наприклад, неконтрольоване середовище, яке може мати набір довільних $PATHзмінних або недійсне використання інших файлів (наприклад, пошук світового файлу, що записується) .

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


14

Замість жорсткого кодування пароля у файлі збережіть його в окремому файлі та захистіть файл ( chmod 700або chmod 500), щоб доступ до нього мали лише авторизовані користувачі.

Завантажте пароль, cat /dir/to/file/with/.passwordзамість того, щоб прочитати файл і зберегти його вміст у змінній.


Деякі інструменти навіть мають можливість читати пароль з файлу безпосередньо саме з цієї причини, як-от --passphrase-fileопція gpg .

2
... і зробити це .dotfile (/dir/to/file/with/.password)
KNB

2
chmod 400для файлів (лише для читання). Звичайно, ви повинні захистити провідні каталоги (700 або 500, а то й 100, якщо ви параноїки). Зауважте, що 400 (або 500 для каталогів) достатньо, інші режими (100) можуть розглядатися як безпека через невідомість , як і приховування файлу, поставивши крапку перед іменем.
Лекенштейн

1

Я знаю, що це старе питання, але я зіткнувся з подібною проблемою, і я використав брелок Ubuntu, щоб вирішити його. Ось рішення щодо ubuntu 18.04LTS Відкрийте термінал Запишіть, keyring set {{service}} {{username}} наприклад, якщо ви використовуєте це для реєстрації шкільних паролів:

keyring set school mohamed

Він введе вам пароль для введення пароля. Тепер пароль, який ви ввели, зберігається в брелоку Ubuntu.

Щоб отримати цей пароль, напишіть у термінал:

keyring get school mohamed

використовувати це в контексті сценарію:

password=$(keyring get school mohamed)

Тепер пароль містить контакт, який ви раніше ввели.

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