У меня есть сценарий Bash, который автоматически проходит проверку подлинности с сервисом с помощью моего имени пользователя и пароля. Учетные данные в настоящее время хранятся как простой текст в рамках сценария.
Какие меры предосторожности я должен принять, чтобы наиболее надежно сохранить эти учетные данные, все еще предоставляя доступ сценария?
Точки разъяснения:
Какая услуга? У некоторых сервисов есть другие методы аутентификации, например Ключи SSH для SSH в сочетании с агентом SSH.
Я бы сохранил пароль отдельно от сценария и удостоверился, что для всех компонентов пути установлены правильные разрешения. Например, убедитесь, что в пути / путь / к / файлу
, /
, / путь
и / путь / к
принадлежат пользователем, которому вы доверяете ( root
), и что они не могут быть записаны кем-то, кому не разрешено видеть ваши файлы. Наконец, рекомендуемые разрешения для файла
- 600 или 400.
Этот файл
может выглядеть так:
PASSWORD='something that you cannot remember'
В сценарии используйте следующий код для импорта переменной:
. /path/to/file
Что касается вашего сценария, убедитесь, что он не содержит дыр, которые могут позволить злоумышленникам выполнить код в контексте сценария (например, неконтролируемая среда, в которой может быть установлен произвольный набор переменных $ PATH
, либо недопустимое использование другие файлы (например, поиск файла, доступного для записи всем).
Что касается фактической защиты вашего пароля, вы не можете. Он должен быть каким-то образом доступен для другой службы. В качестве альтернативы вы можете зашифровать файл / скрипт содержащие пароль с использованием openssl
или gpg
, поэтому вам необходимо ввести пароль до разблокировки учетных данных. Это особенно полезно, если пароль вашей службы трудно запомнить.
Вместо жесткого кодирования пароля в файле сохраните пароль в отдельном файле и защитите файл ( chmod 700
или chmod 500
), поэтому что только авторизованные пользователи могут получить к нему доступ.
Получите пароль с помощью cat /dir/to/file/with/.password
вместо чтения файла и сохранения его содержимого в переменной.
Я знаю, что это старый вопрос, но я столкнулся с аналогичной проблемой и использовал связку ключей Ubuntu для ее решения.
Вот решение на ubuntu 18.04LTS
Откройте терминал
Запишите набор ключей {{service}} {{username}}
например, если вы используете это для регистрации школьного пароля:
keyring set school mohamed
Он будет регистрировать вас для пароля, введите пароль. Теперь введенный вами пароль сохраняется в связке ключей Ubuntu.
Чтобы получить этот пароль, напишите в терминале:
keyring get school mohamed
, чтобы использовать его в контексте сценария:
password=$(keyring get school mohamed)
Теперь пароль содержит пароль, который вы ранее ввели.