Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Реализация системы безопасности в ПО на основе AD (http://forum.oszone.net/showthread.php?t=211980)

pypyrin 26-07-2011 15:21 1720266

Реализация системы безопасности в ПО на основе AD
 
Здравствуйте, коллеги!
Вот стоит такая задача: в собственном ПО предусмотреть защиту некоторых функций на основе безопасности Windows (в частном случае используем Active Directory)

Поясню. Есть комп-р включенный в домен с AD. Комп-р сугубо уникальный, на котором реализован автологон польз-ля USER (AD пользователь) и под этим польз-лем запускается некоторая самописаная программа. В программе реализована функция мониторинга некоторого процесса и изменения параметров работы некоторой установки. Нужно сделать так, чтобы при нажатии кнопки "Изменить параметр" программа запросила имя и пароль польз-ля (из AD или локального Windows) и если ему разрешено, то дает окно изменения. Если нет - то пинает его и продолжает работу в режиме мониторинга. Сейчас сделано так, что индикатором разрешенности изменения параметров установки является наличие польз-ля в некоторой группе польз-лей из AD. Программисты реализовали проверку так: при воде имени и пароля программа пытается сделать логон с такими аттрибутами, и если удачно, то читает список групп залогиневшегося поль-ля, и если там есть "нужная группа", то дает изменить параметры установки.

Но вот проблема. В связи с необходимостью внедрить систему безопасности, на этом комп-ре применены групповые политики, разрешающие логон только польз-лю USER и админам. И теперь, при вводе имени и пароля при попытке сменить параметр установки программка отпинывает всех, даже если и пользователь все ввел правильно. Разрешить этим "продвинутым" польз-лям логон нельзя: они автоматичски получают возможность входить на этом комп-ре с консоли под своими учетками, а должно быть токо от имени польз-ля USER.

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

Delirium 26-07-2011 16:28 1720331

не совсем уверен, но что если попробовать запускать программу через планировщик от имени требуемого пользователя? В таком случае не надо будет делать дополнительную проверку на принадлежность пользователя к определенной группе?
Цитата:

Цитата pypyrin
при воде имени и пароля программа пытается сделать логон с такими аттрибутами, и если удачно, то читает список »

логон куда пытается сделать программа? Как реализована проверка и попытка входа? Тут уже желательно видеть код, как это работает.

pypyrin 26-07-2011 16:51 1720350

вы не поняли меня наверное :)
мне нужно чтобы программа запускалась от USER, а вот перед использованием некоторых ее функций необходимо убедится, что человек за консолью комп-ра именно тот, которому можно эти функции делать. Не любой оператор имеет право их выполнить. Программка работает в режиме мониторинга круглосуточно, а вот если надо чего подправить, то токо технолог. Технолог подходит, жмет кнопку "Изменить параметры", выводится диалог "введите имя и пароль" и он вводит свои учетные атрибуты, логин и пароль. Например vasya 123. Программа выполняет логон в AD с использванием vasya 123, и если все ок, то берет список груп, куда входит vasya. Если он входит в группу GOD то ему можно менять параметры.

Проблема в том, что групповыми политиками польз-лю vasya запрещено выполнять ЛОГОН на этом комп-ре, токо автологон польз-ля USER. Поэтому такая проверка всегда неОК, и параметры нельзя сменить. Разрешить vasya логиниться на этот комп-р с консоли не представляется возможным - политика безопасности предприятия.

Логон пытается сделать в домен (AD). Ну какбудто вы входитев систему при включении комп-ра. Код не могу пока предоставить, попробую позже.

Delirium 27-07-2011 08:00 1720677

Хотите самый просто способ решения проблемы? Если программа хранит данные в БД, то проще всего завести там таблицу с зашифрованным именем\паролем, и сверять введенные данные с ними, а не с AD. Либо на сервере в закрытом для чтения доступе положить определенный файл, хоть txt, хоть xml, неважно, и сверять с ними.
Либо давай разбираться с политиками домена, правда это уже маленько в другом форуме надо бы делать, но, если что, вынесем в отдельную тему.
Цитата:

Цитата pypyrin
групповыми политиками польз-лю vasya запрещено выполнять ЛОГОН на этом комп-ре »

Ну так мы и не пытаемся сделать вход на комп, мы пытаемся пробиться на контроллер домена.
ПРоверь ка одно предположение:
1. Зайти как обычно на машину под USER.
2. Из командной строки набери net use. Посмотри, есть ли там строка соединения с контроллером домена.
3. Если она есть и ей присвоена какая либо буква, набери net use буква: /d
Если буквы нет, а есть просто строка, набери net use \\server_name\share /d
4. ПОсле этого попробуй в своей программе "изменить параметры"

Если не поможет, попробуй просто в командной строке набрать команду
net use \\имя_контроллера\сетевая_папка /user:домен\имя_пользователя *
На запрос ввода пароля введи пароль пользователя. Сообщи о результате.

pva 27-07-2011 22:01 1721133

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

pypyrin 29-07-2011 14:04 1722236

да как же вам объяснить то :)

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

для этого хочется использовать безопасность на основе Windows. кончно, можно сделатьтабличку в БД, там завести еще своих пользователей с паролями, но это плохо! у меня уже у некоторых людей по 4-5 паролей и логинов от разных программ :( причем все они работают в одном домене! этоже нонсенс! у человека есть один пароль на вход в систему, и этого должно быть вполне достаточно! как на доступ к БД (Майкрософт SQL сервер) так и для работы с защищёнными функциями всех саомописанных приложений!

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

Delirium 29-07-2011 15:33 1722302

Цитата:

Цитата pypyrin
а ведь скорее всего можно не так. ведь нужно всего лишь проверить имя и пароль, без логона. »

Цитата:

Цитата Delirium
net use \\имя_контроллера\сетевая_папка /user:домен\имя_пользователя *
На запрос ввода пароля введи пароль пользователя. Сообщи о результате.
------- »

Где ответ на этот вопрос?

pypyrin 09-08-2011 15:05 1728597

Цитата:

Цитата Delirium
net use \\имя_контроллера\сетевая_папка /user:домен\имя_пользователя *
На запрос ввода пароля введи пароль пользователя. Сообщи о результате. »

Ответа нету, т.к. проверить нет возможности. На тех компьютерах, которых нужно проверять, пользователю недоступно НИЧЕГО. Работа в режиме "киоск", имеется несколько ярлыков на столе - их и пользуй. Можно конечно все включить и всячески извернуться, но это не наш метод :)

В любом случае проблему я как бы решил
Поскольку в программе для проверки использовалась функция
Код:

BOOL LogonUser(
__in      LPTSTR lpszUsername,
__in_opt  LPTSTR lpszDomain,
__in_opt  LPTSTR lpszPassword,
__in      DWORD dwLogonType,
__in      DWORD dwLogonProvider,
__out    PHANDLE phToken  );

но нерадивые программисты не очень хотели разбираться чего как, то просто взяв пример некий они использовали в качестве dwLogonType [in] значение LOGON32_LOGON_INTERACTIVE. Поэтому и всё и не работало. Эксперимент с другими значениями этого параметра показал, что прекрасно работает сетевой вход, а именно LOGON32_LOGON_NETWORK. На том и остановился.

Однако терзают меня смутные сомнения ;)

Спасибо всем за терпение и помощь!

Delirium 14-08-2011 16:01 1731598

Всегда приятно, когда проблема решена своими силами :)


Время: 13:38.

Время: 13:38.
© OSzone.net 2001-