Правильный вариант это настройка прав пользователя от которого выполняется скрипт, что бы sudo на определенную команду выполнялось без пароля.
Не являюсь админом, но знаю что в CentOS это решается утилитой visudo
мы используем скриптик
#!/bin/sh
d=$1
if [ -f /etc/nginx/conf.d/$1.conf ];then
echo $d already exist
exit 1
fi
cat <<EOT >/etc/nginx/conf.d/$1.conf
server {
server_name www.$d;
return 301 http://$d\$uri;
}
server {
server_name $d;
set \$site_root '/www/$d';
root \$site_root;
include /etc/nginx/conf.d/common.inc;
location / {
include /etc/nginx/conf.d/common-loc.inc;
}
}
EOT
mkdir /www/$d
[ -f /www/$d/index.php ] || cat <<EOT >/www/$d/index.php
<? phpinfo(); ?>
EOT
service nginx reload
но дергаем его из консоли.
Соответственно надо настроить visudo так, что бы у пользователя из под которого работает веб-сервер были права на sudo этого скрипта. И все, проблема решена.