几天以来,我的 Symfony2 应用程序的权限出现了大问题。
的背景 :
我使用 symfony2 编写了一个 PHP 应用程序,它概述了我拥有的每台服务器上的许多 Moodle 实例,该应用程序还能够自动安装新的 Moodle 实例。symfony2 应用程序使用一个函数:shell_exec() 来执行 shell 脚本。
我的问题是:有没有一种方法(安全)允许 www-data 在 /home/ 目录和 apache2 目录中写入?
我需要创建一些目录,如下所示:
/主页/moodle/var/moodledata
/etc/apache2/站点可用/000-moodle293.conf
以下是脚本:
# Params order
# "the url of the site" "the shortname" "the release" "the version"
# "the admin username" "the admin password"
# "the www dir" "the moodledata dir" "mysql server ip"
# "mysql user" "mysql password"
urlWebsite=$1
shortName=$2
installRelease=$3
installVersion=$4
adminUser=$5
adminPassword=$6
wwwDir=$7
moodledatadir=$8
hostname=$9
userdb=${10}
passdb=${11}
version=$installVersion
release=$installRelease
wwwdirname=$shortName
wwwdir=$wwwDir$wwwdirname
wwwdirinstall=$wwwdir"/admin/cli/install.php"
lang="fr"
changemod="2777"
wwwroot=$urlWebsite
homedir="/home/moodle/"
dataroot=$homedir$moodledatadir
dbhost=$hostname
dbname=$shortName
prefix="mdl_"
dbport="3306"
dbuser=$userdb
dbpass=$passdb
fullname=$wwwdirname
shortname=$shortName
adminuser="admin"
adminpass="root"
touch /etc/apache2/site-available/000-{shortname}.conf
wget https://download.moodle.org/${release}/moodle-${version}.tgz
tar -xvf moodle-${version}.tgz
rm moodle-${version}.tgz
mv moodle /var/www/$wwwdirname
mkdir $homedir
mkdir $homedir"var/"
mkdir $dataroot
chmod -R 0777 $dataroot
chmod -R 0777 $wwwdir
chown -R www-data.www-data $dataroot
/usr/bin/php5 $wwwdirinstall --non-interactive \
--lang=$lang \
--chmod=$changemod \
--wwwroot=$wwwroot \
--dataroot=$dataroot \
--dbhost=$dbhost \
--dbname=$dbname \
--prefix=$prefix \
--dbport=$dbport \
--dbuser=$dbuser \
--dbpass=$dbpass \
--fullname=$fullname \
--shortname=$shortname \
--adminuser=$adminuser \
--adminpass=$adminpass \
--agree-license
chmod -R 0755 $wwwdir
chown -R root.root $wwwdir
a2ensite 000-${shortname}.conf
service apache2 reload
我尝试过:
须藤
Sudo -S 我的命令 < root_passwd
该脚本可以运行,我尝试使用 ./moodleInstall.sh all_the_params “手动”运行该脚本,并在我的本地服务器上安装了新的 moodle 实例,我还尝试使用 shell_exec() 在 shell 脚本开头输出一些变量,并且它可以运行。所以问题在于文件和目录的权限。
谢谢你的帮助!
答案1
使用ACL授予您想要的任何权限。