Vesta 2.0 is coming soon! See our progress update: https://vestacp.com/docs/vesta-2-update
Права доступа к файлам сессий PHP
Права доступа к файлам сессий PHP
Приветствую!
Установил Fail2ban для Весты. На следующий день заметил проблему, выражавшуюся в том, что перестал работать PhpMyAdmin и всё остальное, что требует сессий. Очистил папку, указанную в переменной session.save_path файла php.ini (/var/lib/php/session) — новые файлы в ней не создавались.
На папку стояли права:
Группа: apache
Владелец: root
rwxrwx---
Сессии начинают работать только при правах:
rwxrwxrwx
А это безопасно? Любой пользователь Весты не сможет перехватывать сессии других пользователей, получая листинг этой директории? Содержимое файлов других пользователей он не видит.
Установил Fail2ban для Весты. На следующий день заметил проблему, выражавшуюся в том, что перестал работать PhpMyAdmin и всё остальное, что требует сессий. Очистил папку, указанную в переменной session.save_path файла php.ini (/var/lib/php/session) — новые файлы в ней не создавались.
На папку стояли права:
Группа: apache
Владелец: root
rwxrwx---
Сессии начинают работать только при правах:
rwxrwxrwx
А это безопасно? Любой пользователь Весты не сможет перехватывать сессии других пользователей, получая листинг этой директории? Содержимое файлов других пользователей он не видит.
Re: Права доступа к файлам сессий PHP
Если используете 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
Спасибо, интересный способ. «open_basedir = /home» можно прописать, например, в php.ini, это сразу решает проблему безопасности, но создаст другие: нет доступа ни к сессиям, ни к временной папке, кстати, в /tmp сама Веста хранит свои сессии.skurudo wrote:Если используете open_basedir, то опасности нет
Пример конфига, который приводите вы, располагается в /home/admin/conf/web/httpd.conf? Но если в Весте десятки пользователей, то нельзя как-то автоматизировать этот процесс, чтобы не приходилось каждому пользователю в каждый сайт прописывать такие 3 строчки? Или там всё же есть какой-то универсальный подход и решение?
Может быть отредактировать шаблон Весты для httpd.conf, который сразу будет всех запирать, а потом пересоздать через ее веб-интерфейс эти файлы пачкой? Но тогда надо еще как-то пачкой создать все папки вида /home/user/tmp.
Re: Права доступа к файлам сессий PHP
Способ рабочий, конечно пихать в общий php.ini такое не стоит - это не слишком красивый метод, а вот в конфигурационный файл вебсервера - вполне.yorm wrote:Спасибо, интересный способ. «open_basedir = /home» можно прописать, например, в php.ini, это сразу решает проблему безопасности, но создаст другие: нет доступа ни к сессиям, ни к временной папке, кстати, в /tmp сама Веста хранит свои сессии.
Да, верно. Естественно когда народу много или нужно часто, решать такие дела лучше через шаблон. Для вебсервера шаблоны лежат здесь: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
Спасибо за советы! В общем всё получилось. Дописал basedir в оба дефолтных шаблона, пересоздал WEB через панель для всех пользователей.
Кроме того, чтобы пользователи с доступом по SSH не могли перехватить сессию Весты, заглянув в папку /tmp, изменил в файле /usr/local/vesta/php/lib/php.ini переменные upload_tmp_dir, session.save_path и на всякий случай soap.wsdl_cache_dir на директорию с правами 0750 только для пользователя admin. А то получалось, что пользователю дается доступ, чтобы по sftp качал файлы, а он может зайти в Весту и вообще себе всё позволить.
Кроме того, чтобы пользователи с доступом по SSH не могли перехватить сессию Весты, заглянув в папку /tmp, изменил в файле /usr/local/vesta/php/lib/php.ini переменные upload_tmp_dir, session.save_path и на всякий случай soap.wsdl_cache_dir на директорию с правами 0750 только для пользователя admin. А то получалось, что пользователю дается доступ, чтобы по sftp качал файлы, а он может зайти в Весту и вообще себе всё позволить.