2010-09-06 2 views
0

У меня есть приложение python, предназначенное для работы в качестве службы в Linux, и меня попросили установить его на коробке Windows XP в офисе, где нет машин Linux (для меня это делает его странным и запутанным потому что у меня практически нет опыта разработки для Windows).Как безопасно хранить учетные данные базы данных для приложения Windows?

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

Как я могу достичь эквивалентный уровень безопасности с помощью аналогичных или разных средств на компьютере под управлением Windows XP? То есть, как я могу запретить тем, кто имеет доступ к компьютеру или диску, изменяющему программу, или чтению учетных данных?

Немного фона: окно окна хоста - это рабочая станция, используемая каждый день пользователями с неадминистративными привилегиями. Защищенные активы - это персональные данные, которые так же чувствительны, как, например, школьный отчет. Приложение предназначено для использования примерно 10 людьми, которые аутентифицируют приложение с отдельными паролями (хранятся в соле и хешируются в базе данных).

Существует очень похожий вопрос, который получил ответ:

on Windows you would store the credentials in the registry in a location protected by an ACL

Однако он не соприкасался с аспектом защиты программных файлов, и в дальнейшем он, кажется, предположить, более высокий уровень работы с Windows, чем мне нравится в настоящее время :) Я понятия не имею, как защитить разделы реестра с помощью ACL, а также как я мог бы получить доступ к защищенным ключам из моей программы. Было бы очень полезно получить простые инструкции для разработчика в незнакомой среде!

+0

Я считаю, что этот вопрос будет более уместным для http://SuperUser.com, поскольку то, что вам нужно сделать, не связано с кодированием. –

+0

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

+1

На самом деле, я считаю, что самый простой способ - просто сохранить данные в файле под домашним каталогом для пользователя (для этого приложение будет нуждаться в собственном пользователе в Windows, чтобы это получилось хорошо). Btw Извините, но у меня недостаточно голосов, чтобы проголосовать, чтобы перенести его на http://SuperUser.com –

ответ

2

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

Я предполагаю, что у вас есть приложение, которое:

  • хранит конфиденциальные данные в базе данных, хранящихся в СУБД, установленных на рабочей станции
  • установлен на общей рабочей станции
  • каждый пользователь имеет свой собственный вход (не-администратор)
  • позволяет различным пользователям регистрироваться и переписываться со своими данными
  • пользователь запускает приложение, которое подключается к услуге
  • сервис соединяется с базой данных, предоставляет данные пользователей
  • службы работает под своим счетом пользователя

Если это правильно, то вы не должны иметь много вопроса.

Служба может запускаться под любой учетной записью, но было бы достаточно легко запустить ее под одним из стандартов (Local Machine или Network Service). Настройте базу данных так, чтобы только эта учетная запись могла получить к ней доступ. На сервере Sql я предоставляю только учетную запись пользователя (и администраторов в поле) для входа и доступа к базе данных.

Это единственная защита, в которой вы нуждаетесь, если пользователи не являются администраторами. Теперь, когда интерфейс подключается к службе, пользователь может указать имя пользователя/пароль, и служба может аутентифицироваться против соленых и хешированных паролей, хранящихся в базе данных. Все это безопасно до тех пор, пока 1) у каждого пользователя есть свой логин. 2) связь защищена (с использованием именованных каналов или SSL) и 3) никакие вирусы или кейлогеры не работают под учетными данными администратора.


Вы можете настроить службу, как на какой счет работает под управлением запуском services.msc (или правой кнопкой мыши на MyComputer и выбрав Управление или нажав на услуги в меню инструментов администратора панели управления или, возможно, в количество разных способов).

Принесите список услуг, щелкните правой кнопкой мыши свое приложение и нажмите Свойства. Оттуда сделайте это так: alt text

+0

Все ваши предположения корректны, пока «служба не запускается под собственной учетной записью пользователя», и только потом, потому что я понятия не имел, могут ли службы запускаться как конкретные пользователи. Вы знаете, как я могу указать, с какого пользователя запускается служба? Действительно полезный ответ, спасибо! –

+0

Да, вы можете легко настроить службу Windows для запуска под любой учетной записью пользователя. К этому добавилось мгновение. Кажется, вы не можете найти документы в формате friggen в любом месте в Интернете! – Will

Смежные вопросы