Реализация системы безопасности в ПО на основе AD
Здравствуйте, коллеги!
Вот стоит такая задача: в собственном ПО предусмотреть защиту некоторых функций на основе безопасности Windows (в частном случае используем Active Directory) Поясню. Есть комп-р включенный в домен с AD. Комп-р сугубо уникальный, на котором реализован автологон польз-ля USER (AD пользователь) и под этим польз-лем запускается некоторая самописаная программа. В программе реализована функция мониторинга некоторого процесса и изменения параметров работы некоторой установки. Нужно сделать так, чтобы при нажатии кнопки "Изменить параметр" программа запросила имя и пароль польз-ля (из AD или локального Windows) и если ему разрешено, то дает окно изменения. Если нет - то пинает его и продолжает работу в режиме мониторинга. Сейчас сделано так, что индикатором разрешенности изменения параметров установки является наличие польз-ля в некоторой группе польз-лей из AD. Программисты реализовали проверку так: при воде имени и пароля программа пытается сделать логон с такими аттрибутами, и если удачно, то читает список групп залогиневшегося поль-ля, и если там есть "нужная группа", то дает изменить параметры установки. Но вот проблема. В связи с необходимостью внедрить систему безопасности, на этом комп-ре применены групповые политики, разрешающие логон только польз-лю USER и админам. И теперь, при вводе имени и пароля при попытке сменить параметр установки программка отпинывает всех, даже если и пользователь все ввел правильно. Разрешить этим "продвинутым" польз-лям логон нельзя: они автоматичски получают возможность входить на этом комп-ре с консоли под своими учетками, а должно быть токо от имени польз-ля USER. Подскажите, что можно сотворить? Есть предположение, что в нашей программе неверно реализована процедура проверки разрешения изменять параметры. Может есть возможность обойтись без выполнения логона? |
не совсем уверен, но что если попробовать запускать программу через планировщик от имени требуемого пользователя? В таком случае не надо будет делать дополнительную проверку на принадлежность пользователя к определенной группе?
Цитата:
|
вы не поняли меня наверное :)
мне нужно чтобы программа запускалась от USER, а вот перед использованием некоторых ее функций необходимо убедится, что человек за консолью комп-ра именно тот, которому можно эти функции делать. Не любой оператор имеет право их выполнить. Программка работает в режиме мониторинга круглосуточно, а вот если надо чего подправить, то токо технолог. Технолог подходит, жмет кнопку "Изменить параметры", выводится диалог "введите имя и пароль" и он вводит свои учетные атрибуты, логин и пароль. Например vasya 123. Программа выполняет логон в AD с использванием vasya 123, и если все ок, то берет список груп, куда входит vasya. Если он входит в группу GOD то ему можно менять параметры. Проблема в том, что групповыми политиками польз-лю vasya запрещено выполнять ЛОГОН на этом комп-ре, токо автологон польз-ля USER. Поэтому такая проверка всегда неОК, и параметры нельзя сменить. Разрешить vasya логиниться на этот комп-р с консоли не представляется возможным - политика безопасности предприятия. Логон пытается сделать в домен (AD). Ну какбудто вы входитев систему при включении комп-ра. Код не могу пока предоставить, попробую позже. |
Хотите самый просто способ решения проблемы? Если программа хранит данные в БД, то проще всего завести там таблицу с зашифрованным именем\паролем, и сверять введенные данные с ними, а не с AD. Либо на сервере в закрытом для чтения доступе положить определенный файл, хоть txt, хоть xml, неважно, и сверять с ними.
Либо давай разбираться с политиками домена, правда это уже маленько в другом форуме надо бы делать, но, если что, вынесем в отдельную тему. Цитата:
ПРоверь ка одно предположение: 1. Зайти как обычно на машину под USER. 2. Из командной строки набери net use. Посмотри, есть ли там строка соединения с контроллером домена. 3. Если она есть и ей присвоена какая либо буква, набери net use буква: /d Если буквы нет, а есть просто строка, набери net use \\server_name\share /d 4. ПОсле этого попробуй в своей программе "изменить параметры" Если не поможет, попробуй просто в командной строке набрать команду net use \\имя_контроллера\сетевая_папка /user:домен\имя_пользователя * На запрос ввода пароля введи пароль пользователя. Сообщи о результате. |
Если так настроено, что runas не запустится от нужного пользователя, то не стоит мучиться. Пользователю нужно разрешить локальный вход. Если запустится, то есть функция CreateProcessAsUser, которую runas и пользует.
|
да как же вам объяснить то :)
не нужно ничего запускать уже все запущено, программа работает... и в процессе своей работы, при доступе к некоторым своим функциям (открывает очень секретные свои настройки например) должна проверить, а человек, который это хочет сделать, имеет ли на то разрешение? для этого хочется использовать безопасность на основе Windows. кончно, можно сделатьтабличку в БД, там завести еще своих пользователей с паролями, но это плохо! у меня уже у некоторых людей по 4-5 паролей и логинов от разных программ :( причем все они работают в одном домене! этоже нонсенс! у человека есть один пароль на вход в систему, и этого должно быть вполне достаточно! как на доступ к БД (Майкрософт SQL сервер) так и для работы с защищёнными функциями всех саомописанных приложений! т.е. программа сейчас написана так, что проверка на вшивость (на доступ к этим самым защищенным функциям) реализован через функцию LogonUser(), а ведь скорее всего можно не так. ведь нужно всего лишь проверить имя и пароль, без логона. |
Цитата:
Цитата:
|
Цитата:
В любом случае проблему я как бы решил Поскольку в программе для проверки использовалась функция Код:
BOOL LogonUser( Однако терзают меня смутные сомнения ;) Спасибо всем за терпение и помощь! |
Всегда приятно, когда проблема решена своими силами :)
|
Время: 13:38. |
Время: 13:38.
© OSzone.net 2001-