• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak ustawić zewnętrzy serwer dla projektów PHP Symfony/Laravel

Object Storage Arubacloud
0 głosów
204 wizyt
pytanie zadane 13 lutego 2019 w Hostingi, domeny, usługi przez kevin Mądrala (5,010 p.)
edycja 13 lutego 2019 przez kevin

Cześć, piszę z takim dłuższym pytaniem/tematem i będę starał się opisywać co robię i dlaczego, Proszę o krytykę ponieważ chce dobrze zrozumieć to co tutaj opisuję. Dokładniej to chodzi mi o to jak poprawnie konfigurować serwer pod kilka projektów ( bez FPM'a) wszystkie projekty działają na takiej samej wersji php i mają dostęp do wszystkich zasobów.

Instaluję Apache2, PHP,  Yarn, Node, git, composer, MySQL. Jak to robić to nie będę opisywał więc zakładamy że to już jest.

Domyślna ścieżka na ka której pracuje Apache2 to /var/www/ config dla domyślnego v-hosta jest ustawiony na katalog /var/www/html. Domyślny użytkownik oraz grupa z jaką Apache uruchamia projekt to www-data .Można to zobaczyć wpisując polecenia apache2ctl -S. I z uprawnieniami dla tego użytkownika i grupy są uruchamiane strony jeżeli w przeglądarce wpiszemy adres www strony. Zakładamy że projekty będziemy trzymać w katalogu /var/www/ więc powinien pozwolić użytkownikowi www-data na odczyt i wykonanie skryptów php w tym katalogu, ale ten użytkownik nie może ich usuwać ( chodzi o sytuacje kiedy w skrypcie php jest unlink jakiegoś pliku php ). Inaczej jest w przypadku katalogu public/uploads do którego mogą być wysyłane zdjęcia, tam musi być już pozwolenie zapisu dla użytkownika www-data. Więc użytkownik www-data uruchamiający skrypty php musi mieć prawo do odczytu/wykonania skryptów ale pełne prawa do katalogu public/uploads oraz pełne prawa do katalogu z cache. Mam rację ?

Teraz praktyka:

Zaraz po zainstalowaniu Apache katalog /var ma takie ustawienia:

drwxr-xr-x  3 root root  4096 Feb  8 16:23 www

A w tym katalogu:

drwxr-xr-x  2 root root 4096 Feb  8 16:23 html

Właściciel i grupa to root, właściciel ma pełne prawa do katalogu grupa odczyt/wykonanie wszyscy pozostali tylko wykonanie. Jeżeli postawię projekt w tym katalogu to muszę to zrobić jako root wtedy automatycznie właścicielem stanie się root a użytkownik www-data będzie miał prawo tylko do wykonania skryptów. Więc ręcznie będę musiał ustawić chmod -R 777 public/images oraz katalogu z cache.

Nie powinno się stawiać projektów jako root chyba w ogóle każdy projekt powinien mieć swojego użytkownika aby jeden użytkownik nie miał dostępu do innego projektu.

 

1. Zakładając że jeden użytkownika ma dostęp do wszystkich projektów.

Tworzę swojego użytkownika deploy-user lub używam www-data:

useradd -m deploy-user -s /bin/bash

Zmieniam grupę ale zostawiam właściciela jako root katalogu /var/www na używanego użytkownika deploy-user albo www-data żeby mógł tworzyć katalogi, plikioraz aktualizować projekty przez gita i daję TYLKO grupie pełne prawa aby przypadkiem przez root nie zrobić git pull albo modyfikować czegoś w tym katalogu czy czegoś innego na projekcie ( może spowodować to utworzenie plików z prawami roota a przy zmianie chmod i chown git widzi to jako zmianę w plikach ) czyli:

chmod 070 -R /var/www/

chown -R root:deploy-user /var/www

lub

chown -R root:www-data /var/www

Tym sposobem otrzymujemy:

d---rwx---  3 root deploy-user  4096 Feb  8 16:23 www

lub

d---rwx---  3 root www-data  4096 Feb  8 16:23 www

Tylko deploy-user lub www-data może dokonywać jakichkolwiek zmian w tym katalogu.

Od tego momentu loguję się jako deploy-user lub www-data:

Zalogowany użytkownik powinien tworzyć wszystkie pliki i katalogi z ustawieniami:

Właściciel pliku - aktualny użytkownik

Grupa: zawsze ww-data

Uprawnienia: 750

        - Właściciel deploy-user albo www-data mogą dokonywać wszelkich zmian

        - Grupa może tylko wykonywać i odczytywać pliki nie może ich usuwać ( czyli jak apache wczytuje skrypty to z takimi uprawnieniami )

        - Pozostali nie mają żadnych praw

W takim wypadku ręcznie ustawiam chmod -R 770 public/images i dla katalogu z cache.

Nie wiem tylko jak ustawić domyślną maskę dla grupy ale tylko dla danego użytkownika Czyli jeżeli tworzę katalog jako root to mam właściciela i grupę root:root ale jeżeli tworzę jako deploy-user to mam właściciela i grupę deploy-user:www-data analogicznie z maską praw do plików/katalogów mask 750 ale tylko dla użytkownika deploy-user root już ma inną maskę. Czyli spersonalizowane ustawienia dla danego użytkownika.

Tworzę projekt poprzez: git clone repo_link nowy_projekt_z_gita

I zawierając poprzednie ustalenia to powinienem mieć stworzony katalog z ustawieniami:

Katalog: nowy_projekt_z_gita

chmod: 750

chown: deploy-user:www-data

Katalogi zawierające cache oraz przeznaczone do zapisu wysłanych zdjęć( public/uploads ) powinny być wpisane w git ignore więc mogę im ręcznie dać uprawnienia poprzez chmod -R 770

2. Każdy projekt ma swojego usera:

Zmieniam grupę i uprawnienia katalogu /var/www na:

chown -R root:root /var/www

chmod 707 -R /var/www

Dzięki temu każdy nowy użytkownik może tworzyć projekty w tym katalogu. Ale tworząc nowych użytkowników dla każdego projektu to zawartość katalogu /var/www wygląda tak:

drwxr-x---  3 user_projekt_1 www-data  4096 Feb  8 16:23 projekt_1

drwxr-x---  3 user_projekt_2 www-data  4096 Feb  8 16:23 projekt_2

Dalej już analogicznie jak w poprzednim punkcie.

I tyle. Czy to tak powinno być ?

1 odpowiedź

+1 głos
odpowiedź 30 marca 2019 przez Ehlert Ekspert (212,670 p.)
  1. IMO strasznie przekombinowane. 
  2. Pliki php nie potrzebują prawa do wykonania.
  3. Nie rozumiem po co idea odrębnego usera dla każdego projektu. Apache jest uruchomiony jako użytkownik x i taki powinien być właściciel folderu.
  4. IMO permissiony dla plików 640 i folderów 750.
komentarz 1 kwietnia 2019 przez kevin Mądrala (5,010 p.)
Dzięki za odpowiedź właśnie kombinuje kombinuje a nie wiem jak to powinno być poprawnie. Standardowo Apache jest jako użytkownik www-data i takiego właściciela oraz grupę powinien mieć każdy folder oraz każdy plik który należy do projektu oraz folder w którym znajduje się projekt ?

Podobne pytania

0 głosów
1 odpowiedź 370 wizyt
0 głosów
0 odpowiedzi 154 wizyt
pytanie zadane 17 lutego 2018 w Sieci komputerowe, internet przez hhh Gaduła (4,110 p.)
0 głosów
1 odpowiedź 427 wizyt
pytanie zadane 6 stycznia 2016 w Hostingi, domeny, usługi przez Uszmada Nowicjusz (120 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...