Page 1 of 1
Права доступа к файлам сессий PHP
Posted: Sat Apr 11, 2015 4:20 pm
by yorm
Приветствую!
Установил Fail2ban для Весты. На следующий день заметил проблему, выражавшуюся в том, что перестал работать PhpMyAdmin и всё остальное, что требует сессий. Очистил папку, указанную в переменной session.save_path файла php.ini (/var/lib/php/session) — новые файлы в ней не создавались.
На папку стояли права:
Группа: apache
Владелец: root
rwxrwx---
Сессии начинают работать только при правах:
rwxrwxrwx
А это безопасно? Любой пользователь Весты не сможет перехватывать сессии других пользователей, получая листинг этой директории? Содержимое файлов других пользователей он не видит.
Re: Права доступа к файлам сессий PHP
Posted: Sat Apr 11, 2015 10:43 pm
by skurudo
Если используете open_basedir, то опасности нет, т.к. сессии пользователей хранятся отдельно да еще и заперты в своих каталогах:
Code: Select all
php_admin_value open_basedir /home/admin/web/domain.ru/public_html:/home/admin/tmp
php_admin_value upload_tmp_dir /home/admin/tmp
php_admin_value session.save_path /home/admin/tmp
Это просто пример для понимания происходящего.
Re: Права доступа к файлам сессий PHP
Posted: Thu Apr 16, 2015 7:16 am
by yorm
skurudo wrote:Если используете open_basedir, то опасности нет
Спасибо, интересный способ. «open_basedir = /home» можно прописать, например, в php.ini, это сразу решает проблему безопасности, но создаст другие: нет доступа ни к сессиям, ни к временной папке, кстати, в /tmp сама Веста хранит свои сессии.
Пример конфига, который приводите вы, располагается в /home/admin/conf/web/httpd.conf? Но если в Весте десятки пользователей, то нельзя как-то автоматизировать этот процесс, чтобы не приходилось каждому пользователю в каждый сайт прописывать такие 3 строчки? Или там всё же есть какой-то универсальный подход и решение?
Может быть отредактировать шаблон Весты для httpd.conf, который сразу будет всех запирать, а потом пересоздать через ее веб-интерфейс эти файлы пачкой? Но тогда надо еще как-то пачкой создать все папки вида /home/user/tmp.
Re: Права доступа к файлам сессий PHP
Posted: Thu Apr 16, 2015 7:32 am
by skurudo
yorm wrote:Спасибо, интересный способ. «open_basedir = /home» можно прописать, например, в php.ini, это сразу решает проблему безопасности, но создаст другие: нет доступа ни к сессиям, ни к временной папке, кстати, в /tmp сама Веста хранит свои сессии.
Способ рабочий, конечно пихать в общий php.ini такое не стоит - это не слишком красивый метод, а вот в конфигурационный файл вебсервера - вполне.
yorm wrote:Пример конфига, который приводите вы, располагается в /home/admin/conf/web/httpd.conf? Но если в Весте десятки пользователей, то нельзя как-то автоматизировать этот процесс, чтобы не приходилось каждому пользователю в каждый сайт прописывать такие 3 строчки? Или там всё же есть какой-то универсальный подход и решение?
Да, верно. Естественно когда народу много или нужно часто, решать такие дела лучше через шаблон. Для вебсервера шаблоны лежат здесь:
/usr/local/vesta/data/templates/web/apache2/ - для дебиана и бубунту
/usr/local/vesta/data/templates/web/httpd/ - для центос-рхел
Шаблон для basedir.tpl выглядит так:
Code: Select all
<VirtualHost %ip%:%web_port%>
ServerName %domain_idn%
%alias_string%
ServerAdmin %email%
DocumentRoot %docroot%
ScriptAlias /cgi-bin/ %home%/%user%/web/%domain%/cgi-bin/
Alias /vstats/ %home%/%user%/web/%domain%/stats/
Alias /error/ %home%/%user%/web/%domain%/document_errors/
#SuexecUserGroup %user% %group%
CustomLog /var/log/%web_system%/domains/%domain%.bytes bytes
CustomLog /var/log/%web_system%/domains/%domain%.log combined
ErrorLog /var/log/%web_system%/domains/%domain%.error.log
<Directory %docroot%>
AllowOverride All
Options +Includes -Indexes +ExecCGI
php_admin_value open_basedir %docroot%:%home%/%user%/tmp
php_admin_value upload_tmp_dir %home%/%user%/tmp
php_admin_value session.save_path %home%/%user%/tmp
php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain%"
</Directory>
<Directory %home%/%user%/web/%domain%/stats>
AllowOverride All
</Directory>
<IfModule mod_ruid2.c>
RMode config
RUidGid %user% %group%
RGroups apache
</IfModule>
<IfModule itk.c>
AssignUserID %user% %group%
</IfModule>
Include %home%/%user%/conf/web/%web_system%.%domain%.conf*
</VirtualHost>
yorm wrote:Может быть отредактировать шаблон Весты для httpd.conf, который сразу будет всех запирать, а потом пересоздать через ее веб-интерфейс эти файлы пачкой? Но тогда надо еще как-то пачкой создать все папки вида /home/user/tmp.
Да, это верное направление.
С большой долей вероятности эти папки у вас уже есть.
Re: Права доступа к файлам сессий PHP
Posted: Thu Apr 23, 2015 3:10 pm
by yorm
Спасибо за советы! В общем всё получилось. Дописал basedir в оба дефолтных шаблона, пересоздал WEB через панель для всех пользователей.
Кроме того, чтобы пользователи с доступом по SSH не могли перехватить сессию Весты, заглянув в папку /tmp, изменил в файле /usr/local/vesta/php/lib/php.ini переменные upload_tmp_dir, session.save_path и на всякий случай soap.wsdl_cache_dir на директорию с правами 0750 только для пользователя admin. А то получалось, что пользователю дается доступ, чтобы по sftp качал файлы, а он может зайти в Весту и вообще себе всё позволить.