HimeraSearchDB
Carding_EbayThief
triada
CrackerTuch

НОВОСТИ Некоторые аспекты управления VDS-сервером под Linux

NewsBot
Оффлайн

NewsBot

.
.
Регистрация
21.07.20
Сообщения
40.408
Реакции
1
Репутация
0
VDS (Virtual Dedicated Server) — услуга, в рамках которой пользователь получает с максимальными привилегиями. Это эмуляция реального физического сервера, у него есть рутовый доступ, возможность установки произвольных операционных систем и любого софта. При этом он обходится значительно дешевле аренды сопоставимого по мощности физического сервера.

На сервер можно поставить ОС со своего образа или воспользоваться готовым образом в панели управления.

0u9ydabend68r01ea0t_yosbuoq.png


Предположим, мы поставили Debian 10 и веб-сервер Nginx, который идёт в стандартном репозитории (apt install nginx). Давайте посмотрим, какие полезные утилиты и команды помогут в управлении сервером под Linux. Рассмотрим и отдельно Nginx, и сам VDS-сервер в целом.

Содержание










Для начала желательно разобраться с самим веб-сервером. Nginx запускается по окончании установки. Проверяем этот факт:


systemctl status nginx

Выдача:


● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2020-08-17 08:52:54 UTC; 4min 23s ago
Docs: man:nginx(8)
Main PID: 3942 (nginx)
Tasks: 3 (limit: 4719)
Memory: 6.1M
CGroup: /system.slice/nginx.service
├─3942 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
├─3943 nginx: worker process
└─3944 nginx: worker process

Или просто вводим IP-адрес сервера в браузере:


http://your_server_ip

Если мы ещё не скопировали на сервер файлы своего сайта, то будет показана стандартная заглавная страница Nginx.

8ktj6jbxdwaucovqqq_zssglm2y.png


Базовые команды по управлению Nginx


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

Остановка веб-сервера:


sudo systemctl stop nginx

В случае запуска от имени root, команда такая:


systemctl stop nginx

Запуск после остановки:


systemctl start nginx

Остановка и повторный запуск (перезапуск):


systemctl restart nginx

Если вы просто внесли некие изменения в конфигурацию, Nginx может перегрузиться без потери текущих соединений. Это делается следующей командой:


systemctl reload nginx

По умолчанию, Nginx сконфигурирован на автоматический запуск при загрузке сервера. Такое поведение можно изменить следующей командой:


systemctl disable nginx

Снова включить автозапуск Nginx при загрузке сервера:


systemctl enable nginx

По умолчанию в Nginx сконфигурирован один набор правил server blocks для одного домена. Предполагается, что на вашем сервере размещается только один сайт. По умолчанию он должен располагаться в директории /var/www/html.

Предположим, что вы хотите создать в Nginx несколько наборов правил server blocks для нескольких сайтов или переместить файлы текущего сайта в другую директорию /var/www/your_domain.

Это делается следующими командами.

Сначала создаём нужную директорию на сервере.


mkdir -p /var/www/your_domain/html

Затем назначаем владельца этой директории с помощью переменной $USER, которая должна соответствовать текущему пользователю:


chown -R $USER:$USER /var/www/your_domain/html

Размещаем в указанной директории главную страничку index.html.

Потом нужно создать соответствующий набор правил для Nginx. В любом текстовом редакторе создаём файл /etc/nginx/sites-available/your_domain и копируем туда конфигурацию из файла по умолчанию, только с изменённым адресом и доменом:


server {
listen 80;
listen [::]:80;

root /var/www/your_domain/html;
index index.html index.htm index.nginx-debian.html;

server_name your_domain www.your_domain;

location / {
try_files $uri $uri/ =404;
}
}

В конце концов, активируем эту конфигурацию, прописав симлинк к новому конфигурационному файлу в директории sites-enabled, которую Nginx считывает при загрузке:


ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

После перезагрузки Nginx будет выдавать соответствующую страницу на запросы your_domain и www.your_domain.

Управление сервером


Какие вопросы чаще всего возникают у пользователей при управлении Linux-сервером? Какие инструменты можно порекомендовать даже не очень опытным администраторам?

Установка супервизора


— это система клиент/сервер, при помощи которой администратор контролирует процессы на сервере. Инструмент создает процессы в виде подпроцессов от своего имени.

Установка supervisord в Debian или Ubuntu предельно простая:


apt-get install supervisor

После этого демон супервизора уже запущен и будет запускаться при каждой загрузке системы.

Новые программы передаются в супервизор через конфигурационные файлы в директории /etc/supervisor/conf.d. Например, для скрипта long.sh конфигурационный файл может выглядеть следующим образом:


[program:long_script]
command=/usr/local/bin/long.sh
autostart=true
autorestart=true
stderr_logfile=/var/log/long.err.log
stdout_logfile=/var/log/long.out.log

Соответственно, скрипт будет автоматически запускаться при каждой загрузке системы и автоматически перезапускаться в случае выхода. Это значение может быть 'false' (не перезапускаться) или 'unexpected' (перезапускаться только в случае выхода с неожиданным кодом ошибки, по умолчанию, с любым кодом, кроме 0 или 2).

Две последние строчки — адреса журналов. Это минимальный шаблон конфигурации для программы в супервизоре.

После создания файла конфигурации для конкретной программы запускаем две команды, чтобы супервизор перечитал и применил новые конфигурации:


supervisorctl reread


supervisorctl update

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

В утилите supervisorctl есть интерактивный режим, в котором она запускается без аргументов:


$ supervisorctl
long_script RUNNING pid 12614, uptime 1:49:37
supervisor>

В этом режиме supervisorctl изначально выводит статус и время работы всех программ под управлением супервизора, а потом свю командную строку. Там можно ввести help — и увидеть список доступных команд:


supervisor> help

default commands (type help ):
=====================================
add clear fg open quit remove restart start stop update
avail exit maintail pid reload reread shutdown status tail version


Как видим, можно запускать, останавливать и перезапускать программы из командной строки с помощью команд start, stop и restart.

Выход из супервизорпа осуществляется по Ctrl-C или командой quit:


supervisor> quit


Анализ свободного места на диске


Стандартная утилита для просмотра информации о смонтированных разделах — это df. Она выводит список подключенных устройств и информацию о занятом месте.


df опции устройство

Параметр -h активирует режим читаемого человеком вывода (то есть в мегабайтах или гигабайтах):


$ df -h
Файловая система Размер Использовано Дост Использовано% Cмонтировано в
devtmpfs 925M 0 925M 0% /dev
tmpfs 936M 56K 936M 1% /dev/shm
tmpfs 936M 1,9M 934M 1% /run
tmpfs 936M 0 936M 0% /sys/fs/cgroup
/dev/sda3 15G 11G 4,2G 71% /
tmpfs 936M 192K 936M 1% /tmp
/dev/sdb4 133G 126G 974M 100% /home
tmpfs 188M 20K 188M 1% /run/user/42
tmpfs 188M 7,1M 181M 4% /run/user/1000

Информация о конкретной директории (например, /home):


df -h /home

Информация о разделах с заданной файловой системой:


df -h -t ext4

Поиск файлов командой find


Поиск по названию файла:


find -name "query"

Поиск по названию без учёта регистра:


find -iname "query"

«Обратный» поиск файлов, которые не соответствуют указанному шаблону:


find -not -name "query_to_avoid"

или


find \! -name "query_to_avoid"

Поиск по типу файла


find -type дескриптор_типа запрос

Некоторые из распространённых дескрипторов::

  • f — обычный файл
  • d — директория
  • l — символическая ссылка
  • c — файлы устройств посимвольного ввода-вывода
  • b — файлы устройств блочного ввода-вывода

Например, следующая команда выведет все устройства посимвольного ввода-вывода, установленные в системе:


find / -type c
/dev/parport0
/dev/snd/seq
/dev/snd/timer
/dev/autofs
/dev/cpu/microcode
/dev/vcsa7
/dev/vcs7
/dev/vcsa6
/dev/vcs6
/dev/vcsa5
/dev/vcs5
/dev/vcsa4
. . .

Есть фильтр по размеру и времени доступа/изменения. Например, вот команда для поиска всех файлов менее 50 байт:


find / -size -50c

Поиск всех файлов более 700 мегабайт:


find / -size +700M

Для поиска по времени доступа, модификации или изменения метаинформации файла используются параметры '-atime', '-mtime' и '-ctime' с символами плюса и минуса для указания диапазона больше и меньше указанного, соответственно.

Поиск файлов, которые были модифицированы менее суток назад:


find / -mtime -1

Файлы с временем доступа более трёх суток назад:


find / -atime +3

Файлы, которые изменялись за последнюю минуту:


find / -mmin -1

Файлы, которые новее указанного файла:


find / -newer myfile

Доступен поиск по владельцу ('-user', '-group') и по файлам с конкретными разрешениями ('-perm'). На всех найденных файлах можно сразу провести какое-нибудь действие ('-exec').

Тестирование TCP и UDP-соединений


В комплекте Linux идёт большое количество полезных утилит. Некоторые системные администраторы способны выполнять большинство задач, пользуясь только встроенным инструментарием, без установки дополнительных программ. Настоящий швейцарский нож среди встроенных инструментов Linux — сетевая утилита netcat. Общий синтаксис:


netcat [options] host port

Эта команда инициирует TCP-соединение на заданный хост по указанному порту. Если вместе TCP нужно протестировать UDP-соединение, то указываем опцию -u:


netcat -u host port

Диапазон портов:


netcat host startport-endport

В большинстве систем можно писать как netcat, так и nc.

Сканирование портов


Одно из типичных применений netcat — сканирование портов, опция -z означает сканирование вместо установления соединения. Используем её вместе с опцией -v для выдачи более детальной информации при сканировании портов с 1 до 1000:


netcat -z -v domain.com 1-1000

Выдача будет выглядеть примерно так:


nc: connect to domain.com port 1 (tcp) failed: Connection refused
nc: connect to domain.com port 2 (tcp) failed: Connection refused
nc: connect to domain.com port 3 (tcp) failed: Connection refused
nc: connect to domain.com port 4 (tcp) failed: Connection refused
nc: connect to domain.com port 5 (tcp) failed: Connection refused
nc: connect to domain.com port 6 (tcp) failed: Connection refused
nc: connect to domain.com port 7 (tcp) failed: Connection refused
. . .
Connection to domain.com 22 port [tcp/ssh] succeeded!
. . .

Впрочем, для этой задачи имеется более продвинутая, специализированная программа nmap. Устанавливаем её:


apt-get update
apt-get install nmap

Эта утилита выдаёт более подробную информацию о портах. Реестр известных портов /usr/share/nmap/nmap-services содержит более 20 тысяч строк, в том числе дополнительные поля, такие как средняя частота открытия конкретного порта на серверах в интернете (третья колонка):


. . .
tcpmux 1/tcp 0.001995 # TCP Port Service Multiplexer [rfc-1078]
tcpmux 1/udp 0.001236 # TCP Port Service Multiplexer
compressnet 2/tcp 0.000013 # Management Utility
compressnet 2/udp 0.001845 # Management Utility
compressnet 3/tcp 0.001242 # Compression Process
compressnet 3/udp 0.001532 # Compression Process
unknown 4/tcp 0.000477
rje 5/udp 0.000593 # Remote Job Entry
unknown 6/tcp 0.000502
echo 7/tcp 0.004855
echo 7/udp 0.024679
echo 7/sctp 0.000000
. . .

Не рекомендуется запускать сканирование портов чужого сервера, поскольку администратор системы может принять такие действия за враждебные. Nmap предназначен для исследования своего собственного сервера, а поэкспериментировать можно на специально предназначенном для тестовых целей сервере scanme.nmap.org.

Некоторые команды требует длительного времени для выполнения.

Сканирование операционной системы на хосте:


nmap -O хост

Сканирование диапазона хостов от xxx.xxx.xxx.xxx до yyy.yyy.yyy.yyy:


nmap -PN xxx.xxx.xxx.xxx-yyy.yyy.yyy.yyy

Сканирование сетевого диапазона с поиском доступных сервисов:


nmap -sP диапазон_адресов

Сканирование конкретного порта:


nmap -p номер_порта хост

Сканирование всех открытых портов TCP и UDP:


nmap -n -PN -sT -sU -p- хост

Изучение версий ПО, работающего на хосте:


nmap -PN -p номер_порта хост

Есть много других команд, параметров и вариантов использования nmap. Сканирование портов своего VDS-сервера позволяет определить потенциальные векторы атак и уязвимости, поскольку злоумышленник начнёт свои действия именно со сканирования.

Пересылка сообщений и файлов


С помощью ключа -l можно поставить на прослушивание конкретный порт на сервере:


netcat -l 5438

На другой машине мы указываем подключиться к машине по данному порту:


netcat domain.com 5438

Теперь между двумя системами установлен канал связи. По нему можно передавать текстовые сообщения.

Таким способом можно даже передать файл. Для этого команду прослушивания направляем сразу в файл:


netcat -l 5438 > полученный_файл

На другом компьютере вместо текстового сообщения подаём на вход оригинальный файл:


netcat domain.com 5438 < оригинальный_файл

Аналогично можно передавать самые разные вещи, например, содержимое директорий, заархивированное на лету в tarball:


tar -czf - * | netcat domain.com 4444

Таким же способом можно на одной стороне создать образ диска (dd), отправить его в указанный порт по созданному TCP-соединению — и принять на другой системе.

Добавление и удаление пользователей


Для добавления, удаления пользователей и выдачи им привилегий sudo нужно для начала подключиться к серверу как root:


ssh root@ip_вашего_сервера

После этого добавляем пользователя:


adduser newuser

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

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


usermod -aG sudo user1

Вместо user1 указываем имя пользователя, которого добавили ранее. Теперь он сможет запускать любые команды через sudo:


sudo команда

Имея такие права, этот пользователь может удалять других пользователей:


sudo deluser --remove-home username

Опция --remove-home удаляет также и домашнюю директорию пользователя.

Сам root имеет право выполнить команду deluser без sudo.

Конечно, здесь далеко не полный список полезных инструментов для управления VDS-сервером. Но эти вопросы часто возникают у начинающих системных администраторов, которые подняли свой первый сервер, поставили ОС и начинают разбираться в мире Linux-администрирования.


 
Сверху Снизу