дать www-data разрешение на запись в / home и другие корневые каталоги

В течение нескольких дней у меня возникла большая проблема с разрешениями для моего приложения Symfony2.

Предпосылки:

Я пишу приложение PHP с symfony2, которое дает обзор многих экземпляров Moodle на каждом сервере, которым я владею, это app также может автоматически устанавливать новый экземпляр Moodle. Приложение symfony2 использует функцию: shell_exec (), которая выполняет сценарий оболочки.

Мой вопрос: есть ли способ (безопасный), чтобы разрешить www-данным записываться в каталог / home / и каталог apache2?

I необходимо создать каталог, например:

/ home / moodle / var / moodledata

/etc/apache2/site-available/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

What I пробовал:

Sudo

Sudo -S my_command

Скрипт работает, я пробовал скрипт "вручную" с ./moodleInstall. sh all_the_params, который установил мой новый экземпляр moodle на моем локальном сервере, я также попытался с помощью shell_exec () вывести некоторые переменные в начале сценария оболочки, и он работает. Итак, проблема заключается в правах доступа к файлам и каталогам.

Спасибо за помощь!

0
задан 9 December 2015 в 12:10
1 ответ

Используйте ACLs, чтобы дать разрешение на все, что вы хотите.

.
0
ответ дан 5 December 2019 в 11:18

Теги

Похожие вопросы