Безопасная передача учетных данных программе через обычный текстовый файл или командную строку - PullRequest
0 голосов
/ 03 апреля 2012

У меня есть программа (не написанная мной), которую я хотел бы использовать. Он аутентифицируется в онлайн-сервисе, используя имя пользователя и пароль, которые я хотел бы сохранить в тайне. Информация аутентификации может быть передана в программу двумя способами: либо непосредственно в качестве аргументов командной строки, либо через открытый текстовый файл конфигурации, ни один из которых не выглядит особенно безопасным.

Я хотел бы написать сценарий Python для управления запуском этой программы и держать свои учетные данные подальше от посторонних глаз других пользователей машины. Я работаю в среде Linux. Моя проблема с подходом командной строки заключается в том, что командная строка, используемая для запуска программы, видна другим пользователям через файловую систему /proc. Аналогичным образом, файл конфигурации открытого текста может быть уязвим для чтения кем-то с соответствующими разрешениями, например, системным администратором.

У кого-нибудь есть какие-нибудь предложения относительно хорошего способа сделать это? Если бы у меня был какой-то способ скрыть аргументы, используемые в командной строке от остальной системы, или способ создать файл конфигурации, который можно было бы прочитать только один раз (концептуально, если бы я мог передать данные конфигурации из сценария в программа), я бы избежал ситуации, когда мои учетные данные могут быть прочитаны кем-то другим в системе.

Ответы [ 2 ]

0 голосов
/ 03 апреля 2012

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

0 голосов
/ 03 апреля 2012

Сложная проблема.Если у вас есть доступ к исходному коду рассматриваемой программы, вы можете изменить argv [0] после запуска.На большинстве разновидностей * nix это будет работать.

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

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

Конечно, лучшее решение - изменить рассматриваемую программу так, чтобы она считывала пароль из stdin (ноПохоже, ты уже знал это)

...