В настоящее время у меня есть служба Windows, написанная на C # (работающая как LocalSystem), которая создает учетную запись пользователя, необходимую для олицетворения, с помощью DirectoryEntry для добавления пользователя / пароля и связанных UserFlags. Затем он просто использует эту учетную запись для выполнения некоторых задач (используя олицетворение) с помощью функции LogonUser () - работает отлично.
Однако эта учетная запись должна использоваться ТОЛЬКО для олицетворения моей службы, пользователь НИКОГДА не должен иметь возможность входить в систему (даже если у него есть учетные данные) локально или через сеть.
Для этого я попытался установить локальные политики для «Запретить локальный вход в систему» и «Запретить доступ к этому компьютеру из сети» и добавил пользователя, которого создает моя служба. Однако теперь олицетворение не удается со следующим: Ошибка входа в систему: пользователю не предоставлен запрошенный тип входа в систему на этом компьютере (1385)
Итак, я предполагаю, что это НЕ правильный способ сделать это ... но мне нужно заблокировать учетную запись, чтобы она могла использоваться моей службой только для целей олицетворения и гарантировать, что никто другой никогда не сможет войти в учетную запись (даже если у них есть все полномочия).
Есть ли в LSA что-то, что я могу использовать? Или используя код DirectoryEntry, аналогичный тому, который использовался при создании учетной записи? Есть ли способ разрешить существование учетной записи, но не разрешить пользователям интерактивный вход в систему?
Любая помощь приветствуется. Спасибо,
Эта программа запущена в домене? Если это так, вы могли бы создать учетная запись службы делать то, что тебе нужно.
По моему опыту, локальный вход в систему и олицетворение - это одно и то же разрешение (вход в систему локально) и их нельзя разделить. т.е. щелкнуть программу правой кнопкой мыши и выполнить команду «Запуск от имени другого пользователя» - это то же самое, что войти в систему напрямую от имени пользователя и запустить программу.
Однако можно предоставить учетной записи возможность запускаться в качестве службы отдельно от разрешения на локальный вход в систему, и вы можете обнаружить, что вместо запуска службы с локальной системой вы можете запустить ее с учетной записью пользователя. Сервис и учетная запись пользователя могут быть созданы через локальную систему с помощью PSExec или других инструментов / методов.
В конечном итоге я думаю, что способ, которым вы пытаетесь достичь своей цели, невозможен, и вам нужно будет изменить дизайн. Удачи, дайте мне знать, если найдете способ доказать, что я неправ. Я бы хотел заставить определенные учетные записи администратора работать только через «запуск от имени».
Я бы предложил вырваться Монитор процесса из sysinternals и выяснение, какой доступ к файлу, реестру или сети требуется для олицетворения. Затем работайте в обратном направлении, чтобы найти минимальное назначение прав пользователя в локальной политике, к которому вы можете запретить или просто удалить доступ. Я много раз использовал его при устранении проблем безопасности на веб-серверах, обращающихся к песочнице, файлам данных, временным каталогам, что-есть-я.
-Gft