Выход в локальную оболочку означает только то, что --у пользователя теперь есть оболочка на клиенте, а не на сервере. Коснитесь файла в /tmp на обеих системах (с разными именами! ), чтобы увидеть разницу.
Вы не используете sudo /var/www/mysite/classes/builder-sites-nginx.sh
, вы используете sudo sh /var/www/mysite/classes/builder-sites-nginx.sh
-, а sudo
не настроен для разрешения запуска данных www -sudo sh
(и не должен быть -, который был бы огромная дыра в безопасности, эквивалентнаяwww-data ALL=(ALL) NOPASSWD:ALL
).
Сделайте /var/www/mysite/classes/builder-sites-nginx.sh
исполняемым файлом с помощью chmod +x
и убедитесь, что он имеет #!/bin/bash
, так как первая строка(#!/bin/sh
тоже будет работать, потому что ваш скрипт не использует никакие функции bash -, а только ).
Затем измените код PHP на:
$command = "sudo ".dirname(__FILE__)."/builder-sites-nginx.sh {$domain}";
Кстати, в зависимости от того, где и как $domain
было определено (, т. е. если оно получено из данных, предоставленных пользователем -), вам может потребоваться использовать функцию PHP escapeshellcmd()
для их очистки.