从 PHP 创建新的 Apache 配置文件
Creating new Apache config file from PHP
我的程序员们
我对 Apache2 和 PHP 有疑问。
好吧,现在我正在尝试制作一个脚本,该脚本将从 PHP 脚本创建新的“虚拟主机”,而无需在 PHP.
中使用 sudo
命令
带有 echo passwd | /usr/bin/sudo -S command
的解决方案并不是很安全,我不会使用类似的东西。
另外,我发现带有 www-data ALL=(ALL) NOPASSWD:
的解决方案也不是解决方案。
有人可以说明一下吗,这是最好的解决方案,最好的保护措施是什么?如果我需要在 PHP.
中使用 sudo
当然,该脚本将包含创建新目录、在目录中复制新站点文件等的一部分...
这听起来像是一个非常糟糕的安全计划。您必须编辑 apache 配置文件,然后重新加载或重新启动 apache2 服务器。
您可以通过编辑 sudoers 文件来授予 www-data 用户重新加载 apache 的权利,并向 www-data 用户具有写入权限的 apache 添加 vhost 配置。
第二个选项是通过 php:
伪造虚拟主机
<?php
switch ($_SERVER['SERVER_NAME']) {
case "site1.example.com" :
require_once 'some_config_for_site_1.php';
// load scripts from site1 folder.
break;
case "site2.example.com" :
require_once 'some_config_for_site_2.php';
// load scripts from site1 folder.
break;
default:
http_response_code(404);
break;
}
好的,这是一个非常糟糕的计划,但不知何故这是最好的解决方案。
为了以正确的方式执行此操作,我将使用 bash 脚本,我将从 PHP.
调用该脚本
$output = shell_exec("sudo /path/to/script/script.sh $SiteName $Domain");
script.sh
#! /bin/bash
#First parameter given by calling the script
sitename=
#Second parameter given by calling the script
domain=
#Directorium where are stored files of the web app
dirlocation="/var/www/$sitename"
#Creating a new directorium
mkdir $dirlocation
#Copying the defoult files of app to the just created dir
cp -R /var/www/someapp/* $dirlocation
#Creating the new configurationg file for Apache and VHost
vhost_script="/etc/apache2/sites-available/$sitename.conf"
cat > "${vhost_script}" << EOF
<VirtualHost *:80>
ServerName $domain
DocumentRoot $dirlocation
<Directory $dirlocation>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
EOF
#Enabling the site in Apache
a2ensite $sitename.conf
#Reloading the Apache
systemctl reload apache2.service
此外,为了从 PHP 执行此操作,我需要仅使用 sudo 为 运行 授予 www-data
权限。
为此,请打开 sudoers
文件 (sudo visudo /etc/sudoers
) 并添加以下行
www-data ALL=(root) NOPASSWD: /path/to/script/script.sh
我知道这可能不是最好的解决方案,但这是我为此目的找到的。
免责声明:这只是展示如何做到这一点,这里的 bash 脚本也非常简单。
我的程序员们
我对 Apache2 和 PHP 有疑问。 好吧,现在我正在尝试制作一个脚本,该脚本将从 PHP 脚本创建新的“虚拟主机”,而无需在 PHP.
中使用sudo
命令
带有 echo passwd | /usr/bin/sudo -S command
的解决方案并不是很安全,我不会使用类似的东西。
另外,我发现带有 www-data ALL=(ALL) NOPASSWD:
的解决方案也不是解决方案。
有人可以说明一下吗,这是最好的解决方案,最好的保护措施是什么?如果我需要在 PHP.
中使用sudo
当然,该脚本将包含创建新目录、在目录中复制新站点文件等的一部分...
这听起来像是一个非常糟糕的安全计划。您必须编辑 apache 配置文件,然后重新加载或重新启动 apache2 服务器。
您可以通过编辑 sudoers 文件来授予 www-data 用户重新加载 apache 的权利,并向 www-data 用户具有写入权限的 apache 添加 vhost 配置。
第二个选项是通过 php:
伪造虚拟主机<?php
switch ($_SERVER['SERVER_NAME']) {
case "site1.example.com" :
require_once 'some_config_for_site_1.php';
// load scripts from site1 folder.
break;
case "site2.example.com" :
require_once 'some_config_for_site_2.php';
// load scripts from site1 folder.
break;
default:
http_response_code(404);
break;
}
好的,这是一个非常糟糕的计划,但不知何故这是最好的解决方案。
为了以正确的方式执行此操作,我将使用 bash 脚本,我将从 PHP.
调用该脚本 $output = shell_exec("sudo /path/to/script/script.sh $SiteName $Domain");
script.sh
#! /bin/bash
#First parameter given by calling the script
sitename=
#Second parameter given by calling the script
domain=
#Directorium where are stored files of the web app
dirlocation="/var/www/$sitename"
#Creating a new directorium
mkdir $dirlocation
#Copying the defoult files of app to the just created dir
cp -R /var/www/someapp/* $dirlocation
#Creating the new configurationg file for Apache and VHost
vhost_script="/etc/apache2/sites-available/$sitename.conf"
cat > "${vhost_script}" << EOF
<VirtualHost *:80>
ServerName $domain
DocumentRoot $dirlocation
<Directory $dirlocation>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
EOF
#Enabling the site in Apache
a2ensite $sitename.conf
#Reloading the Apache
systemctl reload apache2.service
此外,为了从 PHP 执行此操作,我需要仅使用 sudo 为 运行 授予 www-data
权限。
为此,请打开 sudoers
文件 (sudo visudo /etc/sudoers
) 并添加以下行
www-data ALL=(root) NOPASSWD: /path/to/script/script.sh
我知道这可能不是最好的解决方案,但这是我为此目的找到的。
免责声明:这只是展示如何做到这一点,这里的 bash 脚本也非常简单。