Skocz do zawartości
omajgat

nginx + php + www-data + chmody + wielu userów :|

Polecane posty

Witam, mam na serwerze nginx+php, wszystko dziala z usera www-data. Lecz z moich obserwacji wynika iz nie jest to bezpieczne. Gdy index.php ma chmod 700, www-data nie ma dostepu. Jezeli ustawie na odczyt dla 'innych'(www-data) czyli 704, plik zostanie wczytany, jednak w tym momencie mozna podejrzec jego zawartosc z innego uzytkownika za pomoca komendy shell_exec. Na serwerze jest kilku uzytkownikow, wiec ich dane nie sa bezpieczne zbytnio poniewaz kazdy moze podejrzec tresc configow itd.

Czy zna Ktos sposob w jaki mozna rozwiazac ten problem?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Zablokuj komende shell_exec, i wszystkie inne, ktore uznasz za stosowne. jak masz kilku userow tylko to np mozesz kazdemu dac oddzielny process php z wlasnym userem. Mozesz dokompilowac fpm do php... opcji jest sporo ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

jak masz kilku userow tylko to np mozesz kazdemu dac oddzielny process php z wlasnym userem

 

To ciekawie brzmi, jednak nic konktretnego nie wyguglowalem na ten temat, moze zna Ktos jakis tajny tutorial? ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Witam, mam na serwerze nginx+php, wszystko dziala z usera www-data. Lecz z moich obserwacji wynika iz nie jest to bezpieczne. Gdy index.php ma chmod 700, www-data nie ma dostepu. Jezeli ustawie na odczyt dla 'innych'(www-data) czyli 704, plik zostanie wczytany, jednak w tym momencie mozna podejrzec jego zawartosc z innego uzytkownika za pomoca komendy shell_exec. Na serwerze jest kilku uzytkownikow, wiec ich dane nie sa bezpieczne zbytnio poniewaz kazdy moze podejrzec tresc configow itd.

Czy zna Ktos sposob w jaki mozna rozwiazac ten problem?

 

To nie ma znaczenia. Ważne jest z jakiego usera bangla php.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

hmm.. moze tak, dla przykładu:

/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u user -g grupa -f "/usr/bin/php5-cgi -c /etc/php5/cgi/dowolne.ini" -C 1 -P /var/run/fastcgi-php.pid 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

hmm.. moze tak, dla przykładu:

/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u user -g grupa -f "/usr/bin/php5-cgi -c /etc/php5/cgi/dowolne.ini" -C 1 -P /var/run/fastcgi-php.pid 

 

Lepiej php-fpm ze zdefiniowanymi poolami per user.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Probowalem zrobic z 3 opisow. Zaden oczywiscie nie zadzialal tak jak powinien...

Przykre troche to jest ;-/

Dziekuje za pomoc.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Sprawa okazala sie bardzo prosta i te wszystkie cyrki z kompilacja roznych wersji php byly zbedne, poniewaz wystarczylo uzyc podanej wyzej komendy.

/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9001 -u foo -g foo -f /usr/bin/php5-cgi -C 1 -P /var/run/fastcgi-foo.pid

Mam jednak 2 pytania...

1. Gdy odpalam powyzsza komenda z -C 1 znaczy to ze ma stworzyc 1 proces. A tworzy 5. Jaka jest tego przyczyna?

2. Po odpaleniu spawn-cgi z prawami usera foo na porcie 9001, ustawiam w configu nginxa oczywiscie odpowiedni port, w tym przypadku 9001. Php wykonuje skrypty tego usera, z prawami tego usera. Ale tylko wtedy, gdy ustawie chmod 704, czyli dam mozliwosc odczytu pliku innym. Przy 700 nie ma dostepu.... Wiec troszke to sie mija z celem, czy tak to ma dzialac?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Pamiętaj ze nginx działa z prawami usera www-data. A jeżeli odwołujesz się do jakichkolwiek plików innych niż *.php nginx serwuje sam treść, z pominięciem procesu PHP, więc .. masz odpowiedź? :>

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Tak, aby pliki *.php działały i było bezpieczne przed innymi użytkownikami, nalezy nadac grupe: user:www-data + chmod 770, aby widzial je nginx ktory pracuje wlasnie z usera www-data.

Więc cel został osiągniety, poniewaz kazdy ma 'swoje' fcgi odpalane z usera. Przy chmodzie 770 drugi user traci dostep...

 

Zrobilem prosty skrypt, moze sie komus przyda (co prawda doskonały nie jest, ale dziala ;p):

#!/bin/bash

PID=/var/set/$USER/fcgi.pid
BIN=/usr/bin/spawn-fcgi
CGI=/usr/bin/php5-cgi
TMP=/tmp/fcgi/${USER}.fcgi.tmp

function start(){
if [ -f ${PID} ]; then
		echo -e "---> Plik ${PID} istnieje. Oznacza to że php-fastCGI jest już wł±czone."
		exit 2
fi
	${BIN} -s ${TMP} -u ${USER} -g ${USER} -f ${CGI} -C 5 -P ${PID}
READPID=`cat /var/set/$USER/fcgi.pid`
echo -e "Fast-CGI zostało odpalone. PID: $READPID."
chmod 0777 ${TMP}
chmod 0700 ${PID}
}

function stop(){
if [ ! -f ${PID} ]; then
		echo -e "---> Plik fcgi.pid nie istnieje, więc php-fastCGI nie jest uruchomione."
		exit 2
fi
READPID=`cat /var/set/$USER/fcgi.pid`
kill -15 $READPID
rm ${PID}
rm ${TMP}
if [ ! -f ${PID} ]; then
		echo -e "---> php-fastCGI zostało pomy¶lnie wył±czone."
fi
}

case $1 in
start)
	start
	;;
stop)
	stop
	;;
restart)
	stop
	sleep 1
	start
	;;
*)
	echo -e "---> Używaj: php-www {start|stop|restart}"
	;;
esac

 

W konfigu usera nginxa:

	location ~ \.php$ {
	fastcgi_pass unix:/tmp/fcgi/user.fcgi.tmp;

Dzieki skryptowi, uzytkownik moze sobie sam odpalac prosta komenda php-www start/stop/restart

 

A jak wyglada kwestia z -C 5? Jzeli podam liczbe ponizej 5, w dalszym ciagu odpala sie 5 procesow, czy jest na to jakas rada?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Strasznie fantazjujesz:

 

  1. nginx działa z prawami www-data
  2. php-fpm tworzy workerów z uidem usera i grupą www-data
  3. chmod 2710 na katalogi: drwx--s---
  4. chmod 640 na pliki: -rw-r-----
  5. chown -R loginusera:www-data htdocs

Polecenia robiące powyższe:

 

cd ~/www/moj.vhost.pl 
find htdocs -type d -exec chmod 2710 {} \;
find htdocs -type f -exec chmod 640 {} \;
chown -R loginusera:www-data htdocs

Koniec.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się


×