Я запускаю PHP под IIS 6.
Когда я использую любую функцию PHP для запуска команд cmd (например, exec()
или system()
), всегда отображается «Доступ запрещен».
Даже такие команды, как ipconfig
, демонстрируют ту же ошибку «access denied». Я дал все разрешения на папку с моим проектом, но это не сработало.
Пожалуйста, дайте мне знать кого-нибудь причину этого.
Когда вы выполняете какую-либо команду с помощью exec
, эта команда будет выполнена с учетной записью пользователя, на которой запущен IIS (который типично является IUSR_«machine-name»
на IIS 6), поэтому разрешения вашего проекта не имеют к этому никакого отношения.
Вам нужно сделать так, чтобы разрешить доступ к файлу C:\Windows\System32\cmd.exe
и добавить разрешения для IUSR_«machine-name»
.
Помимо этого вам, вероятно, потребуется использовать CACLS для изменения списка управления доступом. Замените имя IUSR_MachineName
на следующую команду для пользователя, выполняющего PHP, а затем выполните следующую команду:
CACLS c:\windows\system32\cmd.exe /E /G IUSR_MachineName:F
Если вы получаете сообщение об ошибке и не можете изменить ACL, ваш последний ресурс должен выполнить следующую команду:
takeown /F c:\windows\system32\cmd.exe
Вам также может потребоваться установить правильные разрешения и ACL для команд, которые вы пытаетесь выполнить (например, C:\Windows\System32\schtasks.exe
)
Примечание : сделайте это с осторожностью. Если у вас есть уязвимость, которая позволяет вашим пользователям выполнять команды, это может иметь неприятные последствия.