Puncte:1

Proprietatea fișierului Apache și envvars

drapel lk

Eu folosesc Ubuntu 20.04. am editat /etc/apache2/envvars pentru a schimba utilizatorul rulat în utilizatorA: export APACHE_RUN_USER=utilizatorA

Când alerg acest script PHP de la W3 Schools pentru a încărca un fișier, încărcarea funcționează - dar proprietarul fișierului nu este utilizatorA așa cum intenționez. Rămâne www-data.

Inca: sudo apache2ctl -S rapoarte Utilizator: name="userA" id=1002, așa cum este stabilit în envvars.

Deci de ce www-data deține fișierul și nu utilizatorA? Ce determină proprietatea fișierului? FWIW, permisiunile directorului în care este încărcat fișierul sunt 774, iar proprietatea este userA:www-data. Nici „Set UID” și/sau „Set GID” din director nu au avut niciun impact.

Dacă trag și plasez un fișier în directorul cu WinSCP (folosind ssh), proprietatea este userA:userA (da, utilizatorA este membru al ambelor utilizatorA grup și www-data grup). Dacă setez GID și trageți și plasați, proprietarul este userA:www-data.

drapel ru
Ați repornit complet procesul Apache? (`sudo systemctl daemon-reload && sudo systemctl restart apache2.service`) Dacă nu ați făcut-o, atunci nu va fi încărcat totul „nou” și nici nu va fi repornit procesele pentru a rula ca „userA”
drapel ru
Verificați ieșirea `htop` și setați-o la formatul "tree" în configurarea htop - verificați cum rulează subprocesele Apache - `userA` sau `www-data`.
shortmort37 avatar
drapel lk
L-am oprit complet - chiar am recurs la repornire, fără niciun rezultat. Dar am postat asta și pe StackOverflow, ei sugerează că ar trebui să mă uit la php-fpm, care stabilește permisiunile și proprietatea independent de apache: https://stackoverflow.com/questions/67892965/ubuntu-20-04-apache-file- proprietate-şi-envvars
drapel ru
Cum ai instalat PHP pentru început? În mod normal, oamenii folosesc doar PHP-ul care este inclus în Apache. Dacă ai configurat `php-fpm`, atunci trebuie să știm asta, deoarece FPM *nu este* mecanismul PHP implicit în Apache. Și nu există nicio modalitate de a determina dacă sunteți sau nu, decât dacă ne împărtășiți configurațiile dvs.
shortmort37 avatar
drapel lk
@ThomasWard, toate procesele apache rulează ca userA (cu excepția unuia ca root). Există mai multe procese www-data care rulează, toate ca www-data. În rularea phpBB, am avut ocazie în care am avut nevoie să comut între diferite versiuni PHP în diferite medii - așa că am urmat instrucțiunile enumerate aici: https://devanswers.co/run-multiple-php-versions-on -apache/
shortmort37 avatar
drapel lk
Rulez și Ubuntu. Acest articol afirmă că PHP *NU* vine la pachet cu apache: https://www.serverlab.ca/tutorials/linux/web-servers-linux/installing-php-for-apache-on-ubuntu/
drapel ru
Hm... depinde de cum îl instalezi. Apache2 nu vine cu Apache în mod implicit, da, cu toate acestea, MAI MAI MULTI oameni instalează plugin-ul Apache PHP în loc să folosească php-fpm cu Apache, pentru că este mai simplu. (Fapt distractiv: se întoarce la afirmația pe care am făcut-o despre „Depinde cum ai instalat PHP”)
shortmort37 avatar
drapel lk
Să [continuăm această discuție în chat](https://chat.stackexchange.com/rooms/126285/discussion-between-shortmort37-and-thomas-ward).
Puncte:1
drapel ru

Deci, acest lucru va depinde în mare măsură de modul în care vă faceți PHP.

Există două abordări tipice cu Apache și fiecare are considerații diferite pentru a remedia această problemă cu permisiunile.


Încorporat php modul în Apache

Aceasta este cea mai simplă soluție pentru a face Apache să lucreze cu PHP. PHP rulează în Apache și rulează ca utilizator configurat Apache.

sudo apt install libapache2-mod-php
sudo a2enmod php
sudo systemctl reporniți apache2.service

PHP FPM

PHP FPM este cealaltă opțiune - veți instala php-fpm pachet, dar veți avea nevoie și de muncă suplimentară cu Apache pentru ca acesta să funcționeze.

sudo apt install libapache2-mod-fcgid php-fpm

Apoi trebuie să activați modulul FCGId în Apache, precum și alias și proxy_fcgi module:

acțiuni sudo a2enmod fcgid alias proxy_fcgi

Pentru Ubuntu 20.04, PHP este 7.4, așa că va trebui să adăugați acest lucru la configurația serverului dvs. oriunde îl utilizați 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>

Acest lucru trebuie să fie în interiorul tău <VirtualHost ...> blocuri oriunde utilizați PHP.

Atunci trebuie să vă adaptați /etc/php/7.4/fpm/pool.d/www.conf pentru a-l face să folosească utilizatorul pe care intenționați să îl căutați - căutați utilizator = www-data linie și ajustați-o la utilizatorul dorit. Aș comenta acest rând și apoi aș pune unul definit de utilizator dedesubt, dar asta va schimba utilizatorul utilizat de către php-fpm pentru a citi/scrie cu.


Oricare dintre aceste abordări vă va repara utilizatorul/grupul PHP cu care scrie/creează fișiere - depinde doar de modul în care instalați PHP - Apache embedded module sau FPM.

shortmort37 avatar
drapel lk
Mulțumesc, @ThomasWard. Prefer rularea PHP în Apache; Am făcut o încercare de a elimina apt php-fpm (și purge), dar încă pare să ruleze. O încercare ulterioară de eliminare raportează că nu este instalată, așa că este derutant. Chiar am repornit, dar htop raportează că funcționează. În orice caz: am încercat să urmez instrucțiunile PHP încorporate. „sudo apt install libapache2-mod-php” a mers fără probleme, dar comanda a2enmod raportează „EROARE: Modulul php nu există!” Sunt complet confuz acum.
drapel ru
`sudo apt purge 'php*-fpm'` ar putea ajuta la eliminarea componentelor FPM. `php-fpm` este un metapachet, atrage `php7.4-fpm` pe Ubuntu, așa că trebuie să faceți o curățare mai amplă. Sau pur și simplu șterge `php7.4-fpm`.
shortmort37 avatar
drapel lk
destul de bine! Acea purjare a eliminat fpm, nu mai apare in htol. Acum totul este bine. Mulţumesc mult!

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.