VDS (Virtual Dedicated Server) — услуга, в рамках которой пользователь получает виртуальный выделенный сервер с максимальными привилегиями. Это эмуляция реального физического сервера, у него есть рутовый доступ, возможность установки произвольных операционных систем и любого софта. При этом он обходится значительно дешевле аренды сопоставимого по мощности физического сервера.
На сервер можно поставить ОС со своего образа или воспользоваться готовым образом в панели управления.
![](https://habrastorage.org/webt/0u/9y/da/0u9ydabend68r01ea0t_yosbuoq.png)
Предположим, мы поставили Debian 10 и веб-сервер Nginx, который идёт в стандартном репозитории (
Для начала желательно разобраться с самим веб-сервером. Nginx запускается по окончании установки. Проверяем этот факт:
Выдача:
Или просто вводим IP-адрес сервера в браузере:
Если мы ещё не скопировали на сервер файлы своего сайта, то будет показана стандартная заглавная страница Nginx.
![](https://habrastorage.org/webt/8k/tj/6j/8ktj6jbxdwaucovqqq_zssglm2y.png)
Примечание. Если пользователь не имеет рутовых прав, то для выполнения каждой команды он должен получить рутовые привилегии с помощью команды
Остановка веб-сервера:
В случае запуска от имени root, команда такая:
Запуск после остановки:
Остановка и повторный запуск (перезапуск):
Если вы просто внесли некие изменения в конфигурацию, Nginx может перегрузиться без потери текущих соединений. Это делается следующей командой:
По умолчанию, Nginx сконфигурирован на автоматический запуск при загрузке сервера. Такое поведение можно изменить следующей командой:
Снова включить автозапуск Nginx при загрузке сервера:
По умолчанию в Nginx сконфигурирован один набор правил server blocks для одного домена. Предполагается, что на вашем сервере размещается только один сайт. По умолчанию он должен располагаться в директории
Предположим, что вы хотите создать в Nginx несколько наборов правил server blocks для нескольких сайтов или переместить файлы текущего сайта в другую директорию
Это делается следующими командами.
Сначала создаём нужную директорию на сервере.
Затем назначаем владельца этой директории с помощью переменной
Размещаем в указанной директории главную страничку
Потом нужно создать соответствующий набор правил для Nginx. В любом текстовом редакторе создаём файл
В конце концов, активируем эту конфигурацию, прописав симлинк к новому конфигурационному файлу в директории
После перезагрузки Nginx будет выдавать соответствующую страницу на запросы
Какие вопросы чаще всего возникают у пользователей при управлении Linux-сервером? Какие инструменты можно порекомендовать даже не очень опытным администраторам?
Supervisor — это система клиент/сервер, при помощи которой администратор контролирует процессы на сервере. Инструмент создает процессы в виде подпроцессов от своего имени.
Установка supervisord в Debian или Ubuntu предельно простая:
После этого демон супервизора уже запущен и будет запускаться при каждой загрузке системы.
Новые программы передаются в супервизор через конфигурационные файлы в директории
Соответственно, скрипт будет автоматически запускаться при каждой загрузке системы и автоматически перезапускаться в случае выхода. Это значение может быть 'false' (не перезапускаться) или 'unexpected' (перезапускаться только в случае выхода с неожиданным кодом ошибки, по умолчанию, с любым кодом, кроме 0 или 2).
Две последние строчки — адреса журналов. Это минимальный шаблон конфигурации для программы в супервизоре.
После создания файла конфигурации для конкретной программы запускаем две команды, чтобы супервизор перечитал и применил новые конфигурации:
На этом этапе наша программа или скрипт уже должны запуститься, что можно проверить по логам.
В утилите
В этом режиме supervisorctl изначально выводит статус и время работы всех программ под управлением супервизора, а потом свю командную строку. Там можно ввести
Как видим, можно запускать, останавливать и перезапускать программы из командной строки с помощью команд start, stop и restart.
Выход из супервизорпа осуществляется по Ctrl-C или командой quit:
Стандартная утилита для просмотра информации о смонтированных разделах — это
Параметр -h активирует режим читаемого человеком вывода (то есть в мегабайтах или гигабайтах):
Информация о конкретной директории (например, /home):
Информация о разделах с заданной файловой системой:
Поиск файлов командой
Поиск по названию файла:
Поиск по названию без учёта регистра:
«Обратный» поиск файлов, которые не соответствуют указанному шаблону:
или
Поиск по типу файла
Некоторые из распространённых дескрипторов::
Например, следующая команда выведет все устройства посимвольного ввода-вывода, установленные в системе:
Есть фильтр по размеру и времени доступа/изменения. Например, вот команда для поиска всех файлов менее 50 байт:
Поиск всех файлов более 700 мегабайт:
Для поиска по времени доступа, модификации или изменения метаинформации файла используются параметры '-atime', '-mtime' и '-ctime' с символами плюса и минуса для указания диапазона больше и меньше указанного, соответственно.
Поиск файлов, которые были модифицированы менее суток назад:
Файлы с временем доступа более трёх суток назад:
Файлы, которые изменялись за последнюю минуту:
Файлы, которые новее указанного файла:
Доступен поиск по владельцу ('-user', '-group') и по файлам с конкретными разрешениями ('-perm'). На всех найденных файлах можно сразу провести какое-нибудь действие ('-exec').
В комплекте Linux идёт большое количество полезных утилит. Некоторые системные администраторы способны выполнять большинство задач, пользуясь только встроенным инструментарием, без установки дополнительных программ. Настоящий швейцарский нож среди встроенных инструментов Linux — сетевая утилита
Эта команда инициирует TCP-соединение на заданный хост по указанному порту. Если вместо TCP нужно протестировать UDP-соединение, то указываем опцию
Диапазон портов:
В большинстве систем можно писать как
Одно из типичных применений netcat — сканирование портов, опция
Выдача будет выглядеть примерно так:
Впрочем, для этой задачи имеется более продвинутая, специализированная программа
Эта утилита выдаёт более подробную информацию о портах. Реестр известных портов
Не рекомендуется запускать сканирование портов чужого сервера, поскольку администратор системы может принять такие действия за враждебные. Nmap предназначен для исследования своего собственного сервера, а поэкспериментировать можно на специально предназначенном для тестовых целей сервере
Некоторые команды требует длительного времени для выполнения.
Сканирование операционной системы на хосте:
Сканирование диапазона хостов от xxx.xxx.xxx.xxx до yyy.yyy.yyy.yyy:
Сканирование сетевого диапазона с поиском доступных сервисов:
Сканирование конкретного порта:
Сканирование всех открытых портов TCP и UDP:
Изучение версий ПО, работающего на хосте:
Есть много других команд, параметров и вариантов использования nmap. Сканирование портов своего VDS-сервера позволяет определить потенциальные векторы атак и уязвимости, поскольку злоумышленник начнёт свои действия именно со сканирования.
С помощью ключа
На другой машине мы указываем подключиться к машине по данному порту:
Теперь между двумя системами установлен канал связи. По нему можно передавать текстовые сообщения.
Таким способом можно даже передать файл. Для этого команду прослушивания направляем сразу в файл:
На другом компьютере вместо текстового сообщения подаём на вход оригинальный файл:
Аналогично можно передавать самые разные вещи, например, содержимое директорий, заархивированное на лету в
Таким же способом можно на одной стороне создать образ диска (
Для добавления, удаления пользователей и выдачи им привилегий
После этого добавляем пользователя:
Изначально у него нет никаких привилегий. Но если это основной пользователь системы, то мы можем назначить ему административные привилегии, чтобы он мог выполнять рутинные задачи по обслуживанию и поддержке сервера.
Для назначения административных привилегий нужно добавить пользователя в группу sudo. Пользователям из этой группы разрешено запускать команду
Вместо
Имея такие права, этот пользователь может удалять других пользователей:
Опция
Сам root имеет право выполнить команду
Конечно, здесь далеко не полный список полезных инструментов для управления VDS-сервером. Но эти вопросы часто возникают у начинающих системных администраторов, которые подняли свой первый сервер, поставили ОС и начинают разбираться в мире Linux-администрирования.
На сервер можно поставить ОС со своего образа или воспользоваться готовым образом в панели управления.
![](https://habrastorage.org/webt/0u/9y/da/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.
![](https://habrastorage.org/webt/8k/tj/6j/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-сервером? Какие инструменты можно порекомендовать даже не очень опытным администраторам?
Установка супервизора
Supervisor — это система клиент/сервер, при помощи которой администратор контролирует процессы на сервере. Инструмент создает процессы в виде подпроцессов от своего имени.
Установка 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-администрирования.
![](https://habrastorage.org/webt/8p/3v/z4/8p3vz47nluspfyc0axlkx88gdua.png)