OpenBSD logo

OpenBSD budeme používat jako serverový operační systém, musíme se ho naučit malinko spravovat. Všechnu správu budeme dělat jako uživatel root, který má maximální práva v systému a je k tomu i určen. Obyčejní uživatelé nemohou správu systému dělat, pokud jim k tomu uživatel root nedal svolení a nedal jim příslušné pravomoce. Pravomoce se správě systému může root udělit i vybraným uživatelům a ti pak pomocí příkazu doas mohou dělat to, co mají dovoleno.

Ke správě serveru je potřeba přistupovat velmi odpovědně, protože na tom, zda server běží správně nebo neběží správně nebo vůbec neběží může záviset spousta důležitých služeb, které se na serveru provozují a spousta uživatelů, kteří spoléhají na to, že služby poběží. Pokud udělá uživatel root chybu, většinou to má nepříjemné následky a ne nadarmo při své práci vidí prompt #, což mimo jiné naznačuje, že se snadno může dostat i do vězení, pokud bude pracovat nerozvážně a nezodpovědně.

Naprosto excelentní dokumentaci ke správě systému OpenBSD najdete na webových stránkách OpenBSD Frequently Asked Questions a v manuálových stránkách ( na běžícím systému man příkaz), webová podoba manuálnových stránek je na serveru OpenBSD manual page server

K základní správě serveru patří:

  • instalace systému

  • instalace a konfigurace programů, které chceme nebo potřebujeme provozovat

  • nastavení služeb

  • aktualizace systému

  • aktualizace nainstalovaných programů

  • zálohování dat

  • zálohování systému nebo aspoň konfigurace systému

Instalace programů

Instalace uživatelských programu je jednoduchá, jediné co musíme znát, je jméno softwarového balíku. Provádí se příkazem pkg_add <jmeno baliku>

Instalace textového editoru nano
mail# pkg_add nano
quirks-7.147 signed on 2026-01-30T17:48:51Z
nano-8.6: ok
mail#

Některé programy je potřeba nakonfigurovat, musíme se podívat do dokumentace, jak se to dělá.

Služby

Služby nejsou nic jiného než programy, které neustále běží a poskytují nějakou službu. Příkladem může být web server (httpd), poštovní server (smtpd a dovecot), databázový sever (mysqld nebo postgresql), nameserver (nds, unbound), dhcp server (dhcpd), služba pro souborový systém po síti (samba) a mnoho a mnoho dalších.

Ke správě služeb používáme program rcctl.

rcctl enable httpd      (1)
rcctl disable httpd     (2)
rcctl start httpd       (3)
rcctl stop httpd        (4)
rcctl restart httpd     (5)
rcctl reload httpd      (6)
1 Služba se bude automaticky spouštět při startu systému.
2 Pokud se lsužba spouštěla po startu systému, tak se už nebude spouštět automatiky.
3 Spuštění služby
4 Zastavení služby
5 Restartování služby
6 U služeb, které si umí za běhu znovu načíst konfiguraci, tak znovu načte konfiguraci.

Aktualizace nainstalovaných programů

Aktualizace nainstalovaných programů je opět velmi jednoduchá, provádí se příkazem pkg_add -u. Tento příkaz zaktualizuje veškeré nainstalované programy.

Příklad aktualizace programů po release upgrade na produkčním mailserveru
mail# pkg_add -u
quirks-7.147:updatedb-0p0->0p0: ok
quirks-7.147 signed on 2026-01-30T17:48:51Z
quirks-7.103->7.147: ok
abseil-cpp-20250814.1:.libs-gtest-1.14.0p1+gtest-1.15.2->gtest-1.15.2: ok
.libs-abseil-cpp-20240722.0+.libs1-abseil-cpp-20240116.0+abseil-cpp-20250127.1->abseil-cpp-20250814.1: ok
argon2-20190702p0->20190702p0: ok
aspell-0.60.8.1p0:libiconv-1.17->1.17: ok
aspell-0.60.8.1p0:.libs1-gettext-runtime-0.21.1+gettext-runtime-0.23.1->gettext-runtime-0.23.1: ok
.libs1-aspell-0.60.6.1p11+aspell-0.60.8.1p0->aspell-0.60.8.1p0: ok
lapack-3.12.0p0:gcc-libs-8.4.0p26->8.4.0p28: ok
blas-3.8.0p1+cblas-1.0p7->lapack-3.12.0p0: ok
bzip2-1.0.8p0->1.0.8p0: ok
.libs1-capstone-4.0.2+capstone-5.0->capstone-5.0: ok
coreutils-9.5p0->9.7: ok
curl-8.16.0:nghttp2-1.65.0->1.67.1: ok
curl-8.16.0:.libs-nghttp3-0.15.0+.libs1-nghttp3-0.9.0+nghttp3-1.8.0->nghttp3-1.12.0: ok
curl-8.16.0:.libs-ngtcp2-0.19.1+.libs1-ngtcp2-0.13.1+ngtcp2-1.11.0->ngtcp2-1.16.0: ok
curl-8.13.0->8.16.0: ok
desktop-file-utils-0.28p0:xz-5.6.4p0->5.8.1: ok
desktop-file-utils-0.28p0:sqlite3-3.49.1p1->3.50.4: ok
desktop-file-utils-0.28p0:.libs1-libffi-3.3p1+libffi-3.4.7p1->libffi-3.5.2: ok
desktop-file-utils-0.28p0:libb2-0.98.1v0->0.98.1v0: ok
desktop-file-utils-0.28p0:.libs-python-3.11.10p1+.libs-python-3.8.13p0+.libs1-python-3.10.14+.libs1-python-3.9.19+python-3.12.9->python-3.12.11: ok
desktop-file-utils-0.28p0:py3-packaging-24.2p1->25.0: ok
desktop-file-utils-0.28p0:.libs-pcre2-10.36+pcre2-10.44->pcre2-10.44: ok
desktop-file-utils-0.28p0:glib2-2.82.5->2.84.4: ok
desktop-file-utils-0.28p0->0.28p0: ok
dovecot-2.3.21.1p1v0:lz4-1.10.0->1.10.0: ok
dovecot-2.3.21.1p1v0:.libs-zstd-1.4.9+.libs-zstd-1.5.6+.libs1-zstd-1.4.5p0+zstd-1.5.7->zstd-1.5.7p0: ok
dovecot-2.3.21.1p1v0:libexttextcat-3.4.7->3.4.7: ok
dovecot-2.3.21.1p1v0:libsodium-1.0.20->1.0.20pl20251231: ok
dovecot-2.3.21.1p1v0:libstemmer-2.2.0->2.2.0: ok
dovecot-2.3.21.1p1v0:.libs-icu4c-68.2v0+.libs-icu4c-71.1v0+.libs1-icu4c-67.1+.libs1-icu4c-70.1v0+icu4c-76.1v0->icu4c-77.1v0: ok
.libs1-dovecot-2.3.18p0v0+dovecot-2.3.21.1p1v0->dovecot-2.3.21.1p1v0: ok
.libs1-dovecot-pigeonhole-0.5.16v1+dovecot-pigeonhole-0.5.21.1v1->dovecot-pigeonhole-0.5.21.1v1: ok
femail-1.0p1->1.0p1: ok
femail-chroot-1.0p3->1.0p3: ok
findutils-4.10.0->4.10.0p0: ok
.libs-fmt-8.1.1+fmt-10.2.1->fmt-10.2.1: ok
gd-2.3.3:.libs1-jpeg-3.0.2v0+jpeg-3.1.0v0->jpeg-3.1.2v0: ok
gd-2.3.3:lerc-4.0.0->4.0.0: ok
gd-2.3.3:.libs-tiff-4.2.0+.libs-tiff-4.4.0p2+tiff-4.7.0p0->tiff-4.7.1p0: ok
gd-2.3.3:png-1.6.47->1.6.54: ok
gd-2.3.3:.libs-giflib-5.1.6+giflib-5.2.2->giflib-5.2.2p0: ok
gd-2.3.3:libwebp-1.4.0->1.6.0p0: ok
.libs1-gd-2.3.2+gd-2.3.3->gd-2.3.3: ok
gdiff-3.11p0:libsigsegv-2.14p0->2.14p0: ok
gdiff-3.11->3.11p0: ok
htop-3.4.0->3.4.1: ok
icu4c-wwwdata-76.1p0v0->77.1v0: ok
libarchive-3.7.9->3.8.3: ok
.libs-libopensmtpd-0.7+libopensmtpd-0.8->libopensmtpd-1.0: ok
libslang-2.3.3p0:.libs-oniguruma-6.9.7.1+.libs-oniguruma-6.9.9+oniguruma-6.9.10->oniguruma-6.9.10: ok
libslang-2.3.3p0:pcre-8.45->8.45: ok
.libs1-libslang-2.3.2+libslang-2.3.3p0->libslang-2.3.3p0: ok
.libs-libssh2-1.9.0+libssh2-1.11.0->libssh2-1.11.0: ok
.libs-libxml-2.10.4+.libs-libxml-2.9.10p3+.libs-libxml-2.9.13p0+.libs1-libxml-2.11.5+.libs1-libxml-2.12.9+libxml-2.13.8->libxml-2.14.6: ok
libzip-1.8.0p0->1.8.0p0: ok
lua-5.1.5p7->5.1.5p7: ok
luajit-2.1.1713773202->2.1.1763318511: ok
lzo2-2.10p2->2.10p2: ok
.libs-mariadb-client-10.5.12p0v1+.libs-mariadb-client-10.9.8v1+.libs1-mariadb-client-10.6.7p0v1+mariadb-client-11.4.5v1->mariadb-client-11.4.9v1: ok
mariadb-server-11.4.9v1:p5-Params-Util-1.102->1.102: ok
mariadb-server-11.4.9v1:p5-Clone-0.47->0.47: ok
mariadb-server-11.4.9v1:p5-DBI-1.644->1.644: ok
mariadb-server-11.4.9v1:p5-DBD-MariaDB-1.23->1.23: ok
mariadb-server-11.4.9v1:.libs1-snappy-1.1.8+.libs1-snappy-1.1.9+snappy-1.1.10p2->snappy-1.1.10p2: ok
.libs-mariadb-client-10.6.7p0v1+.libs1-mariadb-client-10.5.12p0v1+.libs1-mariadb-client-10.9.8v1+mariadb-server-11.4.5p0v1->mariadb-server-11.4.9v1: ok
mc-4.8.33:unzip-6.0p18->6.0p18: ok
mc-4.8.33:zip-3.0p3->3.0p3: ok
mc-4.8.33->4.8.33: ok
mosh-1.4.0p5:.libs-protobuf-3.15.7+.libs-protobuf-3.21.12p0+.libs-protobuf-3.21.6+.libs-protobuf-5.27.4+.libs1-protobuf-3.13.0+.libs1-protobuf-3.19.3+.libs1-protobuf-4.25.2p0+protobuf-5.29.4p2->protobuf-6.32.1: ok
mosh-1.4.0p3->1.4.0p5: ok
opensmtpd-filter-dkimsign-0.5p2->0.6: ok
opensmtpd-filter-dnsbl-0.3->0.4: ok
opensmtpd-filter-rspamd-0.1.8p0->0.1.8p0: ok
opensmtpd-filter-senderscore-0.1.2->0.1.2: ok
pfstat-2.5p6->2.5p6: ok
php-8.2.28p0->8.2.30 forward dependencies:
| Dependency of php-pspell-8.2.28p0 on php-8.2.28 doesn't match
| Dependency of php-mysqli-8.2.28p0 on php-8.2.28 doesn't match
| Dependency of php-pdo_mysql-8.2.28p0 on php-8.2.28 doesn't match
| Dependency of php-gd-8.2.28p0 on php-8.2.28 doesn't match
| Dependency of php-zip-8.2.28p0 on php-8.2.28 doesn't match
| Dependency of php-intl-8.2.28p0 on php-8.2.28 doesn't match
Merging php-pspell-8.2.28p0->8.2.30 (ok)
Merging php-mysqli-8.2.28p0->8.2.30 (ok)
https://cdn.openbsd.org/pub/OpenBSD/7.8/packages-stable/amd64/php-pdo_mysql-8.4.15p0.tgz: Retrying https://cdn.openbsd.org/pub/OpenBSD/7.8/packages-stable/amd64/php-pdo_mysql-8.4.15p0.tgz
Merging php-pdo_mysql-8.2.28p0->8.2.30 (ok)
Merging php-gd-8.2.28p0->8.2.30 (ok)
Merging php-zip-8.2.28p0->8.2.30 (ok)
Merging php-intl-8.2.28p0->8.2.30 (ok)
php+php-gd+php-intl+php-mysqli+php-pdo_mysql+php-pspell+php-zip-8.2.28p0->8.2.30: ok
pure-ftpd-1.0.51p0->1.0.51p0: ok
redis-6.2.17->6.2.20: ok
Ambiguous: choose dependency for roundcubemail-1.6.10->1.6.12:
a       0: php-pdo_mysql-8.3.30
        1: php-pdo_pgsql-8.3.30
        2: php-pdo_sqlite-8.3.30
Your choice: 0
roundcubemail-1.6.12:php-8.3.30: ok
roundcubemail-1.6.12:php-zip-8.3.30: ok
roundcubemail-1.6.12:php-pdo_mysql-8.3.30: ok
roundcubemail-1.6.12:php-pspell-8.3.30: ok
roundcubemail-1.6.12:php-intl-8.3.30: ok
roundcubemail-1.6.10->1.6.12: ok
rspamd-3.14.3:.libs-xxhash-0.8.2p1+xxhash-0.8.3p0->xxhash-0.8.3p0: ok
rspamd-3.11.1->3.14.3: ok
rsync-3.4.1->3.4.1: ok
Running tags: ok
Read shared items: ok
The following new rcscripts were installed: /etc/rc.d/php83_fpm
See rcctl(8) for details.
New and changed readme(s):
        /usr/local/share/doc/pkg-readmes/php-8.2
        /usr/local/share/doc/pkg-readmes/php-8.3
        /usr/local/share/doc/pkg-readmes/roundcubemail
--- -dovecot-2.3.21.1p1v0 -------------------
You should also check /etc/dovecot/conf.d/10-auth.conf (which was modified)
You should also check /etc/dovecot/conf.d/10-mail.conf (which was modified)
You should also check /etc/dovecot/conf.d/10-ssl.conf (which was modified)
You should also check /etc/dovecot/conf.d/20-imap.conf (which was modified)
You should also check /etc/dovecot/conf.d/90-plugin.conf (which was modified)
You should also check /etc/dovecot/dovecot.conf (which was modified)
--- -mariadb-server-11.4.5p0v1 -------------------
You should also check /etc/my.cnf (which was modified)
--- -mc-4.8.33 -------------------
You should also check /etc/mc/mc.keymap (which was modified)
--- -php-8.2.28p0 -------------------
You should also check /etc/php-8.2.ini (which was modified)
--- -roundcubemail-1.6.10 -------------------
You should also check /var/www/roundcubemail/config/config.inc.php (which was modified)
Obsolete package: opensmtpd-extras-6.7.1p0v0 (superseded by opensmtpd-table-*)
Couldn't find updates for opensmtpd-extras-6.7.1p0v0
mail#

Aktualizace systému

Žádný operační systém se neobejde bez aktualizací (ať už bezpečnostních nebo funkčních). Operační systém OpenBSD je dělán tak, že každého půl roku (v říjnu a dubnu) vychází tzv. release (česky vydání). Na předchozích hodinách jsem více méně úspěšně nainstalovali release 7.8.

Mezi jednotlivými vydáními programátoři dělají tzv. patch (česky záplaty), což jsou opravy chyb na které sami přišli, nebo jim je někdo nahlásil.

Aktualizace záplatami

Záplaty jsou číslované od začátku vydání a jsou udržované ještě před další vydání. V době psaní článku má OpenBSD číslo release (vydání) 7.8, to znamená, že budeme moci aktualizovat pomocí záplat až do vydání 7.10.

Aktualizace pomocí záplat je velmi jednoduchá a dělá se příkazem syspatch, například takto:

Ukázka z produkčního serveru, kam se přihlásím pomocí ssh
jirka@pt3610:~/Stažené$ ssh root@mx2.lixis.cz
Last login: Wed Dec 31 12:41:47 2025 from 2a0e:5340:4:1:21e:6ff:fe42:2771
OpenBSD 7.8 (GENERIC.MP) #1: Sat Nov 29 11:02:59 MST 2025

Welcome to OpenBSD: The proactively secure Unix-like operating system.

Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code.  With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.

mx2# syspatch
Get/Verify syspatch78-012_rpki.tgz 100% |***************************************************************************************************************************************************************************|   141 KB    00:00
Installing patch 012_rpki
Get/Verify syspatch78-013_httpd.tgz 100% |**************************************************************************************************************************************************************************| 79409       00:00
Installing patch 013_httpd
Errata can be reviewed under /var/syspatch
mx2#

V ukázce se naistalovaly záplaty číslo 12 a 13

Aktualizace vydání (release upgrade)

Aktualizaci z jednoho vydání na druhé (upgrade) můžeme provést buď fyzicky z instalačního média (obvykle USB klíč) anebo ze systému příkazem sysupgrade. Dá se to provést i dálkově přes ssh, obvykle to dopadne dobře i když je v řídkých případech možné, že k systému ztratíme přístup. Release upgrade probíhá tak, že se nabootuje instalační jádro a instalační minisystém, provede se aktualizace jádra a systémových programů a potom se restartuje stroj.

Průběh release upgrade (7.7 → 7.8)

Spuštění sysupgrade

snimek obrazovky2

Stahování balíků z distribučního serveru cdn.openbsd.org

snimek obrazovky3

Bootování instalačního minisystému

snimek obrazovky4

Bootování instalačního jádra

snimek obrazovky5

Provádění release upgrade

snimek obrazovky6

Upgrade téměř hotovo, probíhá sestavování nového jádra systému

snimek obrazovky7

Bootování nového jádra 7.8

snimek obrazovky9

Aktualizace konfiguračních souborů

snimek obrazovky10

Instalace záplat (patchů)

snimek obrazovky11

Po release upgrade dělám ještě jednou sysupgrade, protože z nějakých mě neznámých důvodů si syspatch nepamatuje, že už jsou záplaty aplikované.

Záplatování po provedení release upgrade
mail# syspatch
Get/Verify syspatch78-001_syspatc... 100% |*************************************************************************************************************************************************************************|  8538       00:00
Installing patch 001_syspatch
syspatch: updated itself, run it again to install missing patches
mail# syspatch
Get/Verify syspatch78-002_xserver... 100% |*************************************************************************************************************************************************************************|  4344 KB    00:00
Installing patch 002_xserver
Get/Verify syspatch78-003_unbound... 100% |*************************************************************************************************************************************************************************|  2952 KB    00:00
Installing patch 003_unbound
Get/Verify syspatch78-004_libssl.tgz 100% |*************************************************************************************************************************************************************************|  2553 KB    00:00
Installing patch 004_libssl
Get/Verify syspatch78-005_smtpd.tgz 100% |**************************************************************************************************************************************************************************|   218 KB    00:00
Installing patch 005_smtpd
Get/Verify syspatch78-006_libunwi... 100% |*************************************************************************************************************************************************************************|  1669 KB    00:00
Installing patch 006_libunwind
Get/Verify syspatch78-007_drm.tgz 100% |****************************************************************************************************************************************************************************|   264 KB    00:00
Installing patch 007_drm
Get/Verify syspatch78-008_libpng.tgz 100% |*************************************************************************************************************************************************************************|   539 KB    00:00
Installing patch 008_libpng
Get/Verify syspatch78-009_xkbcomp... 100% |*************************************************************************************************************************************************************************|   104 KB    00:00
Installing patch 009_xkbcomp
Get/Verify syspatch78-010_unbound... 100% |*************************************************************************************************************************************************************************|  2953 KB    00:00
Installing patch 010_unbound
Get/Verify syspatch78-011_nd6.tgz 100% |****************************************************************************************************************************************************************************| 77300       00:00
Installing patch 011_nd6
Get/Verify syspatch78-012_rpki.tgz 100% |***************************************************************************************************************************************************************************|   141 KB    00:00
Installing patch 012_rpki
Get/Verify syspatch78-013_httpd.tgz 100% |**************************************************************************************************************************************************************************| 79409       00:00
Installing patch 013_httpd
Relinking to create unique kernel... done; reboot to load the new kernel
Errata can be reviewed under /var/syspatch
mail# shutdown -r now

Po ukončení záplat následuje restart systému a otestování funkčnosti. Testování funkčnosti závisí na tom, jak se systém používá.

Např. u poštovních serverů je potřeba otestovat zda pošta funguje. Dělám to tak, že pošlu email z testovaného serveru jinam a odjinud zase zpátky. U web serverů testuji, že se mi zobrazují stránky, které tam jsou. Prostě otestuji všechno, co na daném stroji má běžet.

Zdroje a odkazy

Seznam všech možných informací o OpenBSD na jednom místě

Můj ssh veřejný klíč: id_ed25519.pub