Я установил себе 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 на свой компьютер. Рекомендую ознакомиться.
С чего начать настройку?
Начать можно с проверка списка и используемых репозиториев. Можно отключить ненужные или включить нужные. Например, полезным, но не очень надёжным является RPMFusion. В частности, в нём содержатся кодеки, которые необходимы для декодирование некоторых форматов видео.
dnf repolist
Например, репозиторий fedora-cisco-openh264
представляет специальную бинарную сборку библиотеки openh264. Если вы не живёте в США или Австралии, где действуют патенты на алгоритмы, то вместо этого кодека ранее могли использовать открытые реализации из репозитория RPM Fusion. fedora-ciso-openh264
можно отключить, как указано в неофициальным FAQ по Fedora. В обновлениях ffmpeg
после 6.0-6
(май 2023 года) указанный репозиторий стал необходим. Но если вы желаете, можете его отключить:
sudo dnf config-manager --set-disabled fedora-cisco-openh264
Удалить установленные из репозитория пакеты:
sudo dnf remove openh264 mozilla-openh264 gstreamer1-plugin-openh264
Включить ранее отключенный репозиторий можно так:
sudo dnf config-manager --set-disabled fedora-cisco-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
При установке пакетов из RPMFusion нужно быть готовым, что некоторые пакеты могут вызывать конфликты. В основном это касается nonfree репозитория. Например, часто можно столкнуться с конфликтом при установке пакетов qt
. Иногда это может вызывать крах при запуске других программ, которым нужна обновлённая версия пакета. Одним из таких проблемных пакетов — Telegram.
Группы пакетов
Fedora может использовать множество графических оболочек, а также различных наборов пакетов. Узнать каике группы пактов доступны можно с помощью:
dnf grouplist --ids
Ключ --ids
выведет название группы, которое в дальнейшем можно использовать для установки или удаления группы. Пример удаления группы rpm-development-tools
:
dnf groupremove rpm-development-tools
Установка необходимой группы пакетов, например, kde-desktop
:
dnf groupinstall kde-desktop
Поиск по пакетам
Самый простой поиск по ключевым словам можно выполнить с помощью
dnf search КЛЮЧ_ПОИСКА
Если вы знаете имя команды, но в вашей системе её нет, то можно поискать так
dnf provides /usr/sbin/semanage
Или даже так
dnf provides semanage
Встроенный брандмауэр 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
В первую очередь вам нужно разрешить доступ к серверу. Для стандартных портов 80 и 443 необходимо разрешить сервисы http и https.
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
Необходимости редактировать файл /etc/nginx/nginx.conf
нет. Необходимые изменения в конфигурацию можно внести в виде файлов *.conf
в /etc/nginx/conf.d/
. Например, можно задать формат ведения лога в journald с помощью файла journald.conf
:
log_format journal '$remote_addr "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
Теперь можно использовать подобные директивы в конфигурациях хостов для записи журнала в journald с тегом my_tag
:
access_log syslog:server=unix:/dev/log,nohostname,tag=my_tag journal;
error_log syslog:server=unix:/dev/log,nohostname,tag=my_tag;
Настройка php
Устанавливаем php-cli
(для командной строки) и php-fpm
(демон для веб). Попутно, нужные модули:
dnf install php-cli php-fpm php-pgsql php-json php-mbstring
По умолчанию в свежих версиях Fedora логи с ошибками сервиса php-fpm пишутся по пути /var/log/php-fpm/$pool-errors.log
. Чтобы лог писался туда, куда указывает nginx, то нужно закомментировать следующие строки в /etc/php-fpm.d/www.conf
:
;php_admin_value[error_log] = /var/log/php-fpm/www-error.log
;php_admin_flag[log_errors] = on
Если нужны подключения по сети с сервера (в том числе proxy), то нужно включить:
SELinux
Чтобы разрешить вашему веб-серверу подключаться по сети, то стоит выполнить
setsebool -P httpd_can_network_connect 1
В том числе это нужно, чтобы иметь возможность подключиться к базам данных: MySQL, PostgreSQL, Redis и другим. Флаг -P
позволит сохранить значение политики после перезагрузки машины.
Разрешить веб-серверу подключаться к определённым портам, например, чтобы разрешить php-fpm отправлять из скриптов пакеты UDP с использованием порта 9898 для управления шлюзом Xiaomi для умного дома, необходимо выполнить команду:
semanage port -a -t http_port_t -p udp 9898
Список уже разрешённых портов:
semanage port -l | grep -w http_port_t
Разрешить читать веб-серверу файлы из определённой папки (в примере /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
(устаревший) способ хранения паролей для записей потенциально уязвимых хостов.
systemd-resolved
Это такой сервис, который отвечает в системе за DNS.
Изначально на Fedora был открыт порт 5355. который числится как LLMNR. Можете погуглить что это такое, и если вам оно не нужно, то можно просто отключить этот сервис через файл /etc/systemd/resolved.conf
установив LLMNR=no
.
Кроме этого, в этом файле можно разрешить протокол DNSOverTLS
, который можно разрешить DNSOverTLS=yes
. Он будет работать, если ваш сервер поддерживает этот протокол. Адреса крупных серверов, которые поддерживают этот протокол, указаны прямо в этом файле конфигурации, в том числе, как IPv4, так и IPv6.
Лайфхак для любителей KDE Plasma и светлой темы
К сожалению, из-за применяемых в Fedora патчей для plasma-workspace
, светлая стандартная тема Breeze была сломана. Её можно включить, но в новых сборках тема работает некорректно. В старых версиях тема работала, но до первой перезагрузки или запуска настроек KDE, после чего тема изменялась, при чём, после перезагрузки вы можете получить искажённую тему. Проблема существует с версии Fedora 34 или даже раньше. В Fedora 37 воспроизвести баг не удалось.
Если есть такая проблема, то работу темы можно починить воспользовавшись тестовым редактором. Необходимо исправить файл ~/.config/plasmarc
или создать его, если он не существует и добавить следующие настройки:
[Theme]
name=default
Сразу после редактирования файла включится светлая тема и будет работать корректно даже после перезагрузки. Однако после этого действия нельзя переключать тему в настройках, т.к. это удалит созданные записи и для возврата к теме вновь нужно будет внести изменения вручную.
Возможность ввода типографических символов в KDE Plasma
По сути эти настройки не относятся к Fedora, а являются возможностями KDE Plasma. Чтобы включить возможность ввода дополнительных типографических символов запустите настройки KDE Plasma и там перейдите в раздел «Устройства ввода — Клавиатура — Дополнительно». Установите кнопку для переключения раскладки по вкусу, например, «Клавиша для выбора 3-го ряда — Правая клавиша Alt». Далее включите ввод символов «Разные параметры совместимости — Включить доп. типографские символы».
Полезные ссылки
Обратите внимание, что заметки могут обновляться со временем. Это может быть как исправление найденных ошибок, так и доработка содержания с целью более полного раскрытия темы. Информация об изменениях доступна в репозитории на github. Там же вы можете оставить в Issue ваши замечания по данной заметке.
Если данная заметка оказалась вам полезной, можете поблагодарить автора финансово.