Создание пользователя виртуальных хостов VPS

В этой части создаем пользователя виртуального хоста.

В первой части мы настроили VPS так, что можем использовать его как миниатюрный виртуальный хостинг. Напомню основную идею - для каждого виртуального хоста создается отдельный пользователь. Файлы его сайта хранятся не в /var/www , как это сделано в Apache по умолчанию, а в домашней директории пользователя. Сам Apache (а с ним и PHP) при обращении к этому сайту запускается от имени этого пользователя. Таким образом мы имеем возможность разместить несколько сайтов, пользователи которых не будут иметь возможности получить доступ друг к другу.

Для начала мы создадим новую группу пользователей, затем создадим нового пользователя и поместим его в эту группу. Затем в эту же группу поместим системного пользователя www-data, чтобы Apache и Nginx могли читать файлы сайта. Доступ к файлам другого сайта закрывается за счет того, что они будут принадлежать другой группе.

Допустим, у нас будет сайт на домене demo.dev.umi-cms.spb.su. Имя пользователя возьмем, не мудрствуя лукаво, demo. Его домашняя директория будет /home/demo, а сайт будет размещаться в /home/demo/www

Создаем группу:

addgroup demo

Создаем пользователя, указываем его домашнюю директорию, помещаем его в группу и отключаем ему shell:

useradd demo -d /home/demo -g demo -s /bin/false

Задаем пароль:

passwd demo

Обычно у меня всегда проблема придумать пароль. Сгенерировать пароль можно командой:

cat /dev/urandom | base64 | head -n1 -c15 && echo \n

Создаем домашнюю директорию:

mkdir -p -m 754 /home/demo

Если получилось, что она уже была ранее создана с другими правами, то поменять их можно командой

chmod 754 /home/demo

Создаем директорию для сайта:

mkdir -p -m 754 /home/demo/www

Для логов:

mkdir -p -m 754 /home/demo/logs

Для временных файлов:

mkdir -p -m 777 /home/demo/tmp

Меняем владельца домашней директории и всех вложенных:

chown -R demo:demo /home/demo

Добавляем www-data в группу пользователя

usermod -a -G demo www-data

Создаем базу данных (потребуется ввести пароль root):

mysql -uroot -p --execute="CREATE DATABASE ${DB_NAME};"

где ${DB_NAME} - имя базы данных.

Добавляем пользователя MySQL и задаем ему привилегии:

mysql -uroot -p --execute="GRANT ALTER, CREATE,CREATE TEMPORARY TABLES,CREATE VIEW,DELETE,DROP,INDEX,INSERT,LOCK TABLES,REFERENCES,SELECT,UPDATE ON ${DB_NAME}.* TO '${USER}'@'localhost' IDENTIFIED by '${DB_PASSWORD}';"

где ${USER} - имя пользователя, ${DB_PASSWORD} - пароль к базе.