通过php创建一个新的虚拟主机失败的权限被拒绝


Create a new virtual host via php fails on Permission denied

我有两个问题:

  1. 当我运行:

    file_put_contents("/etc/apache2/sites-enabled/www.mydomain.com.conf",$vh);

    我得到错误:failed to open stream: Permission denied

  2. 我如何安全地reload apache(添加域后)从PHP。我不认为$res = shell_exec("sudo service apache2 reload")是工作,我没有得到任何回报。

这是一个不好的做法,为什么你不去创建一个默认的虚拟主机,可以回答任何域名
在应用级别,你可以对它做一些保护。这样可以将代码缩短到最小。
他是一个例子(不要用它,需要测试):

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    <Directory /var/www/the_site>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
     </Directory>
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

您肯定不希望像PHP那样做,但您可以尝试以下方法:修改sudoers文件以授予apache sudo单个命令的能力:

root ALL=(ALL) NOPASSWD:/usr/local/bin/php_add_vhost

然后创建一个可执行脚本(bash或php, python或其他),从特定位置读取数据,将其放入/etc目录并执行"service apache2 reload"。

这种方法有许多安全问题,但是如果您正在问这个问题,那么您可能无论如何都很好。