Добавить для пользователя права sudo

7 сентября, 15:15

Sudo сам по себе ничего не знает о пользователях, если разрешён вход пользователя root.


Чтобы исправить ситуацию нужно
Добавить user в файл «/etc/sudoers», для этого есть команда «visudo».


1 вариант:


Открываем терминал набираем


su -l


вводим пароль от root.
Появится приглашение командной строки «#»
затем набираем


visudo


откроется файл /etc/sudoers


Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification
# User alias specification
# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL


После root ALL=(ALL:ALL) ALL допишем:
user (имя пользователя) ALL=(ALL:ALL) ALL
Жмём «ctrl+o» «enter» «ctrl+x».
Нужно перезайти в систему и готово.


2й вариант:


Всё тоже, только ищем(если нет добавляем) строку


%sudo   ALL=(ALL:ALL) ALL


Cохраняем «ctrl+o» , «enter» , «ctrl+x».
Дальше команда


adduser user sudo


это добавит пользователя в группу sudo.

Теперь с помощью sudo пользователь может действовать c привилегиями root, используя свой пароль.
Для более тонкой настройки в sudo нужно создавать свои alias'ы(правила).


Источник: https://wiki.debian.org/ru/sudo

Настройка Linux — Протокол TCP

29 августа, 11:42

При высоких нагрузках на сервер, нужно настроить параметры системы

Параметр timeout_timewait

Значение timeout_timewait определяет время, которое должно пройти прежде чем TCP/IP сможет освободить завершенное соединение и повторно использовать его ресурсы.

Этот интервал между завершением и освобождением соединения называется состоянием TIME_WAIT или состоянием двойного максимального срока жизни сегмента (2MSL). На протяжении этого периода времени повторно открыть соединение с клиентом и сервером легче, чем установить новое соединение.

При уменьшения значения этого параметра TCP/IP может быстрее высвобождать завершенные соединения и предоставлять больше ресурсов для новых соединений. Настройте этот параметр если выполняемому приложению требуется быстрое высвобождение, создание новых соединений или настройка в связи с низкой производительностью, вызванной наличием нескольких соединений в состоянии TIME_WAIT.

Минимальное рекомендуемое значение равно 30 секундам. С помощью описанной ниже процедуры можно просмотреть или изменить это значение.


cat /proc/sys/net/ipv4/tcp_fin_timeout // просмотр значения по умолчанию
echo 60 > /proc/sys/net/ipv4/tcp_fin_timeout // установили 60 секунд


Незавершенное соединение

Может потребоваться увеличить резервные значения соединения для обработки всплеска входящих запросов на установку соединения. При одновременном получении нескольких запросов, большее значение увеличит число ожидающих соединений, которые могут быть поддержаны, что приведет к снижению сбоев соединений.

С помощью описанной ниже процедуры можно просмотреть или изменить это значение. где ЧИСЛО — является значением, превышающим максимальное число предполагаемых запросов на установление соединения.


cat /proc/sys/net/core/netdev_max_backlog
cat /proc/sys/net/core/somaxconn

echo ЧИСЛО > /proc/sys/net/core/netdev_max_backlog
echo ЧИСЛО > /proc/sys/net/core/somaxconn


Параметр tcp_keepalive_time

Значение tcp_keepalive_time контролирует частоту попыток TCP/IP проверить состояние простаивающего соединения. Если за указанное время деятельность отсутствует, будет отправлен контрольный пакет. Если сеть в порядке и партнер активен, то он отправит ответ.

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

По умолчанию Linux отправляет контрольный пакет при отсутствии активности в простаивающем соединении дольше, чем 7 200 секунд (2 часа). Зачастую более предпочтительным является значение 1 800 секунд, позволяющее обнаруживать половину закрытых соединений за 30 минут.

С помощью описанной ниже процедуры можно просмотреть или изменить это значение.


cat /proc/sys/net/ipv4/tcp_keepalive_time
echo 300 > /proc/sys/net/ipv4/tcp_keepalive_time // 300 сек


Параметр tcp_keepalive_intvl

Значение tcp_keepalive_intvl определяет частоту отправки TCP/IP контрольных пакетов при отсутствии ответа на них от партнера. Соединение будет разорвано после того, как число последовательно отправленных контрольных пакетов, оставшихся без ответа, превысит значение tcp_keepalive_probes.

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

По умолчанию Linux ждет получения ответа на отправленный контрольный пакет 75 секунд перед его повторной отправкой. Зачастую оптимальным значением является 15 секунд, позволяющее быстрее определить потерю партнера.

С помощью описанной ниже процедуры можно просмотреть или изменить это значение.


cat /proc/sys/net/ipv4/tcp_keepalive_intvl
echo 60 > /proc/sys/net/ipv4/tcp_keepalive_intvl // 60 сек


Параметр tcp_keepalive_probes

Значение tcp_keepalive_probes определяет число повторных отправок TCP/IP неподтвержденного контрольного пакета по имеющемуся соединению. Если надежность сети низкая, рекомендуется увеличить это значение для повышения эффективности соединений. Если качество сети высоко имеет смысл уменьшить время проверки потери партнера.

По умолчанию Linux отправляет 9 контрольных пакетов перед завершением соединения. Зачастую оптимальным значением является 5 повторов, позволяющее быстрее определить потерю партнера.

С помощью описанной ниже процедуры можно просмотреть или изменить это значение.


cat /proc/sys/net/ipv4/tcp_keepalive_probes
echo 3 > /proc/sys/net/ipv4/tcp_keepalive_probes // 3 повтора отправки контрольных пакетов.


Данные настройки сделают Ваш сервер более стойким.

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

21 августа, 10:53

Отдельно рассмотрим PHP-FPM (Nginx)
нужно правильно рассчитать значения (параметры) в зависимости от объема памяти в системе


Посмотрим сколько памяти используется каждым дочерним процессом (PHP-FPM)

ps -ylC php-fpm --sort:rss


Смотрим столбец RSS. В нем показано использование необработанной физической памяти с помощью процессов PHP-FPM в килобайтах.


Пример:

На сервере RAM 8 гб
максимальный размер дочернего PHP-FPM 20 мб
pm.max_children = 8000 / 20 = 400


Команда для проверки среднего размера потребления памяти одним процессом PHP-FPM

ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'


Пример конфига:


pm = dynamic
pm.start_servers = 50
pm.min_spare_servers = 25
pm.max_children = 300
pm.max_spare_servers = 60
pm.max_requests = 600


Я специально значение pm.max_children не установил на максимум чтобы не перегружать систему, так как система используется еще для других целей.

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

25 мая 2018, 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 мая 2018, 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

Ctrl + ↓ Ранее