10.04.2021

Я установил себе Fedora

Первое знакомство

Опыт установки Fedora привнёс много нового опыта. До этого я использовал FreeBSD, Ubuntu, Gentoo, ставил Archlinux.

В первую очередь, конечно, это система управления пакетами dnf, бывший yum, с которым я знакомился при установке CentOS, а точнее GosLinux, но чтобы его использовать в реальных задачах, пришлось подключать репозитории CentOS, тогда.

Во-вторых, непривычно, что в операционной систем изначально включен брандмауэр. Я привык не запускать ненужных сервисов, если они мне не нужны. А если и нужны, то я мог их запускать на 127.0.0.1. Тут брандмауэр изначально включен.

В-третьих, система изначально использует систему безопасности SELinux. Как говорят источники в интернете, эта система была разработана Агентством национальной безопасности США (АНБ). Данная подсистема доступна к ядре Linux начиная с 2.6 и её можно использовать. В Fedora она включена в довольно лёгком режиме: всё, что не описано правилами безопасности можно, всё что описано можно или нельзя, в зависимости от правила. Как я выяснил на практике, большинство того, что вам необходимо, работает из коробки. При этом работа стандартных служб довольно ограничена и если они потребуют доступ туда, куда обычно не требуется, то им будет отказано. У меня при использовании на ноутбуке в качестве рабочего компьютера и на Raspberry Pi в качестве веб-сервера с php и postgresql особых проблем не возникло. Кроме того, когда возникали проблемы со своим самописным софтом скорее означало, что я делаю что-то неправильно и нужно изменить архитектуру приложения и не лезть куда попало.

Очень много информации можно получить из неофициального FAQ по Fedora на русском языке. Очень полезный документ, если вы собираетесь устанавливать Fedora на свой компьютер. Рекомендую ознакомиться.

С чего начать настройку?

В первую очередь нужно проверить список используемых репозиториев:

dnf repolist

Репозиторий fedora-cisco-openh264 представляет специальную бинарную сборку библиотеки openh264. Если вы не живёте в США или Австралии, где действуют патенты на алгоритмы, то вместо этого кодека можете использовать открытые реализации из репозитория RPM Fusion. fedora-ciso-openh264 можно отключить, как указано в неофициальным FAQ по Fedora:

sudo dnf config-manager --set-disabled fedora-cisco-openh264

Удалить установленные из репозитория пакеты:

sudo dnf remove openh264 mozilla-openh264 gstreamer1-plugin-openh264

Подключение RPM Fusion со свободным и не свободным софтом согласно неофициальному FAQ по Fedora:

sudo dnf install --nogpgcheck https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm

Встроенный брандмауэр Firewalld

Firewalld - это динамически управляемый брандмауэр с поддержкой зон для интерфейсов. Для управления им можно использовать консольную утилиту firewall-cmd или графическую firewall-config. Каждый из сетевых интерфейсов может относиться к определённой зоне. Для каждой зоны действуют свои правила брандмауэра. Существует также зона по умолчанию для всего того, для чего не задана зона. Установить это значение можно с помощью:

firewall-cmd --set-default-zone=internal

Узнать какие зоны уже имеются в настройках можно с помощью команды

firewall-cmd --get-zones

Каждая зона имеет свой набор правил. По умолчанию создано некоторое количество зон, которые можно использовать в типовых конфигурациях. При чём, для некоторых зон могут использоваться довольно сложные правила, например, для зоны external производиться трансляция IP-адресов (NAT). Подробнее о зонах можно узнать в документации.

Для создания постоянных правил необходимо указывать ключ --permanent. Имя зоны необходимо указывать в ключе --zone. Без явного указания зоны, правила будут изменены в зоне по умолчанию.

firewall-cmd --permanent --zone=internal --add-port=80/tcp

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

firewall-cmd --reload

Использование Firewalld мне на столько понравилось, что я даже установил его на сервер на Ubuntu 20.04 LTS для связи с которой я использовал VPN на базе Wireguard. Firewalld избавил меня от написания скриптов для выполнения действий при подключении/отключении клиентов. Даже NAT можно настроить… В принципе, его вообще не надо настраивать, т.к. есть готовые настройки зон для типовых конфигураций где уже всё настроено.

Настройка NGINX

В первую очередь вам нужно разрешить доступ к серверу.

firewall-cmd --permanent --add-service=http
firewall-cmd --reload

… (тут должно быть продолжение заметки :) )

Настройка php

Устанавливаем php-cli (для командной строки) и php-fpm (демон для веб). Попутно, нужные модули:

dnf install php-cli php-fpm php-pgsql php-json php-mbstring

Если вы используете определённого пользователя для демона php и веб-сервера, то, чтобы работали настройки с пользователем и группой, нужно отключить ACL:

;listen.acl_users = apache,nginx

Но лучше воспользоваться ими… (тут не хватает описания :) )

Если нужны подключения по сети с сервера (в том числе proxy), то нужно включить:

SELinux

setsebool -P httpd_can_network_connect 1

Разрешить читать веб-серверу файлы из определённой папки (в примере /home/fsa/www/*)

semanage fcontext -a -t httpd_sys_content_t "/home/fsa/www(/.*)?"

Разрешить писать веб-серверу файлы в определённую папку (в примере /home/fsa/www/log/*)

semanage fcontext -a -t httpd_sys_rw_content_t "/home/fsa/www/log(/.*)?"

После добавления правил для папок нужно запустить обновление ACL в соответствии с новыми правилами (в примере папка /home/fsa/www):

restorecon -R -v /home/fsa/www

Просмотреть все добавленные вами правила можно с помощью команды

semanage fcontext -C -l

Создание собственного модуля SELinux

Для php мне понадобился модуль php-process для работы с разделяемой памятью, семафорами и очередями. К сожалению, при его установке не подключаются разрешения SELinux для работы этих механизмов. Понадобилось создание своей конфигурации.

cat /var/log/audit/audit.log | audit2allow -m myapp > myapp.te

Далее, редактируем и компилируем и устанавливаем модуль SELinux:

checkmodule -M -m -o myapp.mod myapp.te
semodule_package -o myapp.pp -m myapp.mod
semodule -i myapp.pp

Удаление модуля по его имени:

semodule -r myapp

Установка PostgreSQL

dnf install postgresql-server

Инициализация сервера базы данных:

postgresql-setup initdb

Если требуется установить другие параметры для LC_COLLATE и LC_CTYPE, то можно воспользоваться переменной окружения PGSETUP_INITDB_OPTIONS, которая задаёт параметры для команды initdb. Данный параметр, также, может понадобиться при обновлении Fedora с обновлением версии PostgreSQL. При запуске обновления базы может возникнуть проблема несоответствия текущих значений и тех, которые использовались при инициализации базы данных. Например:

export PGSETUP_INITDB_OPTIONS="--locale=C --encoding=UTF-8"; postgresql-setup --upgrade

Здесь указана локаль C, которая ведёт себя одинаково на всех версиях операционных системах и позволяет работать базе максимально быстро, но ценой не всегда правильной сортировки данных для различных языков. Кроме этого, задаётся кодировка UTF-8.

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

su postges
psql
create user fsa superuser createrole createdb;
create database fsa owner fsa;
\password fsa

Далее в файле /var/lib/pgsql/data/pg_hba.conf необходимо установить scram-sha-256 (как наиболее безопасный) или md5 (устаревший) способ хранения паролей для записей потенциально уязвимых хостов.

Порт 5355 LLMNR

Изначально на Fedora был открыт порт 5355. который числится как LLMNR. Можете погуглить что это такое, и если вам оно не нужно, то можно просто отключить этот сервис через файл /etc/systemd/resolved.conf установив LLMNR=no.

Лайфхак для любителей KDE Plasma и светлой темы

К сожалению, из-за применяемых в Fedora патчей для plasma-workspace, светлая стандартная тема Breeze сломана. Её можно включить, но в новых сборках тема работает некорректно. В старых версиях тема работала, но до первой перезагрузки или запуска настроек KDE, после чего тема изменялась, при чём, после перезагрузки вы можете получить искажённую тему. Проблема существует с версии Fedora 34 или даже раньше.

Я создал багрепорт, но он пока не рассмотрен.

Однако не всё так плохо. Работу темы можно починить воспользовавшись тестовым редактором. Необходимо исправить файл ~/.config/plasmarc или создать его, если он не существует и добавить следующие настройки:

[Theme]
name=default

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

Полезные ссылки

  1. Неофициальный FAQ по Fedora

Если данная заметка оказалась вам полезной, можете поблагодарить автора финансово на сервисе Boosty или любой суммой через сервис QIWI.