Настройка после установки

Peter Boy, Stephen Daley, Kevin Fenzi Version F36-F45 Last review: 2026-09-13
Это руководство предлагает рекомендуемый контрольный список задач для обеспечения безопасной и надёжной работы Fedora Server. Системные администраторы могут сами решать, применимы ли эти задачи к их конкретному сценарию использования.

В настоящее время мы разбиваем это руководство на серию более коротких, детализированных статей, в основном в стиле «как сделать».

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

SSH включён по умолчанию в Linux и macOS. В Windows 10 требуется как минимум версия 1809 или дополнительная программа PuTTY.

1. Упрощённый доступ для административной учётной записи

При установке по умолчанию учётная запись root заблокирована, а административная работа делегируется пользовательской учётной записи, обладающей правами root (sudo). Удобно сделать процесс входа максимально комфортным.

An SSH key file saves the otherwise annoying and error‑prone typing of the hopefully secure and sufficiently long password. Additionally, you may prepare your local desktop to use a short name instead of having to type in a complete FQN hostname.

  1. On your desktop (Linux or macOS), create an SSH keyfile if not already available. It should not be secured by password to enable automatic processing.

    […]# mkdir ~/.ssh
    […]# cd ~/.ssh
    […]# ssh-keygen -b 4096 -C "<YOUR_ACCOUNT>@example.com" -f id_<outputkeyfile>
  2. Transfer the key file to your server.

    […]$ ssh-copy-id -i $outputkeyfile.pub <YOUR_ACCOUNT>@host.example.com
  3. Create a config file on your desktop with a convenient host name for your server.

    […]$ vi ~/.ssh/config
    Host <MYHOST>
            Hostname host.example.com
            User <YOUR_ACCOUNT>
            ProxyCommand none
            ForwardAgent no
            ForwardX11 no
            Port 22
            KeepAlive yes
            IdentityFile ~/.ssh/$outputkeyfile
  4. Проверьте конфигурацию

    […]$ ssh <MYHOST>

2. Проверка доступа к Cockpit

Open Cockpit in your desktop’s browser https://host.example.com:9090. Accept the security warning of your browser. Cockpit uses a self signed certificate.

If you disabled root access during installation (recommended), logging in as root is not possible.

Login with your administrative user account. At the top you will see a warning that the Web Console is running with limited permissions. Enable administrator access so that all administrative privileges are automatically available after login.

3. Отключение входа по SSH с паролями для системных пользователей

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

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

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

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

  1. On the server, create a configuration file and edit

    […]# vi /etc/ssh/sshd_config.d/60-local.conf
    
    # Local customization: disable password login except for
    # one (optionally add some more) user as a fallback option.
    PasswordAuthentication no
    
    Match User hostmin
        PasswordAuthentication yes
    #Match User hostmin2
    #    PasswordAuthentication yes
  2. Reload the sshd daemon

    […]# systemctl reload sshd
  3. Test that everything works as expected

    • Is an authorized user able to log in?

    • Are other users rejected with the message "Permission denied (publickey,gssapi-keyex,gssapi-with-mic)"?

    • If this does not work and/or other users are able to log in with a password besides your known authorized user,

      • install the latest updates.

      • check the file /etc/ssh/sshd_config.d/50-redhat.conf to make sure that it does not include the line "PasswordAuthentication yes" (as this is already the default and should not be repeated or else it could hinder other configurations).

4. Повышение безопасности доступа к Cockpit

Cockpit полагается на вход по паролю в свой веб-интерфейс, даже для root (если только учётная запись root не полностью заблокирована; блокировка учётной записи в рамках ssh здесь не помогает). И таким образом он является потенциальной целью для атак методом перебора. В большинстве случаев он редко используется в повседневной работе, и хорошей практикой может быть удаление общей доступности в брандмауэре. Вместо этого получайте доступ к Cockpit одним из трёх безопасных способов, описанных ниже.

There are several ways to improve the security of Cockpit access. All of them are based on permanently withdrawing access to Cockpit in the firewall. So, reconfigure the firewall permanently.

[…]# firewall-cmd --permanent --remove-service=cockpit
[…]# firewall-cmd --reload

Use one of the following alternatives to access Cockpit.

  1. Access Cockpit via ssh tunnel

    • Login to the server via ssh and setup a tunnel in one go

      ssh host.example.com -L 9090:host.example.com:9090
    • While you remain logged in, open in your local browser localhost:9090

  2. Add Cockpit service temporarily on demand

    • Login to the server and reconfigure firewall

      firewall-cmd –add-service=cockpit
    • When finished remove cockpit again

      firewall-cmd –remove-service=cockpit
  3. Use a secure local proxy

    • Install Cockpit on your local Fedora workstation or on a lab server shielded by a firewall. Configure this instance to access any of your remote Cockpit instances using Cockpits remote administration capability. It uses a protected ssh connection in the public network.

    • In the upper left corner of Cockpit you will see the name of the logged-in user and the (local) lab server name, along with an expand icon. This opens a box where you can switch to another server or add a new one.

    • The Add new host link opens a simple form to fill in hostname and user. Use your administrative user name on the (remote) server. And you can assign a color. Select automatic login via ssh keyfile. Cockpit will create one for you if none exists or otherwise uses an existing one. For a newly created key, Cockpit installs the public key on the remote server, too.

5. Необязательно: настройка входа root через ключевой файл

Даже если вы активировали доступ root во время установки, вы, надеемся, оставили вариант по умолчанию, ограничивающий root аутентификацией по ключевому файлу. Поэтому вам нужно настроить ключевой файл перед любым входом по ssh. Но учтите! Вы всё ещё можете войти в веб-интерфейс Cockpit. Поэтому в этом случае обязательно реализуйте дополнительные меры безопасности, описанные в предыдущей главе!

5.1. Подготовка пары закрытого/открытого ключей

Этот шаг следует выполнять только в том случае, если пары ключей ещё не существует. Лучше всего создать ключ в каталоге .ssh пользователя рабочего стола. Его не следует защищать паролем, чтобы обеспечить автоматическую обработку. Именование с ведущим id_ и завершающим сокращением типа, например _rsa, — это лишь распространённое соглашение, но полезное.

  1. Выполните на локальном рабочем столе

    $ mkdir ~/.ssh
    $ cd ~/.ssh
    $ ssh-keygen -t rsa -b 4096  -C "root@example.com" -f <outputkeyfile>

Хотя RSA широко используется, вы можете соответствующим образом изменить тип ключа.

5.2. Перенос и установка открытого ключа на сервер

Обычно вы используете ssh-copy-id для установки открытого ключа на сервере. Однако это требует входа по паролю, который был отключён для root во время установки. Поэтому теперь требуется обходной путь.

  1. Войдите на свой сервер через sftp, используя непривилегированную административную учётную запись, и передайте файл открытого ключа

    $ sftp hostmin@example.com
    sftp> put ~/.ssh/<outputkeyfile>.pub
    sftp> quit
  2. Снова войдите на свой сервер по ssh, используя непривилегированную административную учётную запись

    $ ssh  hostmin@example.com
  3. На сервере получите права root, переместите файл ключа и настройте права доступа

    $ sudo su -
    # mkdir /root/.ssh
    # cd  /root/.ssh
    # mv /home/hostmin/<outputkeyfile>.pub /root/.ssh/authorized_keys
    # chown  -R  root:root  /root/.ssh
    # chmod 700 /root/.ssh
    # chmod 600 ~/.ssh/*
    # restorecon  -R  -vF  /root/.ssh

5.3. Проверка и упрощение доступа

  1. На своей локальной рабочей станции проверьте доступ на основе ключевого файла:

    # ssh -i ~/.ssh/<outputkeyfile>  root@example.com

    при необходимости измените файл, тип файла и доменное имя.

  2. Чтобы упростить доступ, создайте файл конфигурации на своём рабочем столе и определите короткое имя для подключения:

    # vi ~/.ssh/config
    #  ###########################################################
    #  my remote server, root account
    #  ###########################################################
    Host myhost
            Hostname myhost.example.com
            User root
            ProxyCommand none
            ForwardAgent no
            ForwardX11 no
            Port 22
            KeepAlive yes
            IdentityFile ~/.ssh/<outputkeyfile>

    снова замените имена соответствующим образом.

  3. Проверьте, всё ли работает:

    # ssh myhost

6. Перепроверьте имя хоста и синхронизацию времени

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

  1. Проверьте правильность имени хоста

    # hostnamectl
    • При необходимости задайте имя хоста:

      # hostnamectl  set-hostname  <YourFQDN>
  2. Проверка часового пояса, синхронизации времени, времени

    # timedatectl
    • При необходимости скорректируйте часовой пояс:

      # timedatectl set-timezone  <ZONE>
    • При необходимости активируйте синхронизацию времени:

      timedatectl set-ntp true
    • При необходимости скорректируйте время:

      # timedatectl set-time  <TIME>

7. Упорядочивание сетевой конфигурации

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

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

  1. Проверьте IP-адреса, интерфейс и используемый стек протоколов

    # ip a
    1:  lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc n
             ...
    2:  enp3s0: <BROADCAST,MULTICAST,UP,LOWER
             ...
    
    # nmcli con
    NAME    UUID                                  TYPE      DEVICE
    enp3s0  dabaa33b-25b0-3bfd-8a74-b6b40847a7a4  ethernet  enp3s0
    
    # who am i
    root     pts/5        2021-04-09 21:07 (2003:ca:7f05:xx00:yyyy:zzzz:479a:b36e)
    
    # nmcli -p -f ipv4.method,ipv6.method con show 'enp3s0'
    =====================================================================
                        Connection details (enp3s0)
    =====================================================================
    ipv4.method:              manual
    ---------------------------------------------------------------------
    ipv6.method:              manual
    ---------------------------------------------------------------------
    Измените имена интерфейсов в соответствии с вашей конфигурацией
  2. На случай, если IPv6 настроен только как локальный (fe80::…​.) или не статический, вы можете настроить фиксированный IPv6

    # nmcli con mod 'enp3s0' ipv6.method manual \
      ipv6.addresses <YOUR_IPv6_PREFIX>::2/64 \
      ipv6.gateway fe80::1 \
      ipv6.dns "2a01:4f8:xx:yy::zzz:8888 2a01:4f8:xx:yy::zzz:9999"
    # nmcli con up 'enp3s0'
    # nmcli con reload

    Опять же, не забудьте скорректировать имена, префикс и IP-адреса DNS. Обратите особое внимание на шлюз. Использование локального адреса 1 (fe80::1) — широко распространённое соглашение. Другое — префикс IPV6 с адресом 1. Но у каждого провайдера может быть даже иной подход.

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

    # ping6 <YOUR_IPv6_PREFIX>::2
    # # e.g. ping6  2a01:xxx:yyy:zzz::2
  3. При желании перенастройте IPv4 как статический. Но убедитесь, что IPv6-адрес работает, и не меняйте оба стека протоколов одновременно (и в худшем случае вообще не потеряйте связность):

    # nmcli con mod 'enp3s0' ipv4.method manual \
      ipv4.addresses <YOUR_IPv4>/27 \
      ipv4.gateway <GATEWAY> \
      ipv4.dns "<DNS1_IPv4> <DNS2_IPv4>"
    # nmcli con up'enp3s0'
    # nmcli con reload

    Опять же, не забудьте скорректировать имена, префикс и IP-адреса DNS и проверьте связность со своей локальной рабочей станции:

    # ping <YOUR_IPv4>
  4. При желании вы можете взглянуть на файл конфигурации NetworkManager

    # less /etc/NetworkManager/system-connections/enp3s0.nmconnection

Наконец, перезагрузитесь сейчас, чтобы проверить всё с нуля

8. Проверка устройств хранения LVM

В Fedora 39 конфигурация LVM по умолчанию изменилась. Различные команды управления LVM теперь обрабатывают только зарегистрированные, «легитимные» блочные устройства, подключённые к системе. Крайне важно проверить правильность списка в файле устройств.

Вывод списка зарегистрированных устройств

Проверьте список, чтобы увидеть, все ли ожидаемые устройства включены, а также должно ли каждое устройство фактически быть частью текущей системы.

$ sudo lvmdevices
  Device /dev/sda3 IDTYPE=sys_wwid IDNAME=naa.5000000000000000 DEVNAME=/dev/sda3 PVID=IoUGXYfv74B3YrmCoPfh9ZsWZsDrVKAN PART=3
Добавление устройства (постоянно)

Это изменяет файл устройств в /etc/lvm/devices

$ sudo lvmdevices --adddev /dev/<PART>
Удаление устройства (постоянно)

Это изменяет файл устройств в /etc/lvm/devices

$ sudo lvmdevices --deldev /dev/<PART>

9. Упорядочивание конфигурации хранилища

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

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

    Вы можете убедиться, что группа томов (имя по умолчанию: fedora) занимает весь диск. В Cockpit в разделе Storage вы видите доступные устройства и их разбиение, а также группу томов и логические тома.

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

    Это не рекомендуемая процедура! Не жалуйтесь в случае проблем.

    Cockpit предоставляет простой способ для этого. С правой стороны строки файловой системы «root» нажмите кнопку с тремя точками. Выберите Grow для логического тома. Определите новый размер по мере необходимости.

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

    Выберите Storage в главном меню Cockpit, а затем свой диск в правой колонке. Выберите Create new partition и заполните появившуюся форму соответствующим образом. В поле «Devices» выберите из меню «Create LVM2 volume group» и заполните появившуюся форму соответствующим образом.

10. Установка fail2ban

Если общее отключение входа по паролю не является вариантом, стоит рассмотреть установку fail2ban.

The software monitors the log files for authentication errors. In case of multiple retries from the same IP address, it reconfigures the firewall on the fly to block the source IP. This is to prevent brute‑force methods for cracking passwords and bots checking for weak passwords. However, a system administrator may also lock himself out if a mistake is made. Therefore, you can exclude distinct IP addresses, e.g., the administrator’s desktop, from blocking.

  1. Installation of the software

    […]# dnf install fail2ban
  2. Create and fill configuration file

    […]# vi /etc/fail2ban/jail.local
    # Jail configuration additions for local installation
    
    # Adjust the default configuration's default values
    [DEFAULT]
    # Optional enter an trusted IP never to ban
    #ignoreip = www.xxx.yyy.zzz/32
    bantime  = 6600
    backend = auto
    
    # The main configuration file defines all services but
    # deactivates them by default. We have to activate those needed
    [sshd]
    enabled = true
  3. Activate software

    […]# systemctl  enable  fail2ban  --now
  4. Control in the log

    […]# tail -f /var/log/fail2ban.log

11. Установка и настройка Logwatch

Программное обеспечение проверяет файлы журналов на аномалии и составляет ежедневный отчёт, который при желании можно отправить системным администраторам по электронной почте. Это что-то вроде минимального защитного усилия. Более мощной, но гораздо более сложной была бы установка программного обеспечения мониторинга.

  1. Установка программного обеспечения

    # dnf install  logwatch
  2. Единственная необходимая настройка — указать реальный адрес электронной почты для root, получателя отчёта. Он добавляется в конец файла.

    # vi /etc/aliases
    ...
    # Person who should get root's mail
    #root:          marc
    root:		   real@address.for.root
    
    # newaliases

12. Отключение LLMNR и/или mDNS в systemd-resolved

В зависимости от вашей среды вы можете захотеть отключить LLMNR и/или mDNS. Оба протокола подвержены тривиальным атакам отравления DNS со стороны вредоносного ответчика.

sudo mkdir -p /etc/systemd/resolved.conf.d
sudo touch /etc/systemd/resolved.conf.d/20-disable-llmnr-mdns.conf
sudo tee -a /etc/systemd/resolved.conf.d/20-disable-llmnr-mdns.conf > /dev/null << EOF
# see man resolved.conf for details
[Resolve]
# false = disable, true = resolve AND respond, resolve = resolve only
LLMNR=false
MulticastDNS=false
EOF
sudo systemctl restart systemd-resolved

Вы можете просмотреть состояние LLMNR и mDNS с помощью следующей команды: sudo systemd-resolve --status

13. Управление обновлениями системы

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

Fedora includes a tool, dnf-automatic, which supports several modes of update automation: do not apply, notify admin, apply and notify admin, apply without notification. In particular, alternatives 2 and 3 are definitely worth considering. A general principle might be: Alternative 2 is the minimum choice for almost any system, alternative 3 is not at all suitable for critical systems that must not fail under any circumstances.

We recommend installing at least alternative 2:

[…]# dnf install dnf-automatic

[…]# vi /etc/dnf/automatic.conf
##emit_via = stdio
emit_via = email
##email_from = root@example.com
email_from = root@host.example.com
##

[…]# vi /etc/aliases
...
# Person who should get root's mail
#root:        marc
root:         real@address.for.root

[…]# newaliases
[…]# systemctl enable --now dnf-automatic-notifyonly.timer

If you want to automatically install, activate the corresponding timer instead.

[…]# systemctl enable --now dnf-automatic-install.timer

14. Наконец, обновите систему и установите дополнительное программное обеспечение

Теперь, когда безопасный административный доступ настроен, самое время обновить систему и установить полезное программное обеспечение. Конечно, «полезное программное обеспечение» зависит от сценария использования или приложений, которые будут работать на Fedora Server. В любом случае хорошим выбором может быть vim. С vimdiff, например, сравнение обновлений файлов конфигурации (*.rpmnew) очень удобно и просто.

# dnf install vim-default-editor  --allowerasing
# dnf update

Добавьте в список программного обеспечения по мере необходимости.

Наконец, перезагрузите сервер.