Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2017-04-23 21:50:35

  xc - Użytkownik

xc
Użytkownik
Zarejestrowany: 2017-04-05

Prestashop i Apparmor

Cześć, posiadam ten config apparmora dla php-fpm - https://forum.dug.net.pl/viewtopic.php?pid=309848#p309848
Przy stawianiu skryptu prestashop powiadomiło mnie o

Permissions on files and folders
Recursive write permissions for Apache user on ~/config/
Recursive write permissions for Apache user on ~/img/
Recursive write permissions for Apache user on ~/mails/
Recursive write permissions for Apache user on ~/modules/
Recursive write permissions for Apache user on ~/translations/
Recursive write permissions for Apache user on ~/upload/
Recursive write permissions for Apache user on ~/download/
Write permissions for Apache user on ~/app/config/[/quote]
W/w pliki mają uprawnienia do zapisywania rekursywnego przez chmod...
Dodałem więc te regułki do configu apparmora, lecz nic to nie zmieniło...

/var/www/prestashop/config/** rw,
  /var/www/prestashop/img/** rw,
  /var/www/prestashop/mails/** rw,
  /var/www/prestashop/modules/** rw,
  /var/www/prestashop/translations/** rw,
  /var/www/prestashop/upload/** rw,
  /var/www/prestashop/download/** rw,
  /var/www/prestashop/app/config/** rw,[/quote]
Błąd występuje:

2017/04/23 19:32:49 [error] 1259#0: *5 FastCGI sent in stderr: "PHP message: PHP Warning:  require(/var/www/prestashop/config/config.inc.php): failed to open stream: Permission denied in /var/www/prestashop/index.php on line 27
PHP message: PHP Fatal error:  require(): Failed opening required '/var/www/prestashop/config/config.inc.php' (include_path='.:/usr/share/php:/usr/share/pear') in /var
/www/prestashop/index.php on line 27" while reading response header from upstream, client: 127.0.0.1, server: _, request: "GET /prestashop/ HTTP/1.0", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "localhost"[/quote]

Offline

 

#2  2017-04-23 22:04:30

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Prestashop i Apparmor

Logi Apparmora masz w zazwyczaj w [b]/var/log/kern.log[/b] albo w DMESG, dla akcji AA są rozstrzygające.

Jeżeli AA coś blokuje, to tam powinno pisać co i dlaczego.

Przykład logu AA:

Kod:

[26049.302488] audit: type=1400 audit(1492977794.213:4049): apparmor="DENIED" operation="mkdir" profile="/usr/lib64/firefox/firefox" name="/home/pacjent.nv/" pid=12155 comm="Compositor" requested_mask="c" denied_mask="c" fsuid=1000 ouid=1000

Logi z PHP nie rozróżniają blokowania z AA od blokowania przez błędy CHMOD/ACL.

PS:
Na przywołanym w sznurku profilu AA Presta działa na Nginx+PHP-FPM
bez większych problemów.

Ostatnio edytowany przez Jacekalex (2017-04-23 22:10:23)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#3  2017-04-24 00:21:16

  xc - Użytkownik

xc
Użytkownik
Zarejestrowany: 2017-04-05

Re: Prestashop i Apparmor

Niestety brak logow apparmora w /var/log/{messages,auth.log} czy dmesg.
Wiem o tym ze programy tego nierozrozniaja.
Presta nie dziala "out of the box" na Twoim configu, przynajmniej ta - https://www.prestashop.com/en/developers-versions
Wiem bo to juz przerabialem nie raz, najgorsze jest to ze logow apparmora nie widze (profil enforce).

Offline

 

#4  2017-04-24 05:36:50

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Prestashop i Apparmor

Apparmor na pewno włączony?
Co to w ogóle za system operacyjny i jaki kernel?
Program Audit masz przypadkowo zainstalowany? (niezbędny do AA nie jest, za to przechwytuje logi AA i SELinuxa do swojego logu).
Jeśli tak, to zobacz w

Kod:

/var/log/audit/*

Poza tym pokaż wyniki:

Kod:

grep -i apparmor /boot/config-$(uname -r)

Kod:

aa-status

Kod:

cat /sys/module/apparmor/parameters/audit

Ja sobie do przełączania trybu logowania AA (tryb cichy, normalny) zrobiłem takiego skrypta -przełącznik:
Zwie się:

Kod:

cat /usr/local/sbin/aalog

a zawiera:

Kod:

#!/bin/bash

AUDIT="/sys/module/apparmor/parameters/audit"

 grep quiet $AUDIT 2>&1 >/dev/null && echo -n normal > $AUDIT || echo -n quiet > $AUDIT;
 
 STATUS=`cat $AUDIT `;
 
 echo "Status AUDIT zmieniony na  $STATUS ;)";
 exit 0;

Pozdro

Ostatnio edytowany przez Jacekalex (2017-04-24 05:42:22)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#5  2017-04-24 14:05:57

  xc - Użytkownik

xc
Użytkownik
Zarejestrowany: 2017-04-05

Re: Prestashop i Apparmor

Tak, audit jest w systemie zainstalowany, apparmor wlaczony, w jadrze tez jest.
U mnie /sys/module/apparmor/parameters/audit jest w trybie normal.
Ogolnie to logi apparmora zawsze mialem w /var/log/messages

Offline

 

#6  2017-04-25 01:06:52

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Prestashop i Apparmor

Jeżeli Audit jest włączony, a w /var/log/audit* nie ma logów AA, to go lepiej skonfiguruj  albo odinstaluj, bo widocznie wysyła logi AA  do /dev/null.

Poza tym zobacz, czy proces PHP jest faktycznie chroniony, robi się to tak:

Kod:

cat /proc/$PID/attr/current

np:

Kod:

for PID in `pgrep php`; do cat /proc/$PID/attr/current; done;
/usr/lib*/php5.*/bin/php-fpm (enforce)
/usr/lib*/php5.*/bin/php-fpm (enforce)

Ostatnio edytowany przez Jacekalex (2017-04-25 01:07:31)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#7  2017-04-25 23:13:31

  xc - Użytkownik

xc
Użytkownik
Zarejestrowany: 2017-04-05

Re: Prestashop i Apparmor

Apparmora mozemy spokojnie wykluczyc, wszystko jest ok.
Jedynie to config jest zle napisany, konkretnie:

Kod:

 deny owner /**/*.php   mrwlkx,

Dalem mozliwosc odczytu bo musialem, teraz nie moze sobie rename zrobic

Kod:

"PHP message: PHP Fatal error:  Uncaught exception 'Symfony\Component\Filesystem\Exception\IOException' with message 'Cannot rename "

Nieznalazlem nigdzie tej funkcjonalnosci w AA...

Offline

 

#8  2017-04-25 23:35:23

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Prestashop i Apparmor

[b]deny owner[/b] jest po to, żeby po ewentualnym załadowaniu przez dziurę np w WP beckdoora c99.php serwer nie mógł go uruchomić.

Dlatego php-fpm może otwierać tylko te pliki, które do niego nie nalezą.

To takie małe, ale bardzo praktyczne rozwiązanie.

Jak koniecznie chcesz aktualizować WP czy coś innego przez panel administracyjny, to zawsze możesz za Nginxem (w trybie proxy albo na innym porcie, chroniony za http-auth albo lepiej certyfikatem PKCS#12) ustawić Lighttpd czy Apacha, który będzie pracował jako inny user systemowy, i będzie miał prawo zapisu plików php, natomiast publiczny Nginx będzie je mógł tylko otwierać.

To wszystko jest do zrobienia,  chociaż jest z tym trochę zabawy.
Ale przede wszystkim, jak długo nie potrafisz się dostać do logów AA, to się za Apparmora nie zabieraj w ogóle.

Niby twierdzisz, że AA coś blokuje, ale wyniku polecenia z roota:

Kod:

aa-status

jakoś nie potrafisz podać o logach w ogóle nie wspominając.

Jeżeli nie ma śladu w logach, to skąd wiesz, że to AA coś zablokował?

Ostatnio edytowany przez Jacekalex (2017-04-26 04:17:38)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#9  2017-04-27 02:04:32

  xc - Użytkownik

xc
Użytkownik
Zarejestrowany: 2017-04-05

Re: Prestashop i Apparmor

Logi:

Kod:

# aa-status
apparmor module is loaded.
10 profiles are loaded.
2 profiles are in enforce mode.
   /usr/sbin/mysqld
   /usr/sbin/php5-fpm
(...)
2 processes have profiles defined.
2 processes are in enforce mode.
   /usr/sbin/mysqld (1275)
   /usr/sbin/php5-fpm (1248)

Jak widac nie moze zapisywac do /var/lib/php5/sessions/ (musialem tutaj dac rw w apparmorze)

Kod:

Apr 27 00:08:11 hostname kernel: [  699.195518] audit: type=1400 audit(1493165493.400:43): apparmor="DENIED" operation="mknod" profile="/usr/sbin/php5-fpm" name="/v
ar/lib/php5/sessions/sess_blabla" pid=1823 comm="php5-fpm" requested_mask="c" denied_mask="c" fsuid=111 ouid=111
Apr 27 00:08:11 hostname kernel: [  699.276105] audit: type=1400 audit(1493165493.484:44): apparmor="DENIED" operation="mknod" profile="/usr/sbin/php5-fpm" name="/v
ar/lib/php5/sessions/sess_blabla" pid=1823 comm="php5-fpm" requested_mask="c" denied_mask="c" fsuid=111 ouid=111

Apparmor nie loguje rename wykonane przez php-fpm bo ma rw do tego folderu.

Kod:

  /var/www/prestashop/app/cache/prod/translations/** rw,

Kod:

2017/04/27 01:21:09 [error] 3563#0: *54 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught exception 'Symfony\Component\Filesystem\Exception\IOExceptio
n' with message 'Cannot rename "/var/www/prestashop/app/cache/prod/translations/catalogue.en-US.[losowe cyfry].phpxGc3a5" to "/var/www/prestashop/app/cache/prod/tran
slations/catalogue.en-US.[losowe cyfry].php".' in /var/www/prestashop/vendor/symfony/symfony/src/Symfony/Component/Filesystem/Filesystem.php:279

Najgorzej jest z tymi tlumaczeniami jak wyzej, oraz miliardami rename poblokowanych mimo rw...
Tutaj jest moje dzialajace minimum rw do folderow (wykluczajac miliardy renames)

Kod:

  /var/lib/php5/sessions/** rw,
  /var/www/prestashop/app/cache/prod/doctrine/** rw,
  /var/www/prestashop/app/cache/prod/translations/** rw,

W jaki sposob moglbym zrobic wyjatek dla /var/www/prestashop/app/cache/prod/translations/ co do operacji na plikach?
Presta musi miec tam mozliwosc, odczytu/zapisu swoich plikow no i zmiany nazwy pliku (na wiki apparmora napisane bylo ze rw, wystarczy do rename).

Offline

 

#10  2017-04-27 02:29:59

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Prestashop i Apparmor

Kod:

Apr 27 00:08:11 hostname kernel: [  699.195518] audit: type=1400 audit(1493165493.400:43): apparmor="DENIED" operation="mknod" profile="/usr/sbin/php5-fpm" name="/v
ar/lib/php5/sessions/sess_blabla" pid=1823 comm="php5-fpm" requested_mask="c" denied_mask="c" fsuid=111 ouid=111

Kod:

Spróbuj, czy pójdzie:
/var/lib/php5/sessions/** rwkl,

Co do /var/www/presashop, to troszkę nie dogadaliśmy się z koncepcją.
Zobacz bez Apparmora, czy to wchodzi czysto, bo profil AA ma zamknąć php-fpm z w klatce, żeby wobec jakiegoś błędu w PHP nie zrobił rzeczy zabronionej.

Dlatego do aktualizacji i instalacji Presty zaproponowałem jakiś schowany za Nginxem lekki serwer typu Lighttpd, który będzie chodził bez restrykcji,
i będzie właśnie do aktualizacji i administracji skryptem CMS.

Jeżeli natomiast AA  blokuje Prestę przy normalnym działaniu strony (nie backendu administracyjnego), to pokaż logi z AA z tych akcji w lokalizacjach:

Kod:

/var/www/prestashop/app/cache/prod/doctrine/** rw,
  /var/www/prestashop/app/cache/prod/translations/** rw,

W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#11  2017-04-27 13:48:58

  xc - Użytkownik

xc
Użytkownik
Zarejestrowany: 2017-04-05

Re: Prestashop i Apparmor

Rozumiem Twoja koncepcje, ale to nie moze byc wszystko read, only. Uzyszkodnicy musza miec mozliwosc kupienia czegos, oraz log in.
Panel raczej musi byc osobno, i oba serwery www beda w klatkach. Jak sensownie tutaj zrobic sync pomiedzy nginxami, skryptami cron z rsync?
Update presty wykonuje manualnie. Bez apparmora wychodzi to na czysto bo presta moze sobie robic rw i rename do:

Kod:

  /var/www/prestashop/app/cache/prod/translations/** rw,

Z apparmorem oraz zabronieniu dla skryptow php wszystkiego:

Kod:

2017/04/27 01:21:09 [error] 3563#0: *54 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught exception 'Symfony\Component\Filesystem\Exception\IOExceptio
n' with message 'Cannot rename "/var/www/prestashop/app/cache/prod/translations/catalogue.en-US.[losowe cyfry].phpxGc3a5" to "/var/www/prestashop/app/cache/prod/translations/catalogue.en-US.[losowe cyfry].php".' in /var/www/prestashop/vendor/symfony/symfony/src/Symfony/Component/Filesystem/Filesystem.php:279

Jak widac presta chce zmienic sobie nazwe pliku z catalogue.en-US.[losowe cyfry][b].phpxGc3a5[/b] do catalogue.en-US.[losowe cyfry][b].php[/b]
Wydaje mi sie ze lepiej to rozwiazac skryptem cron sprawdzajacym co 1s lub 10s i robiacym odpowiednie mv, chown, chmod...
/var/www/prestashop/app/cache/prod/translations/ odpowiada za jezyk presty przy czym presta moze nawet 15 plikow lub wiecej utworzyc, potem rename robic dla [b]jedego uzytkownika[/b]. Moim zdaniem to nie wyglada wydajnie ani bezpiecznie.

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)

[ Generated in 0.009 seconds, 12 queries executed ]

Informacje debugowania

Time (s) Query
0.00009 SET CHARSET latin2
0.00004 SET NAMES latin2
0.00138 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.137.180.62' WHERE u.id=1
0.00057 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.137.180.62', 1732725752)
0.00030 SELECT * FROM punbb_online WHERE logged<1732725452
0.00072 DELETE FROM punbb_online WHERE ident='3.14.251.103'
0.00021 SELECT topic_id FROM punbb_posts WHERE id=310278
0.00022 SELECT id FROM punbb_posts WHERE topic_id=29523 ORDER BY posted
0.00030 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=29523 AND t.moved_to IS NULL
0.00022 SELECT search_for, replace_with FROM punbb_censoring
0.00193 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=29523 ORDER BY p.id LIMIT 0,25
0.00068 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=29523
Total query time: 0.00666 s