Назад | Перейти на главную страницу

Проблема с setfacl в подкаталогах, созданных сервером

Я столкнулся с проблемами при наследовании родительских разрешений для папок, созданных скриптом PHP, который выполняется сервером.

Я создал пользователя развертывания, добавил в www-data group и установите начальную папку и конфигурацию файла, как показано ниже.

usermod -a -G www-data deployer
chown -R www-data:www-data /var/www
chmod -R 0775 /var/www
find /var/www -type d -exec chmod 2775 {} +;   
find /var/www -type f -exec chmod 0664 {} +;

Отредактировал php5-fpm.conf файл, как показано ниже, с добавлением umask 0002.

umask 0002
pre-start exec /usr/lib/php5/php5-fpm-checkconf
respawn
exec /usr/sbin/php5-fpm --nodaemonize --fpm-config /etc/php5/fpm/php-fpm.co

И это связанная часть моего /etc/php5/fpm/pool.d/www.conf, пользователь nginx также www-data.

user  = www-data
group = www-data

listen = /var/run/php5-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0666

Я выполнил команду setfacl, как показано ниже:

setfacl -Rm u:www-data:rwx,u:deployer:rwx,g:www-data:rwx /var/www/site/storage
setfacl -Rdm u:www-data:rwx,u:deployer:rwx,g:www-data:rwx /var/www/site/storage

Однако, когда сценарий PHP, выполняемый сервером, пытается создать папку в папке хранения, созданной пользователем программы развертывания, вновь созданные папки не наследуют родительские разрешения.

drwxrwsr-x+ deployer www-data storage
drwxr-sr-x+ www-data www-data storage-cache-folder 
drwxr-sr-x+ www-data www-data storage-cache-folder-subfolder

Что мне не хватает?

Я не разработчик PHP, но как системный администратор могу сказать вам, что есть обходной путь для решения возникшей у вас проблемы. Чтобы предоставить определенное разрешение для динамически создаваемых файлов с помощью PHP, вы можете либо установить разрешение по умолчанию, используя ACL, либо используя PHP chmod:

   chmod($file, 0777); for example (change it whatever perm you'd like)

   setfacl -d -m o::rwx /var/www/site/storage (or add the group/user you'd like)

Параметр ACL -d установит этот каталог по умолчанию с предоставленными / заданными разрешениями, поэтому все, что там создано, будет иметь это разрешение по умолчанию.

Проверьте здесь, чтобы лучше понять, что вам нужно:

   http://php.net/manual/en/function.umask.php