Skip to content

17 Апрель 2013

160

Ubuntu Apache: Запуск сайтов от разных пользователей.

apache-process

Внимание! У вас уже должен быть установлен и настроен веб сервер Apache. В противном случае для вас есть другой пост: http://sharm-blog.ru/ubuntu-linux-apache-php.html

Для кого эта статья? В первую очередь для тех, кто хостит много сайтов на Ubuntu сервере, либо просто заботится о безопасности своего сервера. Мы научимся запускать apache из под разных пользователей и правильно настраивать права, для того чтобы полностью изолировать сайты друг от друга. В чем benefit?

  1. Безопасность. Взлом одного из ваших сайтов никогда не приведет к взлому всей системы или других сайтов, стоящих рядом.
  2. Расширяемость. Теперь мы можем отдать права на именно эту папку с сайтом своему web программисту, не открывая других сайтов и тем более всей системы.

:!:  Поехали:

  1. Итак, установим модуль apache, который позволит запускать процессы под разными пользователями, в зависимости от домена.
    apt-get install apache2-mpm-itk
  2. Apache будет запускать наш сайт от нового пользователя. Создадим этого пользователя.
    useradd -d/opt/www/site.ru -s/bin/bash webmaster-site
    passwd webmaster-site
  3. Но скорее всего доступ к сайту необходим будет не только этому пользователю.  Как минимум, если есть nginx — его пользователь тоже должен иметь доступ. Для этого создадим группу. И сразу добавим в нее нашего пользователя.
    groupadd site-group
    usermod -a -Gsite-group webmaster-site
  4. Редактируем конфиг apache от нашего сайта. Ориентировочно должен лежать тут: /etc/apache2/sites-available/site.ru. Добавляем:

    <IfModule mpm_itk_module>
        AssignUserId webmaster-site site-group
    </IfModule>
    php_admin_value open_basedir "/opt/www/letswow.ru:/tmp"
    
    # Можно не давать доступ сайту к /tmp и создать свою tmp для каждого сайта. Но некоторые сайты откажутся работать в такой конфигурации
    # php_admin_value upload_tmp_dir "/opt/www/letswow.ru/tmp"
    # php_admin_value session.save_path "/opt/www/letswow.ru/tmp"
  5. :?: Проследите что у apache пользователь по-умолчанию и не совпадает не с одним из созданным под сайты. Лучше всего ничего не трогать и оставить стандартного пользователя www-data.
  6. Меняем права на папку с сайтом. Подробнее о правах на файлы рассказано тут: http://sharm-blog.ru/web-chmod-chown.html
    chown -R www-data:site-group /opt/www/site.ru;
    find /opt/www/site.ru -type f -exec chmod 664 {} \;
    find /opt/www/site.ru -type d -exec chmod 2775 {} \;
  7. Если используете nginx для записи, или есть другие сервисы/пользователи, которым нужен доступ к сайту на запись — самое время их добавить в группу!
    usermod -a -Gsite-group nginx-user

:!:  А доехали ли?

Ну вот, теперь наши сайты запускаются под разными пользователями, с правами только на свою папку. Самых большой плюс — это безопасность. Один взломанный сайт/шелл не сможет навредить другим сайтам на этом сервере. Кроме того, сегодня мы сделали первый шаг ко второму большому плюсу — распределению доступа. Как дать доступ веб мастеру только к одному из многих сайтов, размещенных на сервере? :!: Читайте в следующей статье! 

160 коммент.
  1. Дмитрий
    29 Июл 2014

    Добрый день! Проделав вышеописанное получаю «You don’t have permission to access / on this server». Подскажите в чем может быть проблема?

    • Мимокрокодил
      3 Июн 2015

      Проверьте права доступа к папкам, в которых находится сайт.

Обсуждение закрыто.