У меня есть приложение PHP, которое вносит изменения в активный каталог. Теперь у меня есть скрипт powershell, посмотрите ниже ($ username пропускается через php):
Disable-ADAccount -Identity $username
Если я запускаю этот скрипт через командную строку, boom работает нормально. Однако, если я запускаю его через PHP (cgi), он не работает и изменения не вносятся, также нет ошибок в браузере.
Так что после многих проб и ошибок я обнаружил, что ЧТЕНИЕ из активного каталога прекрасно работает с php, например, с таким сценарием:
Get-ADUser $username -Properties GivenName
Однако ПИСЬМО в активный каталог, такой как первый упомянутый скрипт, не работает.
Мне удалось просмотреть логи Apache и найти эту полезную информацию:
Disable-ADAccount : Insufficient access rights to perform the operation
At C:\scripts\lock.ps1:4 char:1
+ Disable-ADAccount -Identity $username
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (12PotterH:ADAccount) [Disable-ADA
ccount], ADException
+ FullyQualifiedErrorId : ActiveDirectoryServer:8344,Microsoft.ActiveDirec
tory.Management.Commands.DisableADAccount
Как я могу преодолеть это?
Что следует отметить:
— Я использую Windows Server 2012
Я дал полные права доступа к папкам php-cgi, powershell, cmd, xampp
Я использую xampp (apache)
Активный каталог находится на ДРУГОМ локальном сервере, а не на xampp
Я также попытался добавить параметр сервера в скрипт так:
Disable-ADAccount -Identity $username - Server SERVERNAME
Если вы не укажете учетные данные в командлетах powershell, то, скорее всего, вы попытаетесь запустить сценарии в качестве удостоверения пула приложений на сервере, на котором размещен сайт php.
Правильный способ обойти это — указать учетные данные в сценариях powershell. Большинство командлетов AD имеют параметр -credential, который вы можете использовать.
Вот пример:
$Username = 'domain\username'
$Password = 'Password123'
$pass = ConvertTo-SecureString -AsPlainText $Password -Force
$Cred = New-Object System.Management.Automation.PSCredential -ArgumentList $Username,$pass
Get-ADUser $SamAccountName -Credential $Cred
Изменить: версия с использованием учетных данных, предоставленных в виде открытого текста
Чтобы добавить к тому, что сказал кто-то другой, если ваше приложение будет выполнять эти операции, вы можете рассмотреть возможность использования файла учетных данных. Это не будет ужасно безопасно, но я не знаю, насколько безопасным будет хранение учетных данных в приложении. Объекты учетных данных, которые были экспортированы в файл, действительно полезны.
Еще одним вариантом будет обеспечение того, что сервис / приложение. Учетная запись пула имеет соответствующий доступ в Active Directory. Если это будет происходить подобным образом, я настоятельно рекомендую убедиться, что это другая учетная запись, отличная от остальных идентификаторов пула приложений, и, вероятно, также отделенная от других сайтов.