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 качал файлы, а он может зайти в Весту и вообще себе всё позволить.