Справочный портал в мире информационных технологий - linuxgik.ru

rsync

Должна быть установлена на всех машинах.

В rsync всегда сначала указываем источник, а потом место назначения, т.е. сначала что копируем, а потом куда копируем.
Всегда используйте параметр -nv перед прогоном. rsync может натворить огромную головную боль, если что-то не так сделать.

Завершающий слеш "/"

Источник без завершающего слеша скопирует сам каталог /path/dir в удаленный каталог /dest_dir:
~]$ rsync -a /path/dir user@host:dest_dir

Путь к каталогу источнику с косой чертой в конце скопирует не сам каталог /path/dir, а все содержимое в удаленный каталог /dest_dir:
~]$ rsync -a /path/dir/ user@host:dest_dir

Небольшая инструкция по синхронизации

  1. Синхронизируем локальный каталог с удаленным сервером:
    ~]$ rsync -a -e "ssh -p 7967" html/ user@host:html/

    Примечание: -e "ssh -p 7967" указывает коннектиться по определенному порту.

  2. На удаленной машине синхронизируем каталоги:
    ~]$ rsync -a html/ /var/www/html/

Исключить каталог из операции переноса

~]$ rsync -a -e "ssh -p 7967" --exclude 'res/header' html/ user@host:html/

Команда scp

scp — копирует файлы между хостами в Сети. Работает подобно команде cp.

Примеры:

Внимание: для scp порт указывается с большой "P".

Инструкция по настройке сервера

Инструкция универсальна и адаптирована для семейств RHEL/CentOS/AlmaLinux и Debian/Ubuntu.

1. Настройка записей DNS

Заходим в личный кабинет на сайте, где у вас зарегистрирован домен.

Нужно в запись А добавить ip-адрес сервера. Для your_domain.com и для www.your_domain.com. Для IPv6 — AAAA-запись.

Важно: DNS-записи должны быть настроены ДО получения SSL-сертификата, так как процесс проверки права на домен требует доступности вашего домена.

2. Создаем пользователя с правами sudo

Используем VNC на сайте хостера.

Выходим из сессии root и заходим под новым пользователем через терминал. VNC хостера больше не нужен.


3. Настройка SSH

Внимание. Для генерации ключей-SSH в Windows 11, смотрите: Генерация ключей-ssh в терминале Windows

3.1 Генерация ключа и копирование открытого ключа на сервер

Если ssh-copy-id недоступен, скопируйте ~/.ssh/id_rsa.pub в ~/.ssh/authorized_keys на сервере.

Внимание: перед отключением паролей проверьте подключение по ключу в новой сессии.

3.2 Настройка файла /etc/ssh/sshd_config

Откройте файл конфигурации и внесите изменения:

~]# nano /etc/ssh/sshd_config

⚠️ Для того чтобы изменения вступили в силу, необходимо перезагрузить SSH-сервер. Команда перезагрузки приведена в пункте 3.6 — её следует выполнять только после завершения всех предыдущих настроек. Если применить перезагрузку до открытия нового порта в firewall и MAC, вы потеряете доступ к серверу.

3.3 Разрешить системе обязательного доступа (SELinux / AppArmor) использовать нестандартный порт

SELinux (CentOS/RHEL) и AppArmor (Debian/Ubuntu) — системы обязательного контроля доступа (MAC — Mandatory Access Control). Они ограничивают процессы, в том числе могут блокировать использование нестандартных портов.

CentOS / RHEL (SELinux)
  • Проверить статус SELinux — ~]$ sestatus. Если SELinux отключен, переходим к следующему шагу, чтобы открыть порт в брандмауэре.
  • Установить утилиты управления — ~]# dnf install policycoreutils-python-utils
  • Разрешить нестандартный порт — ~]# semanage port -a -t ssh_port_t -p tcp 2222
  • Проверить — ~]# semanage port -l | grep ssh
Debian / Ubuntu (AppArmor)

AppArmor по умолчанию не ограничивает привязку sshd к нестандартным портам — дополнительных действий не требуется.

3.4 Открытие порта в межсетевом экране (firewall)

CentOS / RHEL (firewalld)
  • ~]# firewall-cmd --add-port=2222/tcp
  • ~]# firewall-cmd --runtime-to-permanent
  • Или сразу добавить порт в постоянную конфигурацию — ~]# firewall-cmd --permanent --add-port=2222/tcp, затем ~]# firewall-cmd --reload
  • Проверить — ~]# firewall-cmd --list-ports, ~]# firewall-cmd --query-port=2222/tcp
Debian / Ubuntu (UFW)
  • Установить UFW (если нет) — ~]# apt install ufw
  • Открыть новый порт — ~]# ufw allow 2222/tcp
  • Удалить старый (если был 22) — ~]# ufw delete allow 22/tcp
  • Включить firewall — ~]# ufw enable
  • Проверить — ~]# ufw status

3.5 Права на ключи

Если ключ создан командой ssh-keygen, нужные права будут установлены автоматически.

3.6 Применение конфигурации и проверка

💡 Не закрывайте текущую SSH-сессию, пока не убедитесь, что подключение по новому порту работает. Если что-то пойдёт не так, вы сможете исправить ошибку в открытой сессии.

Базовая настройка SSH завершена.


4. Установка и запуск веб-сервера

Выберите веб-сервер для установки: Apache или Nginx.

Для запуска веб-сервера нужно:
  1. Установить веб-сервер
  2. Открыть порт в межсетевом экране
  3. Настроить автоматический запуск для службы httpd или nginx

4.1 Установка Apache

4.2 Установка Nginx

4.3 Открытие портов в firewall

Для работы веб-сервера откройте порты 80 (HTTP) и 443 (HTTPS):

Примечание: в системе AlmaLinux 8, при установке веб-сервера Apache, порты автоматически добавились в открытые. Добавлять ничего не надо, нужно только проверить конфигурацию зоны, чтобы убедиться, что порты открыты.

Готово. Проверьте работу сервера, введя в браузере IP-адрес или доменное имя.

Проверить доступность:

~]$ curl -I http://YOUR_SERVER_IP

4.4 Конфигурация по умолчанию

Конфигурационный файл — /etc/nginx/nginx.conf. В нём веб-сервер настроен на работу на 80 порту, и нацелен на каталог контента в /usr/share/nginx/html/


5. Получение и настройка SSL-сертификата Let's Encrypt

Инструкция исходит из анализа, который представлен в моём посте О сертификатах Let's Encrypt.

5.1 Установка Certbot

Certbot — это официальный клиент для получения и управления сертификатами Let's Encrypt.

Установите EPEL-репозиторий и Certbot:

sudo dnf install -y epel-release
sudo dnf install -y certbot python3-certbot-nginx   # для Nginx
# или
sudo dnf install -y certbot python3-certbot-apache  # для Apache

5.2 Автоматическая настройка для Apache

Делаем бекап. Переименовываем конфиг /etc/httpd/conf.d/ssl.conf — этот файл конфигурации создается автоматически в AlmaLinux 8, при установке httpd. В нём подключается сертификат /etc/pki/tls/certs/localhost.crt для локальной разработки.

sudo mv /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf.bak

Создаем виртуальный хост:

sudo vim /etc/httpd/conf.d/linuxgik.ru.conf

<VirtualHost *:80>
    ServerName linuxgik.ru
    ServerAlias www.linuxgik.ru
    DocumentRoot /var/www/html

    ErrorLog /var/log/httpd/linuxgik.ru-error.log
    CustomLog /var/log/httpd/linuxgik.ru-access.log combined

    <Directory "/var/www/html">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Проверяем синтаксис:

sudo apachectl configtest

Перезагружаем:

sudo systemctl reload httpd

Проверяем что виртуальный хост работает:

curl -I http://linuxgik.ru

5.3 Получение сертификата

Для Apache:

sudo certbot --apache

Для Nginx (нужно настроить виртуальный хост):

sudo certbot --nginx

Для nginx я пока что не делал сам, поэтому только предполагаю, что так.

5.4 Настройка автоматического продления

Проверить работу автоматического обновления:

sudo certbot renew --dry-run


6. Рекомендации по безопасности и эксплуатации