Skocz do zawartości
Komentator

Kurs Raspberry Pi, projekty - #5 - serwer www (PHP, MySQL)

Pomocna odpowiedź

@ethanak to w takim razie ja usiądę do tego jutro, aby od razu zrobić całość 🙂

Udostępnij ten post


Link to post
Share on other sites

Zgodnie z obietnicą przesyłam propozycję - @Treker proszę, przejrzyj, zrób co trzeba i jeśli włączysz to do kursu usuń ten post.

A przy okazji - jest jakaś szansa aby "code" móc zapisać jako "shell"? Brakuje mi takiej pozycji coraz bardziej...

--8<--8<--8<--8<--

Pierwszą przykrą rzeczą, na którą się natkniemy po instalacji serwera będzie fakt, że nie mamy dostępu do katalogu /var/www/html, gdzie znajdują się pliki strony serwowanej przez Apacza. Większość radzi sobie z tym w ten sposób, że po prostu zmienia właściciela owego katalogu na użytkownika, na którego się loguje i teoretycznie wszystko działa... Niestety, tylko teoretycznie. Operowanie jakimiś danymi poza własnym katalogiem domowym jest niewygodne, a czasami (np. w przypadku ftp/sftp i ustawionego chroota) wręcz niemożliwe. W dodatku istnieje niebezpieczeństwo, że przy jakimś upgradzie system po prostu nadpisze zawartość tego katalogu i nasza strona będzie istniała tylko w pamięci...
Tymczasem Apache jest chyba najbardziej konfigurowalnym programem na naszej malince, i najprostszym sposobem będzie umieszczenie katalogu ze stroną w naszym katalogu domowym (czyli np. /home/pi/). Apache potrafi serwować różne zawartości z różnych katalogów poprzez mechanizm tzw. hostów wirtualnych, ale jako że konfiguracja tego jest na tyle obszerna, że zasługuje co najmniej na jedną oddzielną część kursu - na razie więc interesuje nas wyłącznie konfiguracja domyślnego katalogu.
Zacznijmy od utworzenia katalogu ze stroną i umieszczeniu tam jakiegoś najprostszego testowego pliku:

mkdir ~/html
echo "To tylko test" > ~/html/index.html

Następnie musimy poprawić konfigurację domyślnej strony serwera. W tym celu otwieramy w edytorze plik konfiguracyjny:

sudo nano /etc/apache2/sites-enabled/000-default.conf

Znajduje się tam linijka:

DocumentRoot /var/www/html

informująca serwer o położeniu domyślnej strony. Musimy zmienić ją na:

DocumentRoot /home/pi/html

Ale to jeszcze nie wszystko. Należy również poinformować serwer, co może z tym katalogiem robić. Pod tą linijką dopisujemy więc:

<Directory /home/pi/html>
    AllowOverride all
    Require all granted
</Directory>


Dyrektywa AllowOverride pozwala na późniejsze dokonfigurowywanie poprzez plik .htaccess, Require otwiera nielimitowany dostęp do strony. Fragment pliku odpowiedzialny za naszą konfigurację powinien wyglądać więc tak:

screen1.thumb.png.99bb05fbbe19844f964b6571be1ce57f.png

Teraz możemy zrestartować Apacza:

sudo systemctl restart apache2

lub po prostu kazać mu jeszcze raz wczytać konfigurację:

sudo apachectl graceful

Po prawidłowym przeprowadzeniu wszystkich operacji i wpisaniu do przeglądarki adresu jak poprzednio powinniśmy ujrzeć na ekranie napis "To tylko test".

Sytuację z położeniem katalogu ze stroną mamy więc już naprawioną - ale za chwilę natkniemy się na następną, niemniej przykrą rzecz: otóż Apacz mimo że już wie o tym, że pliki ze stroną są w naszym katalogu domowym - wciąż działa z uprawnieniami użytkownika www-data. To może doprowadzić do absurdalnej sytuacji, kiedy w naszym katalogu domowym znajdują się pliki i subkatalogi nie będące naszą własnością, z którymi nie bardzo możemy cokolwiek zrobić (np. foldery "upload" WordPressa) czy foldery z prawami do zapisu dla wszystkich.

Aby to zobrazować stwórzmy testowy plik html/test.php:

<?php
    file_put_contents('test.txt','To jest test php');
    echo "Zapisane";
?>

Po wywołaniu adresu ip_malinki/test.php zobaczymy najprawdopodobniej pusty ekran (o ile nie włączyliśmy wyświetlania błędów php), a w logu błędów komunikat podobny do tego:

PHP Warning:  file_put_contents(test.txt): failed to open stream: Permission denied in /home/pi/html/test.php on line 2

Widzimy, że nasz wielce ambitny program nie ma uprawnień do zapisu 😞

Ale i na to jest sposób: musimy przekonać Apacza, aby naszą stronę serwował jako użytkownik pi a nie www-data! W tym celu instalujemy moduł ruid2, odpowiedzialny za zmianę "w locie" uprawnień:

sudo apt install libapache2-mod-ruid2 -y

Po instalacji moduł zostanie włączony w Apaczu, pozostanie nam więc tylko dodanie linijek odpowiedzialnych za zmianę użytkownika. W tym celu znów otwieramy w edytorze plik 000-default.conf i przed sekcją <Directory> dopisujemy:

<IfModule mod_ruid2.c>
    RMode config
    RUidGid pi pi
    RGroups @none
</IfModule>

(co oznacza, że ręcznie podajemy dane, serwer ma działać z uprawnieniami użytkownika pi.pi bez żadnych dodatkowych grup).

screen2.thumb.png.a009d321733ba1eab5b38781d92f1611.png

Po restarcie lub reloadzie serwera, jeśli nic się nie będzie działo, możemy spróbować czy nasze działania przyniosły spodziewany efekt. Jeśli teraz skierujemy przeglądarkę na adres ip_malinki/test.php - powinniśmy zobaczyć napis 'Zapisane'. Po wydaniu polecenia ls -l zobaczymy, że plik test.txt został utworzony z właściwymi uprawnieniami, czyli coś w rodzaju:

$ ls -l html
razem 12
-rw-r--r-- 1 pi pi  5 lut  1 06:11 index.html
-rw-r--r-- 1 pi pi 84 lut  6 10:31 test.php
-rw-r--r-- 1 pi pi 15 lut  6 10:26 test.txt

--8<--8<--8<--8<--

Tyle na ten temat... nie chcę pisać więcej o wirtualnych hostach bo to naprawdę kobyła (nawet w skrócie).

  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites

Jeszcze raz za wszystko dziękuję. Posiedziałem dziś nad tematem, przeczytam jeszcze raz nową wersję, aby wyłapać ewentualne literówki i jutro zaktualizowana wersja będzie już publiczna 🙂

Udostępnij ten post


Link to post
Share on other sites

I co z tą wersją publiczną? Tak z ciekawości pytam... bo cały czas tkwią babole wielkości parowozu 😞

Udostępnij ten post


Link to post
Share on other sites

Jak pewnie pamiętasz był z tą instrukcją pewien problem, o którym rozmawialiśmy na PW. Później wciągnęły mnie kwestie innych artykułów i ten temat jakoś odszedł na dalszy plan, ale mam go na liście, więc nie ucieknie. Dzięki za mobilizację, postaram się szybko nadrobić tę kwestię.

Udostępnij ten post


Link to post
Share on other sites

Cześć mam problem z instalacją mysql-server na rpi4 pokazuje mi to:

pi@raspberrypi:/var/www/html/forbot $ sudo apt install mysql-server php-mysql -y
Czytanie list pakietów... Gotowe
Budowanie drzewa zależności
Odczyt informacji o stanie... Gotowe
Pakiet mysql-server nie ma dostępnej wersji, ale odnosi się do niego inny pakiet.
Zazwyczaj oznacza to, że pakietu brakuje, został zastąpiony przez inny
pakiet lub nie jest dostępny przy pomocy obecnie ustawionych źródeł.
Jednak następujące pakiety go zastępują:
  mariadb-server-10.0

E: Pakiet mysql-server nie ma kandydata do instalacji
pi@raspberrypi:/var/www/html/forbot $

Sam dodatek php-mysql normalnie się zainstalował .

Proszę o odpowiedź.

Udostępnij ten post


Link to post
Share on other sites

@jas123 Może zanim skopiujesz na forum to co wypisał apt podejmiesz się wielkiego trudu przeczytania tego komunikatu i sam wyciągniesz wnioski co powinieneś zrobić? Instrukcje sprzed paru lat mają prawo się zdezaktualizować, ale system przecież sam Ci podpowiada co trzeba.

Inna sprawa, że w kursie warto to poprawić - @Treker, czyń swą powinność!

  • Pomogłeś! 1

Udostępnij ten post


Link to post
Share on other sites

Ojoj o tym zapomniałem . Dzięki za odpowiedź na tak głupie pytanie🙂.

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...