Модул 4 · 4.1
Управление на пакети с apt
Модул 4: Софтуер и актуализации · Време за четене: 10 минути
Цел на урока: След този урок ще можете да инсталирате, обновявате и премахвате софтуер с apt, ще виждате откъде идва даден пакет и ще разпознавате кои актуализации са актуализации за сигурност.
Основни понятия: пакет, източник на пакети (repository), sources.list, .sources файл (deb822), signed-by, apt update, apt upgrade, apt full-upgrade, remove, purge, autoremove, apt-cache policy, източник за сигурност, dnf
Защо мениджър на пакети?
В Windows изтегляте инсталационна програма от уебсайт. На Linux сървър почти никога не правите това. Софтуерът идва като пакет от източник на пакети (repository): сървър на дистрибуцията с хиляди програми, всички изградени и тествани за Вашата версия на Debian или Ubuntu. Програмата, която изтегля, инсталира и обновява тези пакети, се нарича мениджър на пакети. В Debian и Ubuntu това е apt (с dpkg под него), в AlmaLinux и Rocky Linux е dnf.
Това носи три големи предимства:
- Една команда обновява всичко. Уеб сървърът, SSH сървърът, библиотеките и ядрото идват от един и същ източник. Не е нужно да проверявате на уебсайт за всяка програма поотделно дали има нова версия.
- Произходът е проверен. Всеки източник на пакети е подписан с ключ. apt отказва пакети, чийто подпис не е верен.
- Зависимостите се уреждат автоматично. Ако nginx се нуждае от библиотека, apt я инсталира автоматично и по-късно отново я почиства.
Източниците на пакети: откъде идва софтуерът?
Кои източници използва apt, е записано в /etc/apt/. Дълго време това беше един файл sources.list с редове като:
deb http://deb.debian.org/debian bookworm mainUbuntu 24.04 и по-новите версии, cloud образите на Debian и все повече нови инсталации използват по-новия формат deb822: отделни файлове с разширение .sources в /etc/apt/sources.list.d/. Стар sources.list може да се преобразува с sudo apt modernize-sources (apt 3, Debian 13). Например в Debian 13:
anna@web1:~$ cat /etc/apt/sources.list.d/debian.sources
Types: deb
URIs: http://deb.debian.org/debian
Suites: trixie trixie-updates
Components: main
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Types: deb
URIs: http://deb.debian.org/debian-security
Suites: trixie-security
Components: main
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpgЧетете го така: suite е версията (trixie е Debian 13; noble е Ubuntu 24.04), component е част от източника (main при Debian; main, universe, restricted и multiverse при Ubuntu), а Signed-By посочва с кой ключ трябва да е подписан източникът. Последното е важно: един ключ принадлежи на един източник, а не на всички източници едновременно. Ако по-късно добавите източник от производител (Docker, Caddy, PostgreSQL), той получава собствен файл с ключ и собствен ред Signed-By (урок 9.2).
Източникът с -security в името е източникът за сигурност. От него идват актуализациите за сигурност, обикновено в същия ден, в който стане известна уязвимост. В Ubuntu този suite се казва noble-security (или името на Вашата версия).
Ако все още използвате стария sources.list, всичко работи нормално. Само не смесвайте един и същ източник в двата формата, защото тогава apt се оплаква от дублирани редове.
update, upgrade и full-upgrade
Разликата между тези три понятия е първият капан за начинаещите.
| Команда | Какво прави |
|---|---|
apt update | Изтегля списъка с това кои пакети и версии има в източниците. Не инсталира нищо. |
apt upgrade | Обновява инсталираните пакети до най-новата версия от този списък. Никога не премахва нищо. Актуализация, която би изисквала премахване на друг пакет, се пропуска. |
apt full-upgrade | Същото, но може и да премахва пакети или да инсталира нови, ако е необходимо. Нужна е при надграждане на release (урок 4.3) и понякога при ново ядро. |
Затова винаги първо update, после upgrade:
anna@web1:~$ sudo apt update
Hit:1 http://deb.debian.org/debian trixie InRelease
Get:2 http://deb.debian.org/debian-security trixie-security InRelease [43.4 kB]
...
3 packages can be upgraded. Run 'apt list --upgradable' to see them.
anna@web1:~$ apt list --upgradable
Listing... Done
libssl3t64/trixie-security 3.5.1-1+deb13u1 amd64 [upgradable from: 3.5.1-1]
openssh-server/trixie-security 1:10.0p1-7+deb13u1 amd64 [upgradable from: 1:10.0p1-7]
tzdata/trixie-updates 2026b-0+deb13u1 all [upgradable from: 2026a-0+deb13u1](Номерата на версиите по-горе са пример.) След името е посочено от кой suite идва новата версия. Всичко с -security е актуализация за сигурност: тях искате възможно най-бързо. -updates са други стабилни актуализации, например нови данни за часовите зони.
След това:
anna@web1:~$ sudo apt upgradeapt показва какво ще се промени и иска потвърждение. Прочетете този списък. Ако видите "The following packages will be REMOVED" (следните пакети ще бъдат ПРЕМАХНАТИ), се случва нещо необичайно и първо трябва да разберете защо.
Инсталиране, премахване и почистване
anna@web1:~$ sudo apt install nginx
anna@web1:~$ sudo apt remove nginx # програмата се премахва, конфигурацията в /etc остава
anna@web1:~$ sudo apt purge nginx # премахване на програмата и конфигурацията
anna@web1:~$ sudo apt autoremove # почистване на ненужните пакетиРазликата между remove и purge е полезна: ако искате да премахнете нещо временно и по-късно да го инсталирате отново със същите настройки, използвайте remove. Ако искате наистина да започнете начисто, използвайте purge.
Търсене и повече информация:
anna@web1:~$ apt search fail2ban
anna@web1:~$ apt show fail2ban
anna@web1:~$ apt-cache policy openssh-server
openssh-server:
Installed: 1:10.0p1-7
Candidate: 1:10.0p1-7+deb13u1
Version table:
1:10.0p1-7+deb13u1 500
500 http://deb.debian.org/debian-security trixie-security/main amd64 Packages
*** 1:10.0p1-7 500
500 http://deb.debian.org/debian trixie/main amd64 Packagesapt-cache policy е командата, която използвате, когато искате да разберете откъде идва даден пакет и коя версия ще избере apt. *** стои при инсталираната версия, а Candidate е това, което би инсталирало едно надграждане.
Версии на Debian и версията на една програма
Често срещано оплакване: "В Debian има стара версия на nginx." Това е вярно и е направено нарочно. Debian и Ubuntu замразяват версиите при излизането на release и след това добавят само поправки за сигурност и сериозни корекции, без нови функции. Затова пакет със "стар" номер на версията може все пак да съдържа всички скорошни поправки за сигурност: те са пренесени назад (backport) в старата версия. Разпознавате това по наставката, например +deb13u1 или ubuntu0.1.
Затова никога не сравнявайте само номера на версията с уебсайта на производителя, за да прецените дали сте уязвими. Следете известията за сигурност на Вашата дистрибуция: Debian Security Tracker (security-tracker.debian.org) и Ubuntu Security Notices (ubuntu.com/security/notices) посочват за всяка уязвимост дали Вашата версия е поправена.
Няколко правила за спокоен сървър
- Инсталирайте само това, от което се нуждаете. Всеки пакет е код, който трябва да се обновява, а понякога и услуга, която слуша (урок 5.1).
- По-добре от дистрибуцията, отколкото от уебсайт. Програма, която компилирате сами или изтегляте като отделен файл, не се обновява от
apt upgrade. Тогава Вие сами трябва да следите известията за сигурност. - Допълнителен източник само от самия производител, със собствен ключ и
Signed-By. Никога не добавяйте ключ "за всичко" и никога източник от непознат уебсайт (урок 4.3). - Четете какво пита apt. При надграждане apt може да попита дали искате да замените променен конфигурационен файл с новата версия на производителя. Ако не знаете какво сте променили в него, изберете "keep the local version" (запазване на локалната версия, по подразбиране) и по-късно вижте разликата с
diff: новата версия е до него като.dpkg-dist.
В AlmaLinux и Rocky Linux
Там мениджърът на пакети се казва dnf, а пакетите са .rpm. Командите приличат на тези на apt: dnf check-update (списъкът), dnf upgrade (обновяване, update и upgrade наведнъж), dnf install, dnf remove, dnf info. Източниците са в /etc/yum.repos.d/*.repo. Много допълнителен софтуер (например fail2ban) идва от отделния източник EPEL, който първо включвате с dnf install epel-release. Само актуализациите за сигурност можете да покажете с dnf updateinfo list --security.
На практика: екранът на VPS
При WebOké, както и при повечето други доставчици, инсталацията на Вашия VPS вече настройва правилно стандартните източници на дистрибуцията. Обикновено не е нужно да променяте нищо там. Обновете сървъра веднага след първото влизане с apt update и apt upgrade (урок 1.2) и преди големи промени направете snapshot в панела на Вашия доставчик.
Обобщение
- В Debian и Ubuntu софтуерът идва от подписани източници на пакети; apt изтегля, инсталира, обновява и почиства.
apt updateсамо изтегля списъка;apt upgradeобновява, без да премахва;apt full-upgradeможе и да премахва.- Актуализациите за сигурност идват от suite с
-securityв името;apt list --upgradableиapt-cache policyпоказват откъде идва дадена версия. - Стар номер на версията с
+deb13u1илиubuntu0.xможе да съдържа всички поправки (backport): следете известията за сигурност на Вашата дистрибуция. - Допълнителен източник само от самия производител, със собствен ключ в
Signed-By.
Тест (quiz)
Задача
Задача Z4.1: Кои актуализации са актуализации за сигурност? В примерния файл apt-upgradable.txt е изходът от apt list --upgradable и apt-cache policy на сървър с Debian 13. Отговорете: кои пакети идват от източника за сигурност, кой пакет идва от източник на производител вместо от Debian, коя версия на openssh-server е инсталирана в момента и кой пакет е обикновена стабилна актуализация без причина, свързана със сигурността? Програмата сравнява отговорите Ви с фиксирания ключ. Ако вече имате собствен сървър, изпълнете същите команди и вижте какво ще получите.
Още за четене
- Защита на Вашия VPS: първите пет минути
- Първи стъпки с Вашия VPS
- Наръчник на администратора на Debian, глава 6 (apt): https://debian-handbook.info/browse/stable/apt.html
- Ръководство
sources.list(5)(формат deb822): https://manpages.debian.org/trixie/apt/sources.list.5.en.html - Debian Security Tracker: https://security-tracker.debian.org/tracker/
- VPS: от първото влизане до сигурен сървър 3.3: Актуализации и автоматични актуализации
