Для начала мы создадим новую группу пользователей, затем создадим нового пользователя и поместим его в эту группу. Затем в эту же группу поместим системного пользователя 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} - пароль к базе.