Рейтинг:1

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

флаг lk

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

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

Пока что: судо apache2ctl -S отчеты Пользователь: name="userA" id=1002, как установлено в envvars.

Так почему же www-данные владеть файлом, а не пользовательA? Что определяет право собственности на файл? FWIW, права доступа к каталогу, в который загружается файл, 774, а право собственности пользователь A: www-данные. «Установить UID» и/или «Установить GID» в каталоге также не повлияло.

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

флаг ru
Вы полностью перезапустили процесс Apache? (`sudo systemctl daemon-reload && sudo systemctl restart apache2.service`) Если вы этого не сделали, он не загрузит все «новое» и не перезапустит процессы для запуска как «userA».
флаг ru
Проверьте вывод `htop` и установите для него формат "tree" в настройках htop - проверьте, какие подпроцессы Apache работают как - `userA` или `www-data`.
shortmort37 avatar
флаг lk
Я полностью остановил его - я даже прибегал к перезагрузке, но безрезультатно. Но я также разместил это в StackOverflow, они предлагают мне взглянуть на php-fpm, который устанавливает разрешения и права собственности независимо от apache: https://stackoverflow.com/questions/67892965/ubuntu-20-04-apache-file- собственность-и-envvars
флаг ru
Как вы установили PHP для начала? Обычно люди просто используют PHP, встроенный в Apache. Если у вас настроен `php-fpm`, то это то, что нам нужно знать, потому что FPM *не* является механизмом PHP по умолчанию в Apache. И нет никакого способа определить, являетесь ли вы или нет, если вы не поделитесь с нами своими конфигурациями.
shortmort37 avatar
флаг lk
@ThomasWard, все процессы apache работают от имени пользователя A (кроме одного от имени пользователя root). Запущено несколько процессов www-data, все как www-data. При запуске phpBB у меня были случаи, когда мне нужно было переключаться между разными версиями PHP в разных средах, поэтому я следовал инструкциям, приведенным здесь: https://devanswers.co/run-multiple-php-versions-on -апач/
shortmort37 avatar
флаг lk
Я также использую Ubuntu. В этой статье говорится, что PHP * НЕ * поставляется в комплекте с apache: https://www.serverlab.ca/tutorials/linux/web-servers-linux/installing-php-for-apache-on-ubuntu/
флаг ru
Эм... это зависит от того, как вы его установите. Apache2 не поставляется с Apache по умолчанию, да, однако БОЛЬШИНСТВО людей устанавливают плагин Apache PHP, а не используют php-fpm с Apache, потому что это проще. (Забавный факт: это восходит к заявлению, которое я сделал «Это зависит от того, как вы установили PHP»)
shortmort37 avatar
флаг lk
Давайте [продолжим это обсуждение в чате](https://chat.stackexchange.com/rooms/126285/discussion-between-shortmort37-and-thomas-ward).
Рейтинг:1
флаг ru

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

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


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

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

sudo apt установить libapache2-mod-php
судо a2enmod php
sudo systemctl перезапустить apache2.service

PHP FPM

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

sudo apt установить libapache2-mod-fcgid php-fpm

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

Действия sudo a2enmod fcgid псевдоним 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>

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

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


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

shortmort37 avatar
флаг lk
Спасибо, @ThomasWard. Я предпочитаю запускать PHP в Apache; Я попытался удалить php-fpm (и очистить его), но он все еще работает. Последующая попытка удаления сообщает, что он не установлен, так что это вызывает недоумение. Я даже перезагрузился, но htop сообщает, что он работает. В любом случае: я пытался следовать встроенным инструкциям PHP. «sudo apt install libapache2-mod-php» прошло гладко, но команда a2enmod сообщает «ОШИБКА: модуль php не существует!» Я сейчас в полном замешательстве.
флаг ru
`sudo apt purge 'php*-fpm'` может помочь удалить компоненты FPM. `php-fpm` — это метапакет, который использует `php7.4-fpm` в Ubuntu, поэтому вам нужно выполнить более широкую очистку. Или просто очистите `php7.4-fpm`.
shortmort37 avatar
флаг lk
Совершенно верно! Эта очистка устранила fpm, он больше не появляется в htol. Теперь все хорошо. Большое спасибо!

Ответить или комментировать

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