Владение файлами Apache и envvars

Я использую Ubuntu 20.04. Я отредактировал /etc/apache2/envvars, чтобы изменить пользователя запуска на userA: export APACHE_RUN_USER=userA

Когда я запускаю этот PHP скрипт из W3 Schools для загрузки файла, загрузка работает - но владельцем файла является не userA, как я предполагал. Он остается www-data.

И все же: sudo apache2ctl -S сообщает User: name="userA" id=1002, как установлено в envvars.

Так почему www-data владеет файлом, а не userA? Что определяет право собственности на файл? FWIW, разрешения каталога, в который загружен файл, составляют 774, а право собственности - userA:www-data. "Set UID" и/или "Set GID" на каталог также не повлияли.

Если я перетаскиваю файл в каталог с помощью WinSCP (используя ssh), владельцем является userA:userA (да, userA является членом группы userA и группы www-data). Если я устанавливаю GID и перетаскиваю, владельцем является userA:www-data.

1
задан 8 June 2021 в 23:49

1 ответ

Итак, это будет сильно зависеть от того, как вы используете свой PHP.

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


Встроенный модуль php в Apache

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

sudo apt install libapache2-mod-php
sudo a2enmod php
sudo systemctl restart apache2.service

PHP FPM

PHP FPM - другой вариант - вы должны установить пакет php-fpm , но вам также потребуется дополнительная работа с Apache, чтобы он заработал.

sudo apt install libapache2-mod-fcgid php-fpm

Затем вам нужно включить модуль FCGId в Apache, а также модули псевдонима и proxy_fcgi :

sudo a2enmod actions fcgid alias proxy_fcgi

Для Ubuntu 20.04 PHP равен 7.4, поэтому вам нужно будет добавить это в конфигурацию вашего сервера везде, где вы используете php-fpm :

    <FilesMatch \.php$>
        # 2.4.10+ can proxy to unix socket
        SetHandler "proxy:unix:/var/run/php/php7.4-fpm.sock|fcgi://localhost"
    </FilesMatch>

Это должно быть в ваших блоках везде, где вы используете PHP.

Затем вы должны настроить /etc/php/7.4/fpm/pool.d/www.conf , чтобы он использовал пользователя, которого вы намереваетесь - найдите user = www-data и настройте ее под нужного пользователя. Я бы прокомментировал эту строку, а затем поместил бы под ней строку, определенную вашим пользователем, но это изменит пользователя, использующего php-fpm , чтобы он мог читать / писать.


Любой из этих подходов исправит вашего пользователя / группу PHP, с которой он пишет / создает файлы - это просто зависит от того, как вы устанавливаете PHP - встроенный модуль Apache или FPM.

1
ответ дан 28 July 2021 в 11:31

Другие вопросы по тегам:

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