Запуск сайтов от разных пользователей nginx + php-fpm

25 мая, 12:51

По умолчанию, все сайты запускаться от пользователя (www-data), указанного в настройках php-fpm.


Внимание: Использую версию PHP 7.2, для других версий пути могут отличаться.

Чтобы запускать сайты от разных пользователей, необходимо:


  1. Создать несколько пользователей.
  2. Создать отдельные конфигурационные файлы и настроить php-fpm.
  3. Создать отдельные конфигурационные файлы и настроить nginx.
  4. Перезапустить сервисы и создать контент.

Пользователи


Создаем пользователя site с домашним каталогом, оболочкой /bin/bash и пароль.


useradd -g www-data -m -d /var/www/site/ -s /bin/bash site
passwd site


Настройка php-fpm


Создать отдельные конфигурационные файлы в директории /etc/php/7.2/fpm/pool.d,
убедившись при этом, что в файле /etc/php/7.2/fpm/php-fpm.conf указана строчка

include=/etc/php/7.2/fpm/pool.d/*.conf

Создать файл site.conf и пишем содержимое:


[site.ru]
pm = dynamic
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_children = 5
pm.max_spare_servers = 5
listen = /run/php/php7.2-fpm-site.sock
listen.mode = 0660
listen.owner = site
listen.group = www-data
user = site
group = www-data
chdir = /
php_admin_value[upload_tmp_dir] = /var/www/site/tmp
php_admin_value[session.save_path] = /var/www/site/tmp


Создать папку /var/www/site/tmp

Настройка nginx


Создать отдельные конфигурационные файлы в директории /etc/nginx/sites-available/
Создать файл site.conf и пишем содержимое:


upstream site.ru {server unix:/run/php/php7.2-fpm-site.sock;}
server {
	listen 80;
	root /var/www/site/html;
	index index.php index.html index.htm;
	server_name site.ru;
	location / {
		try_files $uri $uri/ /index.php?q=$uri&$args;
	}
	location ~ \.php$ {
		fastcgi_pass unix:/run/php/php7.2-fpm-site.sock;
		include fastcgi_params;
		include snippets/fastcgi-php.conf;
		fastcgi_keep_conn on;
		fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f noreply@site.ru";
		fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
		fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
	}
	location ~ /\.ht {
		deny all;
	}
}


По умолчанию, в Debian все файлы настройки виртуальных доменов создаются в каталоге /etc/nginx/sites-available,
а на все активные сайты создаются символические ссылки на этот файл в каталоге /etc/nginx/sites-enable


ln -s /etc/nginx/sites-available/site.conf /etc/nginx/sites-enabled/site.ru


Готово. Теперь перезапустить сервисы и проверить.


service nginx restart
service php7.2-fpm restart

Содержимое файла index.php для проверки
<?php
// Показывать всю информацию, по умолчанию INFO_ALL
phpinfo();

// Показывать информацию только о загруженных модулях.
phpinfo(INFO_MODULES);
?>

Команды управления пользователями в Linux

25 мая, 12:22

Основные команды управления пользователями в Linux:

useradd — регистрирует нового пользователя или изменяет информацию по умолчанию о новых пользователях;
usermod — изменяет учётную запись пользователя;
userdel — удаляет учётную запись и файлы пользователя;
passwd — изменяет пароль пользователя.

Подробно о useradd

useradd test — Создаем пользователя test (без домашнего каталога и без пароля).
useradd -m -d /home/test test — Создаем пользователя test с домашним каталогом /home/test.

-m — создать домашний каталог пользователя
-d — домашний каталог новой учётной записи

Примечание: удобство использования ключей -m и -d в том, что автоматически созданный каталог уже будет иметь необходимые права.
Если каталог вы будете создавать отдельно, то придется менять владельца командой chown и возможно разрешения по умолчанию командой chmod.

useradd -g testgroup -m -d /home/test -s /bin/bash test — Создаем пользователя test с домашним каталогом /home/test, оболочкой /bin/bash
passwd test — пароль

-g — имя или ID первичной группы новой учётной записи
-s — оболочка новой учётной записи

Примечание: если вы создаете учетную запись для служебных задач, то установить оболочку /bin/false.

Подробно о usermod

usermod -l test02 test01 — Смена имени пользователя test01 на test02.

-l Имя пользователя будет изменено с test01 на test02.
Больше ничего не меняется. В частности, вероятно, должно быть изменено имя домашнего каталога и почтового ящика.

usermod -g testgroup02 test02 — Изменение первичной группы пользователя test02 на группу testgroup02.

-g — Имя или числовой идентификатор новой первичной группы пользователя.
Группа с таким именем должна существовать. Все файлы в домашнем каталоге пользователя, принадлежавшие предыдущей первичной группе пользователя, будут принадлежать новой группе. Группового владельца файлов вне домашнего каталога нужно изменить вручную.

usermod -d /home/test02 -m test02 — Создание нового домашнего каталога /home/test02 пользователя test02 и перенос данных из старого в новый.

-d — Домашний каталог нового пользователя.
Если указан параметр -m, то содержимое текущего домашнего каталога будет перемещено в новый домашний каталог, который будет создан, если он ещё не существует.
-m — Переместить содержимое домашнего каталога в новое место. Этот параметр можно использовать только с параметром -d (или —home).
Команда usermod пытается изменить владельцев файлов и копирует права, ACL и расширенные атрибуты, но после неё всё равно могут потребоваться некоторые ручные действия.

Примечание: Вы должны убедиться, что от указанного пользователя не запущено никаких процессов, если при выполнении этой команды изменяется числовой пользовательский ID, имя пользователя или домашний каталог пользователя. В Linux команда usermod выполняет такую проверку, но на других архитектурах проверяется только присутствие пользователя в системе согласно данным utmp. Вы должны вручную изменить владельца всех файлов crontab или заданий at. Вы должны сделать все изменения NIS на сервере NIS самостоятельно.

Подробно о userdel

userdel test — Удаление пользователя test. Домашний каталог и файлы в нем останутся нетронутыми.

userdel -r test — Удаление пользователя test вместе с домашним каталогом и файлами в нем, а также почтового ящика, если он есть.

Подробно о passwd

passwd -S — Отобразить состояние текущей учетной записи (имя, инф. о пароле, дата последнего изменения пароля, минимальный срок, максимальный срок, период выдачи предупреждения, период неактивности пароля).

passwd -S -a — Отображение состояния всех учетных записей.

passwd test — Задать пароль для учетной записи test

Обычный пользователь может изменить пароль только своей учётной записи, суперпользователь может изменить пароль любой учётной записи.

Дополнительные команды

id — Print user and group information for the specified USERNAME, or (when USERNAME omitted) for the current user;
groups — print the groups a user is in;
last, lastb — show listing of last logged in users.
last -n 3 root — Отобразить информацию о трех последних входах в систему пользователя root.
lastlog — выводит отчёт о последней регистрации в системе всех или указанного пользователя
logname — print user´s login name.
whoami — Print the user name associated with the current effective user ID.
mesg — control write access to your terminal.
mesg y — Включение приема сообщений от пользователей, отправленных с помощью команды write.
sudo, sudoedit — изменяет ID пользователя или делает его суперпользователем
users — print the user names of users currently logged in to the current host
w — Show who is logged on and what they are doing.
who — show who is logged on
write — send a message to another user

Установка и настройка LEMP (nginx,mysql,php-fpm)

23 мая, 15:03

Минимальная настройка LEMP в Debian/Ubuntu


Первое, это обновим индекс пакетов.


sudo apt-get update


Установим nginx


sudo apt-get install nginx


Теперь проверим, что nginx доступен по URL, откроем в браузере наш IP адрес.
Приветствие от NGINX.


Далее, установим MySQL


sudo apt-get install mysql-server


Проверим работу и доступ к MySQL


mysql -u root -p


Установим PHP-FPM и модуль для работы с MySQL


sudo apt-get install php-fpm php-mysql


На текущий момент установилась версия 7.2


Отредактируем конфиг PHP-FPM


sudo nano /etc/php/7.2/fpm/php.ini


Устанавливаем cgi.fix_pathinfo в 0 (устранение уязвимости исполнения файлов)


cgi.fix_pathinfo=0


Перезапустим обработчик PHP-FPM


sudo service php7.2-fpm restart


Отредактируем default config файл nginx


sudo nano /etc/nginx/sites-available/default
// Редактируем:
        index index.php index.html index.htm;

	location ~ \.php$ {
		fastcgi_pass unix:/run/php/php7.2-fpm.sock;
		include fastcgi_params;
		include snippets/fastcgi-php.conf;
	}
	location ~ /\.ht {
		deny all;
	}
// Тестируем на ошибки
sudo nginx -t
// Перезапуск
sudo service nginx restart


Готово.


Финальный тест.
Создадим файл для проверки PHP в корневой директории сайта


sudo nano /var/www/html/index.php


Установить дополнительные модули
К примеру, mbstring, xml и тд:


apt-get install php7.2-mbstring php7.2-xml php7.2-curl php7.2-zip php7.2-gd


Настроем ЧПУ


sudo nano /etc/nginx/sites-available/default

	location / {
		try_files $uri $uri/ /index.php?q=$uri&$args;
	}


Оф. руководство Nginx + PHP-FPM + MySQL для Ubuntu


http://help.ubuntu.ru/wiki/nginx-phpfpm
http://help.ubuntu.ru/wiki/mysql

Удаление пакетов в Debian

23 мая, 12:56

Для начала нужно узнать установлены ли пакеты, какие, сколько.

В этом поможет dpkg.


dpkg — система управления пакетами в Debian.

apt-get purge —auto-remove — команда выполняет полное удаление пакета из системы.


Выполняем:


dpkg -l nginx* apache2* php* mysql*


В результате таблица со всеми пакетами

Итак, чистое удаление с системы, выполняем:


apt-get purge --auto-remove nginx* apache2* php* mysql*


Внимание: вместо nginx, apache2, php, mysql указать свои пакеты для удаления.

Полезные команды почтового сервера Exim

4 мая, 18:01

Exim — это MTA (Mail Transfer Agent), агент передачи сообщений, в просторечии — почтовый сервер


ID сообщений и spool файлы

XXXXXX-YYYYYY-ZZ — Идентификаторы сообщений в очередях Exim.

Для каждого сообщения создаются три файла в spool директории(/var/spool).

Каталог: /var/spool/exim/msglog содержит файлы со служебной информацией для каждого сообщения и именуются в соответствии с ID этого сообщения.

Каталог: /var/spool/exim/input содержат файлы заголовков и данных, к ID сообщения в имени, добавлены суффиксы -H и -D, соответственно.

Кроме того в этих директориях могут появляться хэшированные подкаталоги для работы с большими почтовыми очередями.


Итак, команды для работы:


Вывести количество сообщений в очереди

exim -bpc

Вывести список сообщений в очереди. Выводятся, время постановки в очередь, размер, ID сообщения, отправитель, получатель

exim -bp

Вывод суммарной информации

exim -bp | exiqsumm

Вывод текущей работы почтового сервера

exiwhat

Вывод с помощью exiqgrep

// -f используется для поиска сообщений конкретного отправителя
exiqgrep -f [user]@domain

//-r используется для поиска сообщений для определенного адресата
exiqgrep -r [user]@domain

//-o указывает искать сообщения, старее, указанного количества секунд. старее 1 дня:
exiqgrep -o 86400 [...]

//-y ищет сообщения свежее указанного количества секунд. Найти сообщения, пришедшие в течении последнего часа:
exiqgrep -y 3600 [...]

//-s позволяет искать по размеру сообщения, совпадающего с заданным регулярным выражением:
root@localhost# exiqgrep -s '^7..$' [...]


Очистка очереди

exim -bp | exiqgrep -i | xargs exim -Mrm
Ctrl + ↓ Ранее