Редакция ноябрь, 2025
Аннотация
apt-get позволяют пользователям легко обновлять свои системы и быть в курсе актуальных новинок мира свободных программ.
Содержание
SCDWriter.exe;

Предупреждение




Предупреждение



Предупреждение
Предупреждение
#где <файл-образа.iso> — образ диска ISO, аddoflag=direct if=<файл-образа.iso> of=/dev/sdX bs=1M status=progress;sync
/dev/sdX — устройство, соответствующее flash-диску.
#где <файл-образа.iso> — образ диска ISO, аpv<файл-образа.iso> | dd oflag=direct of=/dev/sdX bs=1M;sync
/dev/sdX — устройство, соответствующее flash-диску.
lsblk или (если такой команды нет) blkid.
$ lsblk | grep disk
sda 8:0 0 931,5G 0 disk
sdb 8:16 0 931,5G 0 disk
sdc 8:32 1 15G 0 disk
flash-диск имеет имя устройства sdc.
# dd oflag=direct if=/home/iso/alt-server-11.1-x86_64.iso of=/dev/sdc bs=1M status=progress; sync
# pv /home/iso/alt-server-11.1-x86_64.iso | dd oflag=direct of=/dev/sdc bs=1M;sync
dd: warning: partial read (524288 bytes); suggest iflag=fullblock
3GiB 0:10:28 [4,61MiB/s] [===================================> ] 72% ETA 0:04:07
Предупреждение
sudo dd if=alt-server-11.1-x86_64.isoof=/dev/rdiskX bs=10Msync
alt-server-11.1-x86_64.iso — образ диска ISO, а /dev/rdiskX — flash-диск.
diskutil list
Предупреждение
$ du -b alt-server-11.1-x86_64.iso | cut -f1
5021368320
$ md5sum alt-server-11.1-x86_64.iso
7760e70aaf7104156507db8ee7712158 alt-server-11.1-x86_64.iso
# head -c 5021368320 /dev/sdd | md5sum
7760e70aaf7104156507db8ee7712158
где размер после -c — вывод в п.1, а /dev/sdd — устройство DVD или USB Flash, на которое производилась запись.
Предупреждение
Примечание


Log in as root localhost login:


Примечание

Примечание
Примечание


Примечание
… Running initinstall script [15-expert.sh] [ DONE ] 14:19:54 Running initinstall script [20-nodesign.sh] [ DONE ] 14:19:54 Running initinstall script [20-pts.sh] [ DONE ] 14:19:54 Running initinstall script [25-setup-dhcp.sh] [ DONE ] 14:19:54 Running initinstall script [26-metadata-autoinstall.sh] [ DONE ] 14:19:54 Running initinstall script [27-metadata-install-scripts.sh] [ DONE ] 14:19:54 Running initinstall script [30-ntp-client.sh] [ DONE ] 14:19:54 Running initinstall script [40-xorg.sh] [ DONE ] 14:19:54 Running initinstall script [50-removable] [ DONE ] 14:19:54 Running initinstall script [80-stop-md-dm.sh] [ DONE ] 11:19:59 Running initinstall script [85-start-multipath.sh] [ DONE ] 11:19:59 Running initinstall script [90-alteratord.sh] [ DONE ] 11:19:59 Running initinstall script [90-date.sh] [ DONE ] 11:19:59 Running initinstall script [90-pkg.sh] [ DONE ] 11:20:00 Running initinstall script [91-pkg-size.sh] [ DONE ] 11:20:01 Running initinstall script [95-virt-env.sh] [ DONE ] 11:20:01 Running initinstall script [98-oem.sh] [ DONE ] 11:20:01 Open debug shell on tty2 [ DONE ] 11:20:01 Open debug shell on tty3 [ DONE ] 11:20:01 ** IP(s): 192.168.0.95 ** VNC cmdline: vncpassword=Pa$$word The VNC desktop is: localhost.localdomain:0 PORT=5900
$ vncviewer 192.168.0.95
Примечание
Welcome to ALT Server 11.1 (Mendelevium)! Hostname: server IP: 192.168.0.95 server login:
Примечание
позволяет показать/скрыть панель со списком шагов установки:


Примечание

Примечание



Примечание

/var с включёнными квотами (ограничениями по использованию дискового пространства).

Примечание
usrquota и grpquota в файле /etc/fstab. Например:
UUID=0761da11-67bc-4589-bbf9-88d6b8dfc2ba /var ext4 nosuid,relatime,usrquota,grpquota 1 2Если квоты не нужны, эти опции можно удалить.
Примечание

Предупреждение

/home) или с другими операционными системами. С другой стороны, отформатировать можно любой раздел, который вы хотите «очистить» (удалить все данные).
Предупреждение
/boot/efi, в которую нужно смонтировать vfat раздел с загрузочными записями. Если такого раздела нет, то его надо создать вручную. При разбивке жёсткого диска в автоматическом режиме такой раздел создаёт сам установщик. Особенности разбиения диска в UEFI-режиме:
/boot/efi);
Примечание
Важно
Важно


Примечание

Примечание




Примечание
/boot/efi).
Важно
Важно


Примечание



Примечание



Предупреждение
/ и /home создаются подтома с именами @ и @home. Это означает, что для монтирования подтомов необходимы определенные параметры вместо корня системы BtrFS по умолчанию:
/ с помощью опции subvol=@;
/home с помощью параметра монтирования subvol=@home.


Примечание







Примечание




alt-components).


/etc/fstab).

/root/.install-log, после чего из неё будут удалены все загрузочные записи, что приведёт к восстановлению полностью заполненной NVRAM и гарантирует загрузку вновь установленной ОС;
Примечание


Примечание

Примечание

Примечание

Примечание

Важно

Примечание

/home, то во время загрузки системы будет необходимо ввести пароль для этого раздела, иначе вы не сможете получить доступ в систему под своим именем пользователя.
Примечание
cryptsetup (см. Управление шифрованными разделами).

#apt-get update#apt-get dist-upgrade#update-kernel#apt-get clean#reboot
Примечание
$ su -
или зарегистрировавшись в системе (например, на второй консоли Ctrl+Alt+F2) под именем root. Про режим суперпользователя можно почитать в главе Режим суперпользователя.
Примечание
Примечание
pkg-groups.tar — архив, содержащий дополнительные к базовой системе группы пакетов;
autoinstall.scm — сценарий автоматической установки на языке Scheme;
vm-profile.scm — различные варианты автоматической разбивки жёсткого диска на языке Scheme;
install-scripts.tar — архив, содержащий дополнительные скрипты для preinstall.d и postinstall.d в одноимённых каталогах. Скрипты должны быть исполняемыми. Скрипты из архива заменяют одноимённые скрипты инсталлятора.
metadata), доступный по сети по протоколам HTTP или FTP.
vm-profile.scm содержит сценарий на языке Scheme, описывающий формат автоматической разбивки жёсткого диска.
vm-profile.scm с одним профилем (server) разбивки жёсткого диска:
((server
(title . "Setup for server")
(action . trivial)
(actiondata ("swap" (size 2048000 . 2048000) (fsim . "SWAPFS") (methods plain))
("/" (size 16384000 . 16384000 ) (fsim . "Ext4") (methods plain))
("/var" (size 4096000 . #t ) (fsim . "Ext4") (methods plain))))
)
В примере указана разбивка:
Примечание
vm-profile.scm указываются в виде 512-байтных блоков, поэтому чтобы получить размер в байтах, нужно умножить значения на 512.
Примечание
/boot/efi не требуется — установщик добавит её сам.
vm-profile.scm с тремя профилями разбивки жёсткого диска:
((server
(title . "Setup for server")
(action . trivial)
(actiondata ("swap" (size 2048000 . 2048000) (fsim . "SWAPFS") (methods plain))
("/" (size 16384000 . 16384000 ) (fsim . "Ext4") (methods plain))
("/var" (size 4096000 . #t ) (fsim . "Ext4") (methods plain))))
(server_lvm
(title . "Setup for server LVM")
(action . trivial)
(actiondata ("swap" (size 2048000 . 2048000) (fsim . "SWAPFS") (methods lvm))
("/" (size 16384000 . 16384000 ) (fsim . "Ext4") (methods lvm))
("/var" (size 4096000 . #t ) (fsim . "Ext4") (methods lvm))))
(timeshift
(title . "Timeshift-compatible setup")
(action . trivial)
(actiondata ("swap" (size 2048000 . 2048000) (fsim . "SWAPFS") (methods plain))
("" (size 40632320 . #t) (fsim . "BtrFS") (methods plain) (subvols ("@" . "/") ("@home" . "/home")))))
)
В примере указаны профили:
/var;
/var в томе LVM;
autoinstall.scm:
("/evms/profiles/server_lvm" action apply commit #f clearall #t exclude ())
pkg-groups.tar представляет собой tar-архив с двумя подкаталогами:
groups — содержит описание групп программного обеспечения в файлах *.directory;
lists — содержит файлы со списками пакетов для каждой группы и скрытый файл .base, содержащий список пакетов «базовой системы» (то есть те пакеты, которые устанавливаются в любом случае).
pkg-groups.tar проще всего взять из установочного ISO-образа из каталога /Metadata/ и доработать, если необходимо.
$ tar xf pkg-groups.tar
lists и добавить или изменить файл группы. Имена пакетов указываются по одному в каждой строке, например, содержимое файла admc:
admc alterator-gpupdate gpupdate local-policy admx-basealt samba-dc-common admx-firefox admx-chromium gpui
$ tar cf pkg-groups.tar groups lists
autoinstall.scm:
(("pkg-install") action "write" lists "group-1 group-2" auto #t)
где group-1 и group-2 — имена файлов со списками пакетов из подкаталога lists.
Важно
autoinstall.scm представляет собой командный скрипт для программы установки, написанный с использованием языка программирования Scheme. Каждая строка скрипта — команда для модуля программы установки.
Примечание
autoinstall.scm для частного случая установки. Если требуются особые настройки, рекомендуется сначала выполнить установку вручную, изучить лог в /root/.install-log/wizard.log, и на его основе составить собственный скрипт autoinstall.scm.
autoinstall.scm:
; установка языка операционной системы (ru_RU)
("/sysconfig-base/language" action "write" lang ("ru_RU"))
; установка переключателя раскладки клавиатуры на Ctrl+Shift
("/sysconfig-base/kbd" language ("ru_RU") action "write" layout "ctrl_shift_toggle")
;выбор редакции Альт Сервер
("/editions" action "write" name "edition_server")
; установка часового пояса в Europe/Moscow, время в BIOS будет храниться в UTC
("/datetime-installer" action "write" commit #t name "RU" zone "Europe/Moscow" utc #t)
; автоматическая разбивка жёсткого диска в профиле server
("/evms/control" action "write" control open installer #t)
("/evms/control" action "write" control update)
("/evms/profiles/server" action apply commit #f clearall #t exclude ())
("/evms/control" action "write" control commit)
("/evms/control" action "write" control close)
; установка пакетов операционной системы
("pkg-install-init" action "write")
; установка только базовой системы
("/pkg-install" action "write" lists "" auto #t)
("/preinstall" action "write")
; установка загрузчика GRUB в efi
("/grub" action "write" device "efi" passwd #f passwd_1 "*" passwd_2 "*")
; настройка сетевого интерфейса на получение адреса по DHCP
("/net-eth" action "write" reset #t)
("/net-eth" action "write" name "enp0s3" ipv "4" configuration "dhcp" default "" search "" dns "" computer_name "newhost" ipv_enabled #t)
("/net-eth" action "write" commit #t)
; установка пароля суперпользователя root '123'
("/root/change_password" passwd_2 "123" passwd_1 "123")
; задание первого пользователя 'user' с паролем '123'
("/users/create_account" new_name "user" real_name "Пользователь" allow_su #t auto #f passwd_1 "123" passwd_2 "123" autologin #f)
;("/postinstall/firsttime" script "ftp://192.168.0.123/metadata/update.sh")
Примечание
("/sysconfig-base/kbd" language ("ru_RU") action "write" layout "alt_sh_toggle")
("/pkg-install" action "write" lists "centaurus/graph" auto #t)
Если необходима редакция Альт Домен, нужно изменить параметр /editions:
("/editions" action "write" name "edition_domain")
("/grub" action "write" device "efi" passwd #t passwd_1 "123" passwd_2 "123")
Если установка происходит в режиме Legacy, то загрузчик GRUB необходимо установить на первый жёсткий диск, например:
("/grub" action "write" device "/dev/sda" passwd #f passwd_1 "*" passwd_2 "*")
("/net-eth" action "write" reset #t)
("/net-eth" action "write" name "enp0s3" ipv "4" configuration "static" default "192.168.0.1" search "" dns "8.8.8.8" computer_name "newhost" ipv_enabled #t)
("/net-eth" action "add_iface_address" name "enp0s3" addip "192.168.0.25" addmask "24" ipv "4")
("/net-eth" action "write" commit #t)
где:
addip "192.168.0.25" — IP-адрес;
default "192.168.0.1" — шлюз по умолчанию;
dns "8.8.8.8" — DNS-сервер;
computer_name "newhost" — имя хоста.
autoinstall.scm можно добавить шаг /postinstall, который позволяет в конце установки или при первом запуске ОС выполнить команду или скрипт. Например:
("/postinstall/firsttime" script "ftp://192.168.0.123/metadata/update.sh")
laststate — выполняется перед перезагрузкой после установки ОС;
firsttime — выполняется при первом запуске установленной системы.
script — скачивает и выполняет скрипт с удалённого сервера (поддерживаются протоколы http и ftp). Скрипт скачивается во время установки, а запускается в зависимости от уровня запуска;
run — выполняет указанную команду или набор команд напрямую (возможно указание перенаправления).
Важно
laststate или firsttime) метод run должен быть указан не более одного раза. Если их несколько, будет выполнен только последний.
("/postinstall/firsttime" script "http://server/script.sh")
("/postinstall/firsttime" run "curl --silent --insecure http://server/finish")
("/postinstall/laststate" script "http://server/script.sh")
("/postinstall/laststate" run "curl --silent --insecure http://server/gotoreboot")
Примечание
laststate система ещё не запущена, и корневая файловая система смонтирована в каталоге, указанном через переменную $destdir. Поэтому для работы с файлами установленной системы необходимо:
$destdir в путях;
run_chroot.
#!/bin/sh a= . install2-init-functions run_chroot sh -c "date > /root/STAMP_1" date > $destdir/root/STAMP_2
install-scripts.tar представляет собой tar-архив, содержащий дополнительные скрипты:
preinstall.d — скрипты, выполняемые после установки базовой системы. Как правило, это скрипты для дополнительной настройки базовой системы (перед установкой дополнительного набора ПО) и для переноса настроек из среды инсталлятора. Добавлять сюда свои собственные скрипты стоит только тогда, когда вы чётко представляете свои цели;
postinstall.d — скрипты, выполняемые после завершения всей установки, перед перезагрузкой. Как правило, это скрипты, удаляющие служебные пакеты инсталлятора из базовой системы. Подходят для финальной настройки, очистки временных файлов и т.д.
Важно
$destdir или run_chroot (см. пример выше).
preinstall.d, скрипты postinstall.d — в каталог postinstall.d. Упаковать архив можно, выполнив команду:
$ tar cf install-scripts.tar preinstall.d postinstall.d
ai (без значения) и параметр curl с указанием каталога с установочными файлами. Формат адреса в curl должен быть представлен в виде URL:
ai curl=ftp://<IP-адрес>/metadata/

/Metadata/.
/usr/share/install2/metadata/.
Важно
Важно

SAFEMODE="nomodeset nosplash module_blacklist=nouveau,nvidia,ast bc_debug irqpoll pci=noaer oldinst"где:
nomodeset — отключает автозагрузку графических драйверов. Используется для предотвращения проблем с отображением на этапе загрузки (например, чёрный экран);
nosplash — отключает графический экран загрузки, позволяя видеть сообщения консоли;
module_blacklist=nouveau,nvidia,ast — запрещает загрузку указанных модулей ядра;
bc_debug — включает режим расширенной диагностики на этапе stage1 и копирует журнал в stage2;
irqpoll — заставляет ядро опрашивать IRQ (аппаратные прерывания) вручную;
pci=noaer — отключает AER (Advanced Error Reporting) для PCI устройств. Используется при проблемах с PCIe-контроллерами, чтобы подавить спам в журнале и сбои при загрузке;
oldinst — применяет более медленный, но надёжный метод копирования файлов вместо распаковки командой unsquashfs (актуально только для образов, использующих squashfs).

Log in as root localhost login:После ввода логина логина суперпользователя (root) система будет готова к приёму команд:

fixmbr без параметров. Программа попытается переустановить загрузчик в автоматическом режиме.

Важно


/home, то для того, чтобы войти в систему под своим именем пользователя, вам потребуется ввести пароль этого раздела и затем нажать Enter.
Важно
Примечание



Важно

Примечание
$ echo $XDG_SESSION_TYPE
wayland
Содержание

Рабочий стол. По умолчанию в области рабочего стола расположены значки:
/home/<имя пользователя>. В этой папке по умолчанию хранятся пользовательские файлы (например, аудиозаписи, видеозаписи, документы). Домашняя папка есть у каждого пользователя системы, и по умолчанию содержащиеся в ней файлы недоступны для других пользователей (даже для чтения);


— кнопка Обзор;

Примечание


Примечание

Примечание


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






, или из командной строки:
$ gnome-control-center






Примечание

Примечание
Примечание

Таблица 30.1. Управление рабочим столом
|
Комбинация клавиш
|
Описание
|
|---|---|
|
Super
|
Показать/скрыть меню GNOME
|
|
Super+A
|
Показать экран приложений
|
|
Super+Page Up и Super+Page Down
|
Переключение между рабочими пространствами
|
|
Super+Shift+← и Super+Shift+→
|
Переместить текущее окно на другой монитор
|
|
Super+L
|
Блокировка экрана
|
|
Super+V
|
Показать календарь и список уведомлений
|
|
Super+S
|
Показать системное меню
|
|
Alt+F2
|
Открыть окно для запуска команд (в окне можно использовать стрелки)
|
Таблица 30.2. Переключение раскладки клавиатуры
|
Комбинация клавиш
|
Описание
|
|---|---|
|
Super+Space
|
Переключение раскладки клавиатуры (или источник ввода)
|
|
Super+Shift+Space
|
Переключение раскладки клавиатуры в обратном порядке (полезно если имеется больше двух источников ввода)
|
Таблица 30.3. Управление окнами
|
Комбинация клавиш
|
Описание
|
|---|---|
|
Alt+F4
|
Закрыть окно
|
|
Super+H
|
Свернуть окно
|
|
Super+↑
|
Развернуть окно
|
|
Super+↓
|
Восстановить размер
|
|
Super+← и Super+→
|
Переместить окно влево/вправо (половина экрана)
|
|
Super+Tab
|
Переключение между окнами
|
|
Super+Shift+Tab
|
Переключение между окнами в обратном порядке
|
|
Super+`
|
Переключение между окнами одного приложения
|
Таблица 30.4. Общие комбинации клавиш для редактирования
|
Комбинация клавиш
|
Описание
|
|---|---|
|
Ctrl+A
|
Выделение всего текста или всех объектов в списке
|
|
Ctrl+X
|
Вырезать (удалить) выделенный текст или объекты и поместить их в буфер обмена
|
|
Ctrl+C
|
Копировать выделенный текст или объекты в буфер обмена
|
|
Ctrl+V
|
Вставить содержимого буфера обмена
|
|
Ctrl+Z
|
Отменить последнее выполненное действие
|
|
Ctrl+Shift+C
|
Копировать в терминале (консоли) выделенный текст или команду в буфер обмена
|
|
Ctrl+Shift+V
|
Вставить содержимое буфера обмена в терминал (консоль)
|
Таблица 30.5. Снимки и запись экрана
|
Комбинация клавиш
|
Описание
|
|---|---|
|
PrtSc (Print Screen)
|
Запуск инструмента создания снимков экрана
|
|
Alt+PrtSc
|
Сделать снимок активного окна
|
|
Shift+PrtSc
|
Сделать снимок всего экрана
|
|
Shift+Ctrl+R
|
Запись экрана (включить/выключить)
|

alteratorctl), графическим интерфейсом и веб-интерфейсом, позволяющим управлять сервером с любого компьютера сети.
alteratorctl включает модули: компоненты, редакции, информация о системе, пакеты, диагностика, менеджер системных интерфейсов.
alteratorctl с модулями. Веб-интерфейс ЦУС при необходимости доустанавливается через компоненты: alteratorctl components.
, расположенную на панели задач;
acc.




Примечание
$ acc-legacy
$ alteratorctl components status alterator-legacy-web
Компонент: Web-интерфейс - Альтератор (legacy)
Категория: Альтератор (legacy)
Статус: не установлен
Список пакетов, входящих в компонент:
[ ] alterator-fbi
Если компонент не установлен, необходимо установить его, выполнив команду:
# alteratorctl components install alterator-legacy-web
После установки компонента необходимо запустить веб-службу сервера ЦУС:
# systemctl enable --now ahttpd.service
https://ip-адрес:8080/.
192.168.0.122. В таком случае:
https://192.168.0.122:8080/;
https://192.168.0.122/.
Примечание
$ipaddr
inet:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
link/ether 60:eb:69:6c:ef:47 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.122/24 brd 192.168.0.255 scope global enp0s3
192.168.0.122.


Предупреждение
Примечание
rpm -qa | grep alterator*
Прочие пакеты для ЦУС можно найти, выполнив команду:
apt-cache search alterator*
#apt-get install alterator-net-openvpn#apt-get remove alterator-net-openvpn
$ alteratorctl components list -i |grep alterator
$ alteratorctl components list | grep alterator
│ └─[*] Альтератор (alterator)
│ └─[*] Альтератор - базовое управление системой (alterator-base)
│ ├─[~] Альтератор (alterator)
│ │ ├─[~] Альтератор (legacy) (alterator-legacy)
│ │ │ ├─[ ] Web-интерфейс - Альтератор (legacy) (alterator-legacy-web)
│ │ │ ├─[ ] Альтератор - графический браузер (legacy) (alterator-browser)
│ │ │ ├─[~] Базовое системное управление - Альтератор (legacy) (alterator-legacy-system)
│ │ │ │ ├─[ ] USBGuard - Альтератор (legacy) (alterator-legacy-usbguard)
│ │ │ │ ├─[ ] USB mount - Альтератор (legacy) (alterator-legacy-usbmount)
│ │ │ │ ├─[ ] Администратор системы - Альтератор (legacy) (alterator-legacy-root)
…
$ alteratorctl components install alterator-legacy-usbguard
Примечание
# systemctl restart ahttpd


Примечание


. В открывшемся окне можно просмотреть настройки сетевого интерфейса:

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

Примечание




, расположенную в левом верхнем углу Центра приложений. В строке поиска нужно ввести название приложения.


Примечание
и выбрав пункт :


.

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


$ alteratorctl <имя_модуля> <команда_модуля>
Справку по каждому модулю можно получить, выполнив команду:
$ alteratorctl <имя_модуля> -h
$ alteratorctl -m
manager
editions
components
diag
packages
systeminfo
/org/altlinux/alterator.
Примечание
$ alteratorctl editions
Альт Домен (edition_domain)
* Альт Сервер (edition_server)
Звёздочкой отмечена текущая редакция;
$ alteratorctl editions get
edition_server
$ alteratorctl editions license
$ alteratorctl editions license edition_domain
$ alteratorctl editions set edition_domain
==== AUTHENTICATING FOR org.altlinux.alterator.current-edition1.Set ====
org.altlinux.alterator.current-edition1.License requires authentication.
Authenticating as: System Administrator (root)
Password:
==== AUTHENTICATION COMPLETE ====
Примечание
alteratorctl components ) инструмент.
Примечание
$ alteratorctl components -g
$ alteratorctl components -t
$ alteratorctl components -l --enable-display-name
$ alteratorctl components list -p
$ alteratorctl components list -l -i
$ alteratorctl components list -l -u
$ alteratorctl components description samba-dc
Предназначен для развёртывания контроллера домена Active Directory на базе Samba,
совместимого с Microsoft Active Directory.
Обеспечивает единый центр аутентификации и авторизации, хранение данных о пользователях и устройствах,
а также их администрирование.
$ alteratorctl components install samba-dc
==== AUTHENTICATING FOR org.altlinux.alterator.apt1.InstallOrRemove ====
org.altlinux.alterator.apt1.InstallOrRemove requires authentication.
Authenticating as: System Administrator (root)
Password:
==== AUTHENTICATION COMPLETE ====
…
Следующие компоненты будут установлены:
samba-dc
Следующие пакеты будут установлены:
bind-utils samba-winbind-clients task-samba-dc
Продолжить? [Y/n] y
Preparing the transaction...
…
$ alteratorctl components remove samba-dc
==== AUTHENTICATING FOR org.altlinux.alterator.apt1.InstallOrRemove ====
org.altlinux.alterator.apt1.InstallOrRemove requires authentication.
Authenticating as: System Administrator (root)
Password:
==== AUTHENTICATION COMPLETE ====
…
Следующие компоненты будут удалены:
samba-dc
Следующие пакеты будут удалены:
bind-utils samba-winbind-clients task-samba-dc
Продолжить? [Y/n] y
Preparing the transaction...
…
/org/altlinux/alterator/rpm, /org/altlinux/alterator/apt, /org/altlinux/alterator/repo соответственно.
Примечание
$ alteratorctl packages repo list
rpm [p11] http://ftp.altlinux.org/pub/distributions/ALTLinux p11/branch/noarch classic
rpm [p11] http://ftp.altlinux.org/pub/distributions/ALTLinux p11/branch/x86_64 classic
rpm [p11] http://ftp.altlinux.org/pub/distributions/ALTLinux p11/branch/x86_64-i586 classic
$ alteratorctl packages apt install alterator-usbguard
Следующие пакеты будут установлены:
alterator-usbguard
Продолжить? [Y/n] y
==== AUTHENTICATING FOR org.altlinux.alterator.apt1.InstallOrRemove ====
org.altlinux.alterator.apt1.InstallOrRemove requires authentication.
Authenticating as: System Administrator (root)
Password:
==== AUTHENTICATION COMPLETE ====
Preparing the transaction...
…
$ alteratorctl packages rpm files alterator-usbguard
/etc/usbguard/android_vidpid.json
/usr/lib/alterator/backend3/usbguard
/usr/share/alterator/applications/USBGuard.desktop
/usr/share/alterator/design/scripts/alt-usb-guard.js
/usr/share/alterator/design/styles/alt_usb_guard.css
/usr/share/alterator/help/ru_RU/usbguard.html
/usr/share/alterator/ui/usbguard/ajax.scm
/usr/share/alterator/ui/usbguard/index.html
/usr/share/locale/ru/LC_MESSAGES/alterator-usbguard.mo
$ alteratorctl packages rpm packageinfo alterator-usbguard
Name : alterator-usbguard
Version : 0.2.2
Release : alt1
DistTag : p11+374626.100.4.1
Architecture: x86_64
Install Date: Вт 08 апр 2025 17:40:36
Group : System/Configuration/Other
Size : 567749
License : GPLv2+
Signature : RSA/SHA512, Вт 25 фев 2025 16:44:24, Key ID e1130f0e925e1ff4
Source RPM : alterator-usbguard-0.2.2-alt1.src.rpm
Build Date : Вт 25 фев 2025 16:44:20
Build Host : proskur-p11.hasher.altlinux.org
Relocations : (not relocatable)
Packager : Oleg Proskurin <proskur@altlinux.org>
Vendor : ALT Linux Team
URL : https://gitlab.basealt.space/proskurinov/alterator_usbguard
Summary : alterator module to control usb devices
Description :
Alterator Module to control USB devices via USBGuard
$ alteratorctl packages rpm list
$ alteratorctl packages apt reinstall alterator-usbguard
Следующие НОВЫЕ пакеты будут установлены:
alterator-usbguard
Продолжить? [Y/n] y
==== AUTHENTICATING FOR org.altlinux.alterator.apt1.InstallOrRemove ====
org.altlinux.alterator.apt1.InstallOrRemove requires authentication.
Authenticating as: System Administrator (root)
Password:
==== AUTHENTICATION COMPLETE ====
…
/org/altlinux/alterator/systeminfo.
$ alteratorctl systeminfo
$ alteratorctl systeminfo cpu
12th Gen Intel(R) Core(TM) i7-1255U (2) 2611Hz
$ alteratorctl systeminfo name
ALT Server 11.1 (Mendelevium)
$ alteratorctl systeminfo branch
p11
alt-systeminfo.




Примечание
alteratorctl components ) инструмент.


Примечание
alt-components.







Примечание

alt-packages.








Примечание







Примечание
Предупреждение
Важно
Содержание


Примечание

Примечание
/etc/net/ifaces/<интерфейс>. Настройки сети могут изменяться либо в ЦУС в данном модуле, либо напрямую через редактирование файлов /etc/net/ifaces/<интерфейс>.
/etc/net/ifaces/<интерфейс>. В этом режиме можно просмотреть настройки сети, например, полученный по DHCP IP-адрес, через графический интерфейс NetworkManager.
/etc/NetworkManager/system-connections. Этот режим особенно актуален для задач настройки сети на клиенте, когда IP-адрес необходимо получать динамически с помощью DHCP, а DNS-сервер указать явно. Через ЦУС так настроить невозможно, так как при включении DHCP отключаются настройки, которые можно задавать вручную.
/etc/systemd/network/<имя_файла>.network, /etc/systemd/network/<имя_файла>.netdev, /etc/systemd/network/<имя_файла>.link. Данный режим доступен, если установлен пакет systemd-networkd;
Примечание
# systemctl disable --now network && systemctl enable --now systemd-networkd
И, наоборот, при смене с systemd-networkd на Etcnet отключить службу systemd-networkd и включить network:
# systemctl disable --now systemd-networkd && systemctl enable --now network



/proc/net/bonding/bond0.
Предупреждение





Примечание







Примечание
/var/lib/tftpboot должен быть доступен клиенту через TFTP, каталог /srv/public/netinst должен быть доступен клиенту через NFS.
/etc/xinetd.d/tftp значение:
disable = no
/etc/xinetd.conf:
only_from = 127.0.0.1
# systemctl restart xinetd
/etc/exports добавить строку:
/srv/public -ro,insecure,no_subtree_check,fsid=1 *
# exportfs -r
# control rpcbind server
# systemctl enable --now nfs-server
Примечание
/tmp/alt-workstation-11.0-x86_64.iso). Можно также использовать URL вида http://ftp.altlinux.org/pub/distributions/ALTLinux/images/p11/workstation/x86_64/alt-workstation-11.0-x86_64.iso.
Примечание





Примечание
/var/lib/tftpboot/pxelinux.cfg/default следует дописать параметр загрузки ai (без значения) и параметр curl с указанием каталога с установочными файлами, например:
label linux kernel syslinux//boot/vmlinuz append initrd=syslinux//boot/initrd.img fastboot changedisk stagename=altinst ramdisk_size=648701 showopts vga=normal quiet splash automatic=method:nfs,network:dhcp tz=Europe/Kaliningrad lang=ru_RU vnc vncpassword=123 ai curl=ftp://192.168.0.186/metadata/

vncviewer -listen.
Предупреждение
Примечание

/var/ftp с необходимыми правами доступа. Владельцем этого каталога является пользователь root, а не псевдопользователь, от имени которого работает vsftpd. Это сделано для обеспечения безопасности FTP-сервера и системы в целом. Группой-владельцем каталога является специальная группа ftpadmin, предназначенная для администраторов FTP-сервера.
Примечание

Примечание


ca-root.pem). Этот файл можно будет добавить к списку УЦ, используемому клиентским ПО, после чего все сертификаты, подписанные данным УЦ будут приниматься автоматически;
ca-root.csr). Этот запрос можно подписать сторонним УЦ;



output.pem) будет загружен в каталог загрузок.



openvpn-server.csr) будет загружен в каталог загрузок.

openvpn-server.csr и загрузить запрос:

output.pem) будет загружен в каталог загрузок.

output.pem и нажать кнопку :


ca-root.pem и нажать кнопку :

ca-root.pem.

ca-root.pem и нажать кнопку .
Примечание
/var/lib/ssl/certs, например:
# cp /home/user/ca-root.pem /var/lib/ssl/certs

$ ip addr
должно появиться новое соединение tun0. При обычных настройках это может выглядеть так:
tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 500 link/none inet 10.8.0.6 peer 10.8.0.5/32 scope global tun0

Примечание
Примечание


Примечание
# usbguard add-user -u user --devices ALL --policy modify,list --exceptions ALL
# usbguard remove-user -u user
$ usbguard add-user -h

Важно

Примечание


Примечание


Примечание



allow id 04a9:177a name "Canon E400" serial "F572EC" via-port "1-2" hash "eql9yA8m+5VVMmhXOvbUzwNPDGCAPq+fxIQHvbptlsY="
allow/block,Interface,PID:VID,HashНапример:
allow,,090c:1000,"2dfdMHZxF5olAaNbsh68G4fpzD3iQLPL3+M7KHnSRjE=" allow,00:00:*,, allow,,1000:*, allow,,,"eql9yA8m+5VVMmhXOvbUzwNPDGCAPq+fxIQHvbptlsY="
Примечание
Важно


Примечание
/media/alt-usb-mount/$user_$group или /media/alt-usb-mount/root_$group, если пользователь не указан;
Примечание






Примечание



Примечание

Примечание






Примечание
Примечание

update-kernel. Данный модуль предоставляет возможность:

Примечание

Примечание

Примечание

Важно
SRPMS *-debuginfo-*Шаблоны указываются по одному в отдельной строке. Символ «*» используется для подстановки любого количества символов.
Примечание
/srv/public/mirror. Для того чтобы зеркалирование происходило в другую папку, необходимо эту папку примонтировать в папку /srv/public/mirror. Для этого в файл /etc/fstab следует вписать строку:
/media/disk/localrepo /srv/public/mirror none rw,bind,auto 0 0где
/media/disk/localrepo — папка-хранилище локального репозитория.
Примечание
/srv/public/mirror/<репозиторий>/branch/<архитектура>/base/. нет файлов pkglist.* значит зеркалирование не закончено (т.е. не все файлы загружены на ваш сервер).
# apt-get install nginx
/etc/nginx/sites-available.d/repo.conf:
server {
listen 80;
server_name localhost .local <ваш ip>;
access_log /var/log/nginx/repo-access.log;
error_log /var/log/nginx/repo-error.log;
location /mirror {
root /srv/public;
autoindex on;
}
}
/etc/nginx/sites-enabled.d/:
# ln -s /etc/nginx/sites-available.d/repo.conf /etc/nginx/sites-enabled.d/repo.conf
# systemctl enable --now nginx
#Проверить правильность настройки репозиториев:apt-repo rm all#apt-repo add http://<ip сервера>/mirror/p11/branch
# apt-repo
rpm http://192.168.0.185/mirror p11/branch/x86_64 classic
rpm http://192.168.0.185/mirror p11/branch/noarch classic
# apt-get install vsftpd lftp
/etc/xinetd.d/vsftpd:
# default: off
# description: The vsftpd FTP server.
service ftp
{
disable = no # включает службу
socket_type = stream
protocol = tcp
wait = no
user = root
nice = 10
rlimit_as = 200M
server = /usr/sbin/vsftpd
only_from = 0.0.0.0 # предоставить доступ для всех IP
}
# systemctl restart xinetd
/etc/vsftpd/conf:
local_enable=YES
/var/ftp/mirror:
# mkdir -p /var/ftp/mirror
Примонтировать каталог /srv/public/mirror в /var/ftp/mirror с опцией --bind:
# mount --bind /srv/public/mirror /var/ftp/mirror
Примечание
/srv/public/mirror при загрузке системы необходимо добавить следующую строку в файл /etc/fstab:
/srv/public/mirror /var/ftp/mirror none defaults,bind 0 0
#apt-repo rm all#apt-repo add ftp://<ip сервера>/mirror/p11/branch#apt-reporpm ftp://192.168.0.185/mirror p11/branch/x86_64 classic rpm ftp://192.168.0.185/mirror p11/branch/noarch classic



Примечание

Примечание

usrquota, grpquota. Для этого следует выбрать нужный раздел в списке Файловая система и установить отметку в поле Включено:


Примечание
# apt-get install state-change-notify-postfix

Mon Mar 10 11:02:43 EET 2025: The server.test.alt is about to start.При выключении:
Mon Mar 10 12:02:28 EET 2025: The server.test.alt is about to shutdown.


Содержание
Примечание
# alteratorctl components install samba-dc
или пакет task-samba-dc:
# apt-get install task-samba-dc
krb5kdc и slapd, а также bind:
# for service in smb nmb krb5kdc slapd bind; do \
systemctl disable $service; \
systemctl stop $service; \
done
Примечание
#rm -f /etc/samba/smb.conf#rm -rf /var/lib/samba#rm -rf /var/cache/samba#mkdir -p /var/lib/samba/sysvol
Предупреждение
/etc/samba/smb.conf перед созданием домена: rm -f /etc/samba/smb.conf
Предупреждение
# hostnamectl set-hostname <имя узла>
Например:
# hostnamectl set-hostname dc1.test.alt
Примечание
# hostnamectl set-hostname dc1.test.alt
/etc/net/ifaces/enp0s3/resolv.conf со следующим содержимым:
nameserver 127.0.0.1 nameserver 8.8.8.8 search test.altгде enp0s3 — имя интерфейса;
# resolvconf -u
/etc/resolv.conf:
nameserver 127.0.0.1 search test.alt
Примечание

Примечание

# samba-tool domain provision \
--realm=test.alt \
--domain=test \
--adminpass='Pa$$word' \
--dns-backend=SAMBA_INTERNAL \
--option="dns forwarder=8.8.8.8" \
--server-role=dc
где
Примечание
--use-rfc2307 позволяет поддерживать расширенные атрибуты типа UID и GID в схеме LDAP и ACL на файловой системе Linux.
# samba-tool domain provision \
--realm=test.alt \
--domain=test \
--adminpass='Pa$$word'\
--dns-backend=SAMBA_INTERNAL \
--option="dns forwarder=8.8.8.8" \
--option="ad dc functional level = 2016" \
--server-role=dc \
--function-level=2016
Примечание
Примечание
# samba-tool domain provision
Realm [TEST.ALT]:
Domain [TEST]:
Server Role (dc, member, standalone) [dc]:
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:
DNS forwarder IP address (write 'none' to disable forwarding) [127.0.0.1]: 8.8.8.8
Administrator password:
Retype password:
Looking up IPv4 addresses
Looking up IPv6 addresses
Setting up share.ldb
Setting up secrets.ldb
Setting up the registry
Setting up the privileges database
Setting up idmap db
Setting up SAM db
Setting up sam.ldb partitions and settings
Setting up sam.ldb rootDSE
Pre-loading the Samba 4 and AD schema
Adding DomainDN: DC=test,DC=alt
Adding configuration container
Setting up sam.ldb schema
Setting up sam.ldb configuration data
Setting up display specifiers
Modifying display specifiers and extended rights
Adding users container
Modifying users container
Adding computers container
Modifying computers container
Setting up sam.ldb data
Setting up well known security principals
Setting up sam.ldb users and groups
Setting up self join
Repacking database from v1 to v2 format (first record CN=Address-Book-Roots2,CN=Schema,CN=Configuration,DC=test,DC=alt)
Repack: re-packed 10000 records so far
Repacking database from v1 to v2 format (first record CN=nTFRSSettings-Display,CN=407,CN=DisplaySpecifiers,CN=Configuration,DC=test,DC=alt)
Repacking database from v1 to v2 format (first record CN=Remote Desktop Users,CN=Builtin,DC=test,DC=alt)
Adding DNS accounts
Creating CN=MicrosoftDNS,CN=System,DC=test,DC=alt
Creating DomainDnsZones and ForestDnsZones partitions
Populating DomainDnsZones and ForestDnsZones partitions
Repacking database from v1 to v2 format (first record DC=ForestDnsZones,DC=test.alt,CN=MicrosoftDNS,DC=DomainDnsZones,DC=test,DC=alt)
Repacking database from v1 to v2 format (first record CN=MicrosoftDNS,DC=ForestDnsZones,DC=test,DC=alt)
Setting up sam.ldb rootDSE marking as synchronized
Fixing provision GUIDs
A Kerberos configuration suitable for Samba AD has been generated at /var/lib/samba/private/krb5.conf
Merge the contents of this file with your system krb5.conf or replace it with this one. Do not create a symlink!
Once the above files are installed, your Samba AD server will be ready to use
Server Role: active directory domain controller
Hostname: dc1
NetBIOS Domain: TEST
DNS Domain: test.alt
DOMAIN SID: S-1-5-21-1303430852-2161078951-3079987082
Примечание
/etc/resolvconf.conf добавить строку:
name_servers=127.0.0.1Обновить DNS адреса:
# resolvconf -u
# systemctl enable --now samba
/etc/krb5.conf. В этом файле следует раскомментировать строку default_realm и содержимое разделов realms и domain_realm и указать название домена (обратите внимание на регистр символов), в строке dns_lookup_realm должно быть установлено значение false:
includedir /etc/krb5.conf.d/
[logging]
# default = FILE:/var/log/krb5libs.log
# kdc = FILE:/var/log/krb5kdc.log
# admin_server = FILE:/var/log/kadmind.log
[libdefaults]
dns_lookup_kdc = true
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
default_realm = TEST.ALT
# default_ccache_name = KEYRING:persistent:%{uid}
[realms]
TEST.ALT = {
default_domain = test.alt
}
[domain_realm]
dc1 = TEST.ALT
Примечание
krb5.conf для домена в каталоге /var/lib/samba/private/. Можно просто заменить этим файлом файл, находящийся в каталоге /etc/:
# cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
# samba-tool domain info 127.0.0.1
Forest : test.alt
Domain : test.alt
Netbios domain : TEST
DC name : dc1.test.alt
DC netbios name : DC
Server site : Default-First-Site-Name
Client site : Default-First-Site-Name
# smbclient -L localhost -Uadministrator
Password for [TEST\administrator]:
Sharename Type Comment
--------- ---- -------
sysvol Disk
netlogon Disk
IPC$ IPC IPC Service (Samba 4.21.9-alt1)
SMB1 disabled -- no workgroup available
Общие ресурсы netlogon и sysvol создаваемые по умолчанию нужны для функционирования сервера и создаются в smb.conf в процессе развертывания/модернизации.
/etc/resolv.conf:
#cat /etc/resolv.confnameserver 127.0.0.1 search test.alt #host test.alttest.alt has address 192.168.0.132 test.alt has IPv6 address fd47:d11e:43c1:0:a00:27ff:fe49:2df
#Если имена не находятся, необходимо проверить выключение службы named.host -t SRV _kerberos._udp.test.alt._kerberos._udp.test.alt has SRV record 0 100 88 dc1.test.alt #host -t SRV _ldap._tcp.test.alt._ldap._tcp.test.alt has SRV record 0 100 389 dc1.test.alt. #host -t A dc1.test.alt.dc1.test.alt has address 192.168.0.132
# kinit administrator@TEST.ALT
Password for administrator@TEST.ALT:
Просмотр полученного билета:
# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@TEST.ALT
Valid starting Expires Service principal
19.08.2025 17:13:17 20.08.2025 03:13:17 krbtgt/TEST.ALT@TEST.ALT
renew until 20.08.2025 17:13:14
ad dc functional level файла /etc/samba/smb.conf. Возможные значения: 2008_R2, 2012, 2012_R2, 2016.
# samba-tool domain schemaupgrade --schema=<SCHEMA>
где SCHEMA — схема, до которой необходимо выполнить обновление (по умолчанию 2019).
# samba-tool domain functionalprep --function-level=<FUNCTION_LEVEL>
где FUNCTION_LEVEL — функциональный уровень, к которому нужно подготовиться (по умолчанию 2016).
# samba-tool domain level raise --domain-level=<DOMAIN_LEVEL> --forest-level=<FOREST_LEVEL>
где:
Примечание
ad dc functional level в файле /etc/samba/smb.conf вручную, защита от несовпадения функций между контроллерами домена снижается. Поэтому на всех контроллерах домена должна использоваться одна и та же версия Samba, чтобы гарантировать, что поведение, наблюдаемое клиентом, будет одинаковым независимо от того, к какому контроллеру домена осуществляется соединение.
/etc/samba/smb.conf добавить строку:
ad dc functional level = 2016
# systemctl restart samba.service
# samba-tool domain schemaupgrade --schema=2019
# samba-tool domain functionalprep --function-level=2016
# samba-tool domain level raise --domain-level=2016 --forest-level=2016
Domain function level changed!
Forest function level changed!
All changes applied successfully!
# samba-tool domain level show
Domain and forest function level for domain 'DC=test,DC=alt'
Forest function level: (Windows) 2016
Domain function level: (Windows) 2016
Lowest function level of a DC: (Windows) 2016
samba-tool user create имя пользователяsamba-tool user setexpiry имя пользователя
samba-tool user delete имя пользователя
samba-tool user disable имя пользователя
samba-tool user enable имя пользователя
samba-tool user setpassword имя пользователя
# samba-tool user list
#samba-tool user create ivanov --given-name='Иван Иванов' --mail-address='ivanov@test.alt'#samba-tool user setexpiry ivanov --noexpiry
Предупреждение
pdbedit -x -m имя
Примечание
/etc/resolv.conf обязательно должен быть добавлен первый DC как nameserver:
#где enp0s3 — имя интерфейса.echo "name_servers=192.168.0.132" >> /etc/resolvconf.conf#echo "search_domains=test.alt" >> /etc/resolvconf.conf#resolvconf -u#cat /etc/resolv.confsearch test.alt nameserver 192.168.0.132 nameserver 8.8.8.8
Примечание
# alteratorctl components install samba-dc
или пакет task-samba-dc:
# apt-get install task-samba-dc
# for service in smb nmb krb5kdc slapd bind; do \
systemctl disable $service; \
systemctl stop $service; \
done
#rm -f /etc/samba/smb.conf#rm -rf /var/lib/samba#rm -rf /var/cache/samba#mkdir -p /var/lib/samba/sysvol
# samba-tool dns add 192.168.0.132 test.alt DC2 A 192.168.0.133 -Uadministrator
Password for [TEST\administrator]:
Record added successfully
Предупреждение
/etc/krb5.conf):
[libdefaults] default_realm = TEST.ALT dns_lookup_realm = false dns_lookup_kdc = true
# kinit administrator@TEST.ALT
Password for administrator@TEST.ALT:
Предупреждение
# klist
Ticket cache: KEYRING:persistent:0:0
Default principal: administrator@TEST.ALT
Valid starting Expires Service principal
19.08.2025 17:55:32 20.08.2025 03:55:32 krbtgt/TEST.ALT@TEST.ALT
renew until 26.08.2025 17:55:29
# samba-tool domain join test.alt DC -Uadministrator \
--realm=test.alt --option="dns forwarder=8.8.8.8"
Если всё нормально, в конце будет выведена информация о присоединении к домену:
Joined domain TEST (SID S-1-5-21-1303430852-2161078951-3079987082) as a DCДля получения дополнительной информации можно воспользоваться командой:
# samba-tool domain join --help
/etc/net/ifaces/enp0s3/resolv.conf и выполнить:
# resolvconf -u
# systemctl enable --now samba
Примечание
# host -t A test.alt
test.alt has address 192.168.0.132
test.alt has address 192.168.0.133
В списке адресов должен отображаться IP-адрес добавленного контроллера домена.
# samba-tool drs showrepl --summary -Uadministrator
Password for [TEST\administrator]:
[ALL GOOD]
Примечание
# samba-tool user add testuser --random-password
User 'testuser' added successfully
# samba-tool user list | grep testuser
testuser
Предупреждение
Предупреждение
# samba-tool drs replicate dc2.test.alt \
dc1.test.alt dc=test,dc=alt -Uadministrator
Password for [TEST\administrator]:
Replicate from dc1.test.alt to dc2.test.alt was successful.
Сначала указывается приемник, затем источник, после этого реплицируемая ветка в LDAP.
# samba-tool drs replicate dc1.test.alt \
dc2.test.alt dc=test,dc=alt -Uadministrator
Password for [TEST\administrator]:
Replicate from dc2.test.alt to dc1.test.alt was successful.
Сначала указывается приемник, затем источник, после этого реплицируемая ветка в LDAP.
Примечание
# samba-tool drs showrepl -Uadministrator
Примечание
# apt-get install task-auth-ad-sssd

# hostnamectl set-hostname newhost.test.alt
/etc/net/ifaces/enp0s3/resolv.conf со следующим содержимым:
nameserver 192.168.0.132 search test.altгде 192.168.0.132 — IP-адрес DNS-сервера домена, test.alt — домен.
# resolvconf -u
Примечание
/etc/resolv.conf должны появиться строки:
search test.alt nameserver 192.168.0.132
# system-auth write ad test.alt newhost test 'administrator' 'Pa$$word'
Joined 'NEWHOST' to dns domain 'test.alt'



gpupdate. Он рассчитан на работу на машине, введённой в домен Samba.
Важно
# apt-get install admx-basealt admx-chromium admx-firefox admx-yandex-browser admx-thunderbird admx-msi-setup
# admx-msi-setup
Примечание
admx-msi-setup устанавливает последнюю версию ADMX от Microsoft (сейчас это Microsoft Group Policy — Windows 10 October 2020 Update (20H2)). С помощью параметров можно указать другой источник:
# admx-msi-setup -h
admx-msi-setup - download msi files and extract them in <destination-directory> default value is /usr/share/PolicyDefinitions/.
Usage: admx-msi-setup [-d <destination-directory>] [-s <admx-msi-source>]
Removing admx-msi-setup temporary files...
/usr/share/PolicyDefinitions. Необходимо скопировать локальные ADMX-файлы в сетевой каталог sysvol (/var/lib/samba/sysvol/<DOMAIN>/Policies/):
# samba-tool gpo admxload -U Administrator
Примечание
# apt-get install alterator-gpupdate

Примечание

# apt-get install admc gpui
Примечание
#apt-get install admx-basealt admx-chromium admx-firefox admx-yandex-browser admx-thunderbird admx-msi-setup#admx-msi-setup
\\<DOMAIN>\SYSVOL\<DOMAIN>\Policies\PolicyDefinitions.

ping только суперпользователю (root).
admc:
$ admc











ping сможет только администратор:
$ping localhostbash: ping: команда не найдена $/usr/bin/ping localhostbash: /usr/bin/ping: Отказано в доступе #control pingrestricted


Важно
# gpoa --loglevel 0
В выводе команды будут фигурировать полученные групповые объекты. В частности, соответствующий уникальный код (GUID) объекта.
smb.confПримечание
/etc/samba/smb.conf, следует запустить команду testparm для проверки файла на синтаксические ошибки:
# testparm /etc/samba/smb.conf
И, в случае отсутствия ошибок, перезапустить службы smb и nmb, чтобы изменения вступили в силу:
#systemctl restart smb#systemctl restart nmb
Примечание
# smbpasswd -a <имя_пользователя>
Примечание
# smbpasswd -a user
New SMB password:
Retype new SMB password:
Added user user.
Примечание
Примечание
browseable для домашних каталогов будет унаследован от глобального флага browseable, а не флага browseable раздела [homes]. Таким образом, установка browseable = no в разделе [homes] скроет общий ресурс [homes], но сделает видимыми все автоматические домашние каталоги.
browseable — определяет, отображается ли этот общий ресурс в списке доступных общих ресурсов в сетевом окружении и в списке просмотра (по умолчанию: browseable = yes);
path — указывает каталог, к которому должен быть предоставлен доступ;
read only — если для этого параметра задано значение «yes», то пользователи службы не могут создавать или изменять файлы в каталоге (по умолчанию: read only = yes);
writable — инвертированный синоним для read only (по умолчанию: writeable = no);
write list — список пользователей, которым будет предоставлен доступ для чтения и записи. Если пользователь находится в этом списке, ему будет предоставлен доступ для записи, независимо от того, какой параметр установлен для параметра read only. Список может включать имена групп с использованием синтаксиса @group;
read list — список пользователей, которым будет предоставлен доступ только для чтения. Если пользователь находится в этом списке, ему не будет предоставлен доступ для записи, независимо от того, какой параметр установлен для параметра read only. Список может включать имена групп;
guest ok — если этот параметр имеет значение «yes», то для подключения к ресурсу не требуется пароль (по умолчанию: guest ok = no);
guest only — разрешить только гостевые соединения к общему ресурсу (по умолчанию: guest only = no);
printable — если этот параметр имеет значение «yes», то клиенты могут открывать, писать и ставить задания в очередь печати (по умолчанию: printable = no);
map to guest — определяет что делать с запросами, которые не удалось аутентифицировать («Never» — запросы с неправильными паролями будут отклонены; «Bad user» — запросы с неправильными паролями будут отклонены, если такое имя пользователя существует;) (по умолчанию: map to guest = Never).
/etc/samba/smb.conf для работы Samba в режиме файлового сервера с двумя открытыми для общего доступа ресурсами, домашними каталогами пользователей и принтером (закомментированные параметры действуют по умолчанию):
[global]
workgroup = WORKGROUP
server string = Samba Server Version %v
security = user
log file = /var/log/samba/log.%m
max log size = 50
guest ok = yes
cups options = raw
map to guest = Bad User
; idmap config * : backend = tdb
[homes]
comment = Home Directory for '%u'
browseable = no
writable = yes
guest ok = no
[share]
comment = Commonplace
path = /srv/share
read only = No
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
; guest ok = no
; writable = no
printable = yes
# Каталог доступный только для чтения, за исключением пользователей
# входящих в группу "staff"
[public]
comment = Public Stuff
path = /home/samba
public = yes
writable = yes
write list = +staff
; browseable = yes
[Free]
path = /mnt/win/Free
read only = no
; browseable = yes
guest ok = yes
# smbclient -L 192.168.0.157 -Uuser
Password for [WORKGROUP\user]:
Sharename Type Comment
--------- ---- -------
share Disk Commonplace
public Disk Public Stuff
Free Disk
IPC$ IPC IPC Service (Samba 4.21.9-alt1)
user Disk Home Directory for 'user'
Примечание
man smb.conf.
/etc/fstab /etc/samba/sambacreds (например, командой mcedit /etc/samba/sambacreds), с содержимым:
username=имя_пользователя password=пароль
/etc/fstab необходимо прописать:
//server/public /mnt/server_public cifs users,credentials=/etc/samba/sambacreds 0 0
/etc/samba/sambacreds, надо установить так, чтобы файл был доступен только владельцу:
# chmod 600 /etc/samba/sambacreds
и принадлежать root:
# chown root: /etc/samba/sambacreds
Предупреждение
# alteratorctl components install sogo
или пакет task-sogo:
# apt-get install task-sogo
Драйвер к PostgreSQL будет установлен автоматически.
# /etc/init.d/postgresql initdb
Введите новый пароль суперпользователя:
Повторите его:
# systemctl start postgresql
#su - postgres -s /bin/sh -c 'createuser --no-superuser --no-createdb --no-createrole --encrypted --pwprompt sogo'Введите пароль для новой роли: Повторите его: Пароль: #su - postgres -s /bin/sh -c 'createdb -O sogo sogo'Пароль: #systemctl restart postgresql
#samba-tool user create sogo#samba-tool user setexpiry --noexpiry sogo
/etc/sogo/sogo.conf:
{
SOGoProfileURL = "postgresql://sogo:password@/sogo/sogo_user_profile";
OCSFolderInfoURL = "postgresql://sogo:password@/sogo/sogo_folder_info";
OCSSessionsFolderURL = "postgresql://sogo:password@/sogo/sogo_sessions_folder";
OCSEMailAlarmsFolderURL = "postgresql://sogo:password@/sogo/sogo_alarms_folder";
SOGoEnableEMailAlarms = YES;
SOGoDraftsFolderName = Drafts;
SOGoSentFolderName = Sent;
SOGoTrashFolderName = Trash;
SOGoIMAPServer = "imaps://localhost:993/?tlsVerifyMode=allowInsecureLocalhost";
SOGoMailingMechanism = sendmail;
SOGoForceExternalLoginWithEmail = NO;
NGImap4ConnectionStringSeparator = "/";
SOGoUserSources = (
{
id = sambaLogin;
displayName = "SambaLogin";
canAuthenticate = YES;
type = ldap;
CNFieldName = cn;
IDFieldName = cn;
UIDFieldName = mail;
hostname = "ldaps://127.0.0.1";
baseDN = "CN=Users,DC=test,DC=alt";
bindDN = "CN=sogo,CN=Users,DC=test,DC=alt";
bindPassword = "Pa$$word";
bindFields = (mail,sAMAccountName);
},
{
id = sambaShared;
displayName = "Shared Addressbook";
canAuthenticate = NO;
isAddressBook = YES;
type = ldap;
CNFieldName = cn;
IDFieldName = mail;
UIDFieldName = mail;
hostname = "ldaps://127.0.0.1";
baseDN = "CN=Users,DC=test,DC=alt";
bindDN = "CN=sogo,CN=Users,DC=test,DC=alt";
bindPassword = "Pa$$word";
filter = "((NOT isCriticalSystemObject='TRUE') AND (mail='*') AND (NOT objectClass=contact))";
},
{
id = sambaContacts;
displayName = "Shared Contacts";
canAuthenticate = NO;
isAddressBook = YES;
type = ldap;
CNFieldName = cn;
IDFieldName = mail;
UIDFieldName = mail;
hostname = "ldaps://127.0.0.1";
baseDN = "CN=Users,DC=test,DC=alt";
bindDN = "CN=sogo,CN=Users,DC=test,DC=alt";
bindPassword = "Pa$$word";
filter = "((((objectClass=person) AND (objectClass=contact) AND ((uidNumber>=2000) OR (mail='*')))
AND (NOT isCriticalSystemObject='TRUE') AND (NOT showInAdvancedViewOnly='TRUE') AND (NOT uid=Guest))
OR (((objectClass=group) AND (gidNumber>=2000)) AND (NOT isCriticalSystemObject='TRUE') AND (NOT showInAdvancedViewOnly='TRUE')))";
mapping = {
displayname = ("cn");
};
}
);
SOGoSieveScriptsEnabled = YES;
SOGoLanguage = Russian;
SOGoTimeZone = Europe/Moscow;
SOGoFirstDayOfWeek = 1;
}
где password — пароль роли sogo, заданный при создании базы данных sogo;
# for service in samba postgresql memcached sogo httpd2; do systemctl enable $service; systemctl restart $service; done
/var/log/sogo/sogo.log
Примечание
sogo.conf можно проверить, выполнив команду:
# plparse /etc/sogo/sogo.conf
#for mod in proxy proxy_http authn_core authn_file auth_basic authz_user env dav headers rewrite version setenvif; do a2enmod $mod; done#a2ensite SOGo#systemctl restart httpd2 sogo
http://<адрес_сервера>/SOGo/

Примечание
/var/log/sogo/sogo.log есть ошибки вида:
Jul 06 16:14:51 sogod [12257]: [ERROR] <0x0x5578db070b40[LDAPSource]> Could not bind to the LDAP server ldaps://127.0.0.1 (389) using the bind DN: CN=sogo,CN=Users,DC=test,DC=altСледует в файл
/etc/openldap/ldap.conf добавить опцию
TLS_REQCERT allowи перезапустить службы samba и sogo:
# systemctl restart samba sogo

/var/mail/<имя_домена>/<имя_пользователя> (формат maildir);
Примечание
mail. Указать атрибут mail можно, например, при создании учётной записи, используя опцию --mail-address:
# samba-tool user create petrov --mail-address='petrov@test.alt'
Предупреждение
/etc/samba/smb.conf в секции [global]:
ldap server require strong auth = noи перезапустить samba:
# systemctl restart samba
#samba-tool user create -W Users vmail#samba-tool user setexpiry vmail --noexpiry
# apt-get install postfix-ldap
/etc/postfix изменить файлы для домена test.alt:
main.cf:
# Global Postfix configuration file. This file lists only a small subset # of all parameters. For the syntax, and for a complete parameter list, # see the postconf(5) manual page. For a commented and more complete # version of this file see /etc/postfix/main.cf.dist mailbox_command = /usr/libexec/dovecot/dovecot-lda -f "$SENDER" -a "$RECIPIENT" inet_protocols = ipv4 # Mappings virtual_mailbox_base = /var/mail virtual_mailbox_domains = test.alt virtual_mailbox_maps = ldap:/etc/postfix/ad_local_recipients.cf virtual_alias_maps = ldap:/etc/postfix/ad_mail_groups.cf virtual_transport = dovecot local_transport = virtual local_recipient_maps = $virtual_mailbox_maps # SSL/TLS smtpd_use_tls = yes smtpd_tls_security_level = encrypt #smtpd_tls_security_level = may smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = test.alt smtpd_sasl_path = private/auth smtpd_sasl_type = dovecot smtpd_sender_login_maps = ldap:/etc/postfix/ad_sender_login.cf smtpd_tls_auth_only = yes smtpd_tls_cert_file = /var/lib/ssl/certs/dovecot.cert smtpd_tls_key_file = /var/lib/ssl/private/dovecot.key smtpd_tls_CAfile = /var/lib/ssl/certs/dovecot.pem smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination, permit_sasl_authenticated, reject smtpd_sender_restrictions = reject_authenticated_sender_login_mismatch default_destination_recipient_limit = 1
/etc/postfix/mydestination должен быть пустым;
master.cf необходимо добавить строки:
dovecot unix - n n - - pipe
flags=DRhu user=mail:mail argv=/usr/libexec/dovecot/deliver -d ${recipient}
smtps inet n - n - - smtpd
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
ad_local_recipients.cf:
version = 3 server_host = test.alt:389 search_base = dc=test,dc=alt scope = sub query_filter = (&(|(mail=%s)(otherMailbox=%u@%d))(sAMAccountType=805306368)) result_filter = %s result_attribute = mail special_result_attribute = member bind = yes bind_dn = cn=vmail,cn=users,dc=test,dc=alt bind_pw = Pa$$word
ad_mail_groups.cf:
version = 3 server_host = test.alt:389 search_base = dc=test,dc=alt timeout = 3 scope = sub query_filter = (&(mail=%s)(sAMAccountType=268435456)) result_filter = %s leaf_result_attribute = mail special_result_attribute = member bind = yes bind_dn = cn=vmail,cn=users,dc=test,dc=alt bind_pw = Pa$$word
ad_sender_login.cf:
version = 3 server_host = test.alt:389 search_base = dc=test,dc=alt scope = sub query_filter = (&(objectClass=user)(|(sAMAccountName=%s)(mail=%s))) result_attribute = mail bind = yes bind_dn = cn=vmail,cn=users,dc=test,dc=alt bind_pw = Pa$$word
# systemctl restart postfix
# postconf >/dev/null
# postmap -q petrov@test.alt ldap:/etc/postfix/ad_local_recipients.cf
petrov@test.alt
Проверка входа:
# postmap -q petrov@test.alt ldap:/etc/postfix/ad_sender_login.cf
petrov@test.alt
Проверка общего адреса e-mail:
#samba-tool group add --mail-address=sales@test.alt SalesAdded group Sales #samba-tool group addmembers Sales ivanov,petrovAdded members to group Sales #postmap -q sales@test.alt ldap:/etc/postfix/ad_mail_groups.cfsales@test.alt,ivanov@test.alt,petrov@test.alt
# apt-get install dovecot
/etc/dovecot/dovecot-ldap.conf.ext:
hosts = test.alt:3268 ldap_version = 3 auth_bind = yes dn = cn=vmail,cn=Users,dc=test,dc=alt dnpass = Pa$$word base = cn=Users,dc=test,dc=alt scope = subtree deref = never user_filter = (&(objectClass=user)(|(mail=%Lu)(sAMAccountName=%Lu))) user_attrs = =uid=8,gid=12,mail=user pass_filter = (&(objectClass=user)(|(mail=%Lu)(sAMAccountName=%Lu))) pass_attrs = mail=user
/etc/dovecot/conf.d/10-auth.conf к виду:
auth_mechanisms = plain !include auth-ldap.conf.ext
/etc/dovecot/conf.d/10-mail.conf:
mail_location = maildir:/var/mail/%d/%n:UTF-8:INBOX=/var/mail/%d/%n/Inbox mail_uid = mail mail_gid = mail first_valid_uid = 5 first_valid_gid = 5
/etc/dovecot/conf.d/10-master.conf:
service imap-login {
inet_listener imap {
port = 0
}
inet_listener imaps {
}
}
service pop3-login {
inet_listener pop3 {
port = 0
}
inet_listener pop3s {
port = 0
}
}
service lmtp {
unix_listener lmtp {
}
}
service imap {
}
service pop3 {
}
service auth {
unix_listener auth-userdb {
}
unix_listener /var/spool/postfix/private/auth {
mode = 0600
user = postfix
group = postfix
}
}
service auth-worker {
}
service dict {
unix_listener dict {
}
}
/etc/dovecot/conf.d/15-lda.conf:
protocol lda {
hostname = test.alt
postmaster_address = administrator@test.alt
}
/etc/dovecot/conf.d/15-mailboxes.conf:
namespace inbox {
inbox = yes
mailbox Drafts {
auto = subscribe
special_use = \Drafts
}
mailbox Junk {
auto = subscribe
special_use = \Junk
}
mailbox Trash {
auto = subscribe
special_use = \Trash
}
mailbox Sent {
auto = subscribe
special_use = \Sent
}
mailbox "Sent Messages" {
special_use = \Sent
}
}
/etc/dovecot/conf.d/10-stats.conf:
service stats {
unix_listener stats-reader {
user = mail
group = mail
mode = 0660
}
unix_listener stats-writer {
user = mail
group = mail
mode = 0660
}
}
# systemctl restart dovecot
# doveconf >/dev/null
#chown dovecot:root /etc/dovecot/dovecot-ldap.conf.ext#chmod 0640 /etc/dovecot/dovecot-ldap.conf.ext#chown root:postfix /etc/postfix/ad_local_recipients.cf /etc/postfix/ad_mail_groups.cf /etc/postfix/ad_sender_login.cf#chmod 0640 /etc/postfix/ad_local_recipients.cf /etc/postfix/ad_mail_groups.cf /etc/postfix/ad_sender_login.cf
# systemctl restart dovecot postfix
#date | mail -s test petrov@test.alt#mailqMail queue is empty
#где dc1.test.alt — имя узла сервера SOGo.openssl s_client -crlf -connect dc1.test.alt:993...tag login petrov@test.alt Pa$$wordtag OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE] Logged in
/etc/dovecot/conf.d/dovecot.conf указать используемые протоколы:
protocols = imap lmtp submission sieve
/etc/dovecot/conf.d/10-mail.conf добавить опцию mail_home с указанием пути до каталогов с почтой:
mail_location = maildir:/var/mail/%d/%n:UTF-8:INBOX=/var/mail/%d/%n/Inbox mail_uid = mail mail_gid = mail first_valid_uid = 5 first_valid_gid = 5 mail_home = /var/mail/%d/%nПеременные
%d и %n указывают на имя домена и имя учетной записи.
/etc/dovecot/conf.d/15-lda.conf в раздел protocol lda добавить плагин sieve:
mail_plugins = $mail_plugins sieve
/etc/dovecot/conf.d/20-lmtp.conf в разделе protocol lmtp также указать плагин sieve:
mail_plugins = $mail_plugins sieve
/etc/dovecot/conf.d/20-managesieve.conf раскомментировать строку:
protocols = $protocols sieve
/etc/dovecot/conf.d/90-sieve.conf закомментировать строку sieve = file:~/sieve;active=~/.dovecot.sieve и добавить новое её значение:
#sieve = file:~/sieve;active=~/.dovecot.sieve sieve = file:/var/mail/%Ld/%n/sieve;active=/var/mail/%Ld/%n/active.sieveВ этом же файле раскомментировать опцию
sieve_extensions и привести её к виду:
sieve_extensions = +notify +imapflags +vacation-seconds +vacation +date +relational
/etc/dovecot/conf.d/10-auth.conf подключить master-users:
!include auth-master.conf.ext
/etc/dovecot/master-users создать запись:
my_master_user@non-exist.com:{PLAIN}password::::::
Должно быть обязательно указано несуществующее имя домена. В реальных условиях необходимо использовать хэш пароля (например, doveadm pw -s SSHA512).
/etc/sogo/sieve.creds указать эти данные в виде:
my_master_user@non-exist.com:password
/etc/cron.d/sogo дописать:
MAILTO=""и раскомментировать строку:
*/5 * * * * _sogo /usr/sbin/sogo-tool update-autoreply -p /etc/sogo/sieve.creds
SOGoSieveScriptsEnabled), окно настроек сообщений об отпуске (параметр SOGoVacationEnabled), а также окно настроек адресов электронной почты для пересылки (параметр SOGoForwardEnabled). Для этого в файл конфигурации /etc/sogo/sogo.conf добавить строки:
SOGoSieveScriptsEnabled = YES; SOGoVacationEnabled = YES; SOGoForwardEnabled = YES; SOGoSieveFolderEncoding = UTF-8;
# systemctl restart postfix dovecot sogo




/etc/dovecot/conf.d/10-master.conf:
service auth {
unix_listener auth-userdb {
#mode = 0666
user = mail
group = mail
}
unix_listener /var/spool/postfix/private/auth {
mode = 0600
user = postfix
group = postfix
}
}
/etc/dovecot/conf.d/10-mail.conf:
mail_home=/var/mail/%d/%n
mail_location = maildir:/var/mail/%d/%n:UTF-8:INBOX=/var/mail/%d/%n/Inbox
mail_debug=yes
namespace inbox {
type = private
separator = /
prefix =
inbox = yes
}
namespace {
type = shared
separator = /
prefix = shared/%%u/
location = maildir:%%h/:INDEX=~/shared/%%u:INDEXPVT=~/shared/%%u
subscriptions = yes
list = children
}
mail_uid = mail
mail_gid = mail
first_valid_uid = 5
first_valid_gid = 5
auth_socket_path = /var/run/dovecot/auth-userdb
mail_plugins = acl
protocol !indexer-worker {
}
mbox_write_locks = fcntl
/etc/dovecot/conf.d/20-imap.conf:
protocol imap {
mail_plugins = $mail_plugins imap_acl acl
}
/etc/dovecot/conf.d/15-lda.conf в раздел protocol lda добавить плагин acl:
protocol lda {
mail_plugins = $mail_plugins sieve acl
hostname = test.alt
postmaster_address = administrator@test.alt
}
/etc/dovecot/conf.d/20-lmtp.conf в разделе protocol lmtp также указать плагин acl:
protocol lmtp {
mail_plugins = $mail_plugins sieve acl
}
/etc/dovecot/conf.d/90-plugin.conf:
plugin {
acl = vfile
acl_shared_dict = file:/var/mail/test.alt/shared-mailboxes.db
}
# systemctl restart postfix dovecot sogo



Примечание

# hostnamectl set-hostname ipa.example.test
/etc/net/ifaces/enp0s3/resolv.conf со следующим содержимым:
nameserver 192.168.0.113 nameserver 8.8.8.8 search example.testгде enp0s3 — имя интерфейса, 192.168.0.113 — IP-адрес сервера.
# resolvconf -u
Примечание
#systemctl stop ahttpd#a2dissite 000-default_https#a2disport https#systemctl condreload httpd2
# apt-get install freeipa-server freeipa-server-dns
или через компоненты:
# alteratorctl components install freeipa-server
# ipa-server-install -U --hostname=$(hostname) \
-r EXAMPLE.TEST -n example.test -p 12345678 -a 12345678 \
--setup-dns --forwarder 8.8.8.8 --auto-reverse
Для пакетной установки необходимо указать следующие параметры:
-r REALM_NAME — имя области Kerberos для сервера FreeIPA;
-n DOMAIN_NAME — доменное имя;
-p DM_PASSWORD — пароль, который будет использоваться сервером каталогов для менеджера каталогов (DM);
-a ADMIN_PASSWORD — пароль пользователя admin, администратора FreeIPA;
-U — позволить процессу установки выбрать параметры по умолчанию, не запрашивая у пользователя информацию;
--hostname=HOST_NAME — полное DNS-имя этого сервера.
--setup-dns — создать зону DNS, если она еще не существует, и настроить DNS-сервер;
--forwarder или --no-forwarders — в зависимости от того, нужно ли настроить серверы пересылки DNS или нет;
--auto-reverse или --no-reverse — в зависимости от того, нужно ли настроить автоматическое обнаружение обратных зон DNS, которые должны быть созданы в FreeIPA DNS, или отключить автоматическое определение обратных зон.
# ipa-server-install
Do you want to configure integrated DNS (BIND)? [no]: yesОстальные вопросы можно выбрать по умолчанию (просто нажать Enter). При установке также потребуется ввести пароль администратора системы и пароль администратора каталогов (пароли должны быть не менее 8 символов).
The IPA Master Server will be configured with: Hostname: ipa.example.test IP address(es): 192.168.0.113 Domain name: example.test Realm name: EXAMPLE.TEST The CA will be configured with: Subject DN: CN=Certificate Authority,O=EXAMPLE.TEST Subject base: O=EXAMPLE.TEST Chaining: self-signed BIND DNS server will be configured to serve IPA domain with: Forwarders: 8.8.8.8 Forward policy: only Reverse zone(s): 0.168.192.in-addr.arpa. Continue to configure the system with these values? [no]: yesДалее начнётся процесс конфигурации. После его завершения будет выведена подсказка со следующими шагами.
# kinit admin
# ipa dnsrecord-add example.test _ntp._udp \
--srv-priority=0 --srv-weight=100 --srv-port=123 \
--srv-target=ipa.example.test
# ntpdate -q localhost
server 127.0.0.1, stratum 4, offset -0.000082, delay 0.02570
24 Mar 10:11:57 ntpdate[25874]: adjust time server 127.0.0.1 offset -0.000082 sec
#ipa dnszone-show example.testИмя зоны: example.test. Активная зона: True Полномочный сервер имён: ipa.example.test. … #ipa dnszone-show 0.168.192.in-addr.arpa.Имя зоны: 0.168.192.in-addr.arpa. Активная зона: True Полномочный сервер имён: ipa.example.test. …
https://ipa.example.test/ipa/ui/.
Примечание
# ipa-server-install --uninstall
https://ipa.example.test и ввести данные администратора для входа в систему.




# apt-get install freeipa-client libsss_sudo krb5-kinit bind-utils libbind zip task-auth-freeipa

# hostnamectl set-hostname comp01.example.test
/etc/net/ifaces/eth0/resolv.conf со следующим содержимым:
nameserver 192.168.0.113 search example.testгде 192.168.0.113 — IP-адрес FreeIPA сервера, example.test — домен.
# resolvconf -u
Примечание
/etc/resolv.conf должны появиться строки:
search example.test nameserver 192.168.0.113



# ipa-client-install -U -p admin -w 12345678
или интерактивно:
# ipa-client-install
'''Discovery was successful!''' Client hostname: comp01.example.test Realm: EXAMPLE.TEST DNS Domain: example.test IPA Server: ipa.example.test BaseDN: dc=example,dc=test Continue to configure the system with these values? [no]:Необходимо ответить
yes, ввести имя пользователя, имеющего право вводить машины в домен, и его пароль.
Предупреждение
Hostname (comp01.example.test) does not have A/AAAA record. Failed to update DNS records.Необходимо проверить IP-адрес доменного DNS сервера в файле
/etc/resolv.conf.
# ipa-client-install -U --uninstall
# control sudo public






Предупреждение
#systemctl stop sssd#rm -f /var/lib/sss/db/*#rm -f /var/lib/sss/mc/*#systemctl start sssd

Примечание
96-local-gdm-settings в каталоге /etc/dconf/db/gdm.d/ (каталог, если его ещё не существует, нужно предварительно создать) со следующим содержимым:
[org/gnome/login-screen] #Отключить список пользователей disable-user-list=true
/etc/dconf/profile/gdm со следующим содержимым:
user-db:user system-db:gdm file-db:/usr/share/gdm/greeter-dconf-defaults
# dconf update
# ipa-client-install --uninstall
…
Client uninstall complete.
The original nsswitch.conf configuration has been restored.
You may need to restart services or reboot the machine.
Do you want to reboot the machine? [no]: yes
The ipa-client-install command was successful
/etc/krb5.keytab):
# ipa-rmkeytab -k /path/to/keytab -r EXAMPLE.TEST
# ipa dnsrecord-del
Имя записи: comp01
Имя зоны: example.test
Возможность удаления определённой записи не предусмотрена.
Удалить все? Yes/No (default No): yes
-----------------------
Удалена запись "comp01"
-----------------------
# ipa host-del comp01.example.test
---------------------------------
Удалён узел "comp01.example.test"
---------------------------------
ipa-replica-install. Реплики необходимо устанавливать по одной. Установка нескольких реплик одновременно не поддерживается.
ipa-replica-install.
Примечание
Примечание

ipa-replica-install сначала регистрирует систему в качестве клиента, а затем устанавливает компоненты реплики. В примере, описанном ниже, для авторизации регистрации используется случайный пароль, действительный только для одной регистрации этого клиента.
$ kinit admin
$ ipa host-add replica.example.test --random --ip-address=192.168.0.145
----------------------------------
Добавлен узел "replica.example.test"
----------------------------------
Имя узла: replica.example.test
Случайный пароль: 2AaT0Ix8itDsYugdDGoRtBt
Пароль: True
Таблица ключей: False
Managed by: replica.example.test
$ ipa hostgroup-add-member ipaservers --hosts replica.example.test
Группа узлов: ipaservers
Описание: IPA server hosts
Узлы-участники: ipa.example.test, replica.example.test
-----------------------------------
Количество добавленных участников 1
-----------------------------------
# apt-get install freeipa-server freeipa-server-dns
ipa-replica-install, указав сгенерированный пароль в параметре --password (т.к. пароль часто содержит специальные символы, следует заключить его в одинарные кавычки):
# ipa-replica-install --password='2AaT0Ix8itDsYugdDGoRtBt' \
--setup-ca --setup-dns --forwarder 192.168.0.113 --forwarder 8.8.8.8
Configuring client side components
This program will set up IPA client.
Version 4.12.3
Discovery was successful!
Client hostname: replica.example.test
Realm: EXAMPLE.TEST
DNS Domain: example.test
IPA Server: ipa.example.test
BaseDN: dc=example,dc=test
…
The ipa-client-install command was successful
…
The ipa-replica-install command was successful
$kinit admin$ipa user-add test_user
$kinit admin$ipa user-show test_user

# alteratorctl components install zabbix-server
Будут также установлены веб-сервер Apache и PHP8.4.
# alteratorctl components install postgresql17
# /etc/init.d/postgresql initdb
…
Введите новый пароль суперпользователя:
Повторите его:
…
# systemctl enable --now postgresql
#su - postgres -s /bin/sh -c 'createuser --no-superuser --no-createdb --no-createrole --encrypted --pwprompt zabbix'Введите пароль для новой роли: Повторите его: Пароль: #su - postgres -s /bin/sh -c 'createdb -O zabbix zabbix'Пароль: #systemctl restart postgresql
#su - postgres -s /bin/sh -c 'psql -U zabbix -f /usr/share/doc/zabbix-common-database-pgsql-*/schema.sql zabbix'Пароль пользователя zabbix: #su - postgres -s /bin/sh -c 'psql -U zabbix -f /usr/share/doc/zabbix-common-database-pgsql-*/images.sql zabbix'Пароль пользователя zabbix: #su - postgres -s /bin/sh -c 'psql -U zabbix -f /usr/share/doc/zabbix-common-database-pgsql-*/data.sql zabbix'Пароль пользователя zabbix:
Примечание
php<мажорная>.<минорная версии>-<имя модуля>
/etc/php/8.4/apache2-mod_php/php.ini:
memory_limit = 256M post_max_size = 32M max_execution_time = 600 max_input_time = 600 date.timezone = Europe/Moscow always_populate_raw_post_data = -1
/etc/zabbix/zabbix_server.conf:
DBHost=localhost DBName=zabbix DBUser=zabbix DBPassword=Пароль от базы
# systemctl enable --now zabbix_pgsql
# ln -s /etc/httpd2/conf/addon.d/A.zabbix.conf /etc/httpd2/conf/extra-enabled/
# systemctl enable --now httpd2
# chown apache2:apache2 /var/www/webapps/zabbix/ui/conf
http://<ip-сервера>/zabbix

Примечание
/etc/httpd2/conf/sites-available/default.conf в секцию <Directory> добавить запись:
Require all grantedи перезапустить Apache:
# systemctl restart httpd2

/etc/zabbix/zabbix_server.conf). По умолчанию в качестве Database schema необходимо указать public.

Примечание



Логин: Admin Пароль: zabbix


Примечание

# alteratorctl components install zabbix-agent
или пакет zabbix-agent:
# apt-get install zabbix-agent
/etc/zabbix/zabbix_agentd.conf нужно задать следующие параметры:
Server=<IP-сервера> ServerActive=<IP-сервера> Hostname=comp01.example.test
Hostname — имя узла мониторинга, которое будет отображаться в Zabbix.
Примечание
Hostname пуст или закомментирован, то узел будет зарегистрирован под системным именем.
# systemctl enable --now zabbix_agentd.service
Примечание


Примечание
/etc/zabbix/zabbix_agentd.conf) в поле Hostname.
Примечание




/etc/zabbix/zabbix_agentd.conf) указать следующие значения:
Hostname=<уникальное_имя_узла> Server=<IP-сервера> ServerActive=<IP-сервера> HostMetadata=alt.autoregЗначение
HostMetadata должно совпадать с условием, заданным на сервере.
Примечание
Примечание
hostnamectl:
# hostnamectl set-hostname node01
/etc/hosts на каждом узле:
#Проверка корректности разрешения имён:echo "192.168.0.113 node01" >> /etc/hosts#echo "192.168.0.145 node02" >> /etc/hosts#echo "192.168.0.132 node03" >> /etc/hosts
#ping node01PING node01 (192.168.0.113) 56(84) bytes of data. 64 bytes from node01 (192.168.0.113): icmp_seq=1 ttl=64 time=0.352 ms #ping node02PING node02 (192.168.0.145) 56(84) bytes of data. 64 bytes from node02 (192.168.0.145): icmp_seq=1 ttl=64 time=0.635 ms
/etc/openssh/sshd_config раскомментировать следующие строки
PermitRootLogin without-password PubkeyAuthentication yes AuthorizedKeysFile /etc/openssh/authorized_keys/%u /etc/openssh/authorized_keys2/%u .ssh/authorized_keys .ssh/authorized_keys2 PasswordAuthentication yes
# systemctl restart sshd
# ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N ""
Важно
#становится возможным выполнение команд и доступ к файлам удалённого узла по SSH без запроса пароля.ssh-copy-id -i ~/.ssh/id_ed25519.pub user@node02#ssh-copy-id -i ~/.ssh/id_ed25519.pub user@node03
/root/.ssh/authorized_keys на каждом узле. Например, на node02:
#ssh user@node02user@node02 $su -node02 #cat /home/user/.ssh/authorized_keys >> /root/.ssh/authorized_keysnode02 #exituser@node02 $exit
Важно
/root/.ssh должен существовать. Если каталога нет, его можно создать:
node02 #mkdir -p /root/.sshnode02 #chmod 700 /root/.ssh
# ssh node02 -- uname -n
node02
pcs.
# apt-get install corosync resource-agents pacemaker pcs
или
# alteratorctl components install pacemaker
Примечание
$ apt-cache search resource-agents*
pcs нужно задать пароль пользователю hacluster (одинаковый на всех узлах):
# passwd hacluster
# systemctl enable --now pcsd
# pcs host auth node01 node02 node03 -u hacluster
Password:
node02: Authorized
node01: Authorized
node03: Authorized
# pcs cluster setup newcluster node01 node02 node03
Destroying cluster on hosts: 'node01', 'node02', 'node03'...
node03: Successfully destroyed cluster
node01: Successfully destroyed cluster
node02: Successfully destroyed cluster
Requesting remove 'pcsd settings' from 'node01', 'node02', 'node03'
node01: successful removal of the file 'pcsd settings'
node03: successful removal of the file 'pcsd settings'
node02: successful removal of the file 'pcsd settings'
Sending 'corosync authkey', 'pacemaker authkey' to 'node01', 'node02', 'node03'
node01: successful distribution of the file 'corosync authkey'
node01: successful distribution of the file 'pacemaker authkey'
node03: successful distribution of the file 'corosync authkey'
node03: successful distribution of the file 'pacemaker authkey'
node02: successful distribution of the file 'corosync authkey'
node02: successful distribution of the file 'pacemaker authkey'
Sending 'corosync.conf' to 'node01', 'node02', 'node03'
node01: successful distribution of the file 'corosync.conf'
node02: successful distribution of the file 'corosync.conf'
node03: successful distribution of the file 'corosync.conf'
Cluster has been successfully set up.
# pcs cluster start --all
node02: Starting Cluster...
node03: Starting Cluster...
node01: Starting Cluster...
# pcs cluster enable --all
node01: Cluster Enabled
node02: Cluster Enabled
node03: Cluster Enabled
# pcs status cluster
Cluster Status:
Cluster Summary:
* Stack: corosync (Pacemaker is running)
* Current DC: node03 (version 3.0.1-alt1-3.0.1) - partition with quorum
* Last updated: Wed Dec 17 09:51:53 2025 on node01
* Last change: Wed Dec 17 09:51:44 2025 by hacluster via hacluster on node03
* 3 nodes configured
* 0 resource instances configured
Node List:
* Online: [ node01 node02 node03 ]
PCSD Status:
node01: Online
node03: Online
node02: Online
# corosync-cmapctl | grep members
runtime.members.1.config_version (u64) = 0
runtime.members.1.ip (str) = r(0) ip(192.168.0.113)
runtime.members.1.join_count (u32) = 1
runtime.members.1.status (str) = joined
runtime.members.2.config_version (u64) = 0
runtime.members.2.ip (str) = r(0) ip(192.168.0.145)
runtime.members.2.join_count (u32) = 1
runtime.members.2.status (str) = joined
runtime.members.3.config_version (u64) = 0
runtime.members.3.ip (str) = r(0) ip(192.168.0.132)
runtime.members.3.join_count (u32) = 1
runtime.members.3.status (str) = joined
# pcs property
Cluster Properties: cib-bootstrap-options
cluster-infrastructure=corosync
cluster-name=newcluster
dc-version=3.0.1-alt1-3.0.1
have-watchdog=false
# pcs property set no-quorum-policy=ignore
Примечание
# pcs property set stonith-enabled=false
Важно
# pcs resource create ClusterIP ocf:heartbeat:IPaddr2 ip=192.168.0.251 cidr_netmask=24 op monitor interval=20s
# pcs resource standards
lsb
ocf
service
systemd
Поставщики OCF-агентов:
# pcs resource providers
heartbeat
pacemaker
redhat
Список агентов от поставщика OCF:
# pcs resource agents ocf:heartbeat
aliyun-vpc-move-ip
anything
AoEtarget
apache
asterisk
…
Xinetd
zabbixserver
ZFS
# pcs status
Cluster name: newcluster
Cluster Summary:
* Stack: corosync (Pacemaker is running)
* Current DC: node03 (version 3.0.1-alt1-3.0.1) - partition with quorum
* Last updated: Wed Dec 17 09:55:22 2025 on node01
* Last change: Wed Dec 17 09:54:47 2025 by root via root on node01
* 3 nodes configured
* 1 resource instance configured
Node List:
* Online: [ node01 node02 node03 ]
Full List of Resources:
* ClusterIP (ocf:heartbeat:IPaddr2): Started node01
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
# pcs cluster stop node01
node01: Stopping Cluster (pacemaker)...
node01: Stopping Cluster (corosync)...
Ресурс ClusterIP автоматически переключится на один из оставшихся узлов (например, node02). Проверка статуса на узле node02:
# pcs status
Cluster name: newcluster
Cluster Summary:
* Stack: corosync (Pacemaker is running)
* Current DC: node03 (version 3.0.1-alt1-3.0.1) - partition with quorum
* Last updated: Wed Dec 17 09:56:18 2025 on node02
* Last change: Wed Dec 17 09:54:47 2025 by root via root on node01
* 3 nodes configured
* 1 resource instance configured
Node List:
* Online: [ node02 node03 ]
* OFFLINE: [ node01 ]
Full List of Resources:
* ClusterIP (ocf:heartbeat:IPaddr2): Started node02
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
Таблица 58.1. Системные требования
|
Компонент
|
ОЗУ
|
ЦП
|
Диск
|
|---|---|---|---|
|
OpenUDS Server
|
2 ГБ
|
2 vCPU
|
8 ГБ
|
|
SQL Server
|
1 ГБ
|
2 vCPU
|
10 ГБ
|
|
OpenUDS Tunnel
|
2 ГБ
|
2 vCPU
|
13 ГБ
|
Примечание
# alteratorctl components install mariadb
или:
# apt-get install mariadb
# systemctl enable --now mariadb.service
Выполнить базовую настройку безопасности:
# mysql_secure_installation
$mysql -u root -pEnter password: MariaDB>CREATE DATABASE dbuds CHARACTER SET utf8 COLLATE utf8_general_ci;MariaDB>CREATE USER 'dbuds'@'%' IDENTIFIED BY 'password';MariaDB>GRANT ALL PRIVILEGES ON dbuds.* TO 'dbuds'@'%';MariaDB>FLUSH PRIVILEGES;MariaDB>exit;
# alteratorctl components install openuds
или пакет openuds-server-nginx:
# apt-get install openuds-server-nginx
#apt-get install memcached#systemctl enable --now memcached
/etc/openuds/settings.py, указав корректные данные для подключения к SQL-серверу:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'OPTIONS': {
'isolation_level': 'read committed',
},
'NAME': 'dbuds',
'USER': 'dbuds',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '3306',
}
}
#su -s /bin/bash - openuds$cd /usr/share/openuds$python3 manage.py migrate$python3 manage.py createcachetable uds_response_cach$exit
# systemctl enable --now openuds-web.service
#ln -s ../sites-available.d/openuds.conf /etc/nginx/sites-enabled.d/openuds.conf#systemctl enable --now nginx.service
# systemctl enable --now openuds-taskmanager.service
Важно
# systemctl disable --now httpd2

Примечание
Примечание

# alteratorctl components install openuds-tunnel
или пакет openuds-tunnel:
# apt-get install openuds-tunnel
Примечание
/etc/openuds-tunnel/ssl автоматически генерируются самоподписанные сертификаты. Их можно заменить на корпоративные или выданные доверенным УЦ.
/etc/openuds-tunnel/udstunnel.conf :
uds_server = http://192.168.0.53/uds/rest/tunnel/ticket uds_token = 5ba9d52bb381196c2a22e495ff1c9ba4bdc03440b726aa8bгде:
# systemctl enable --now openuds-tunnel.service
# openuds_tunnel_register -H 192.168.0.88 -n Tunnel \
-t 5ba9d52bb381196c2a22e495ff1c9ba4bdc03440b726aa8b \
-m 08:00:27:31:2d:14
Результат:
Tunnel token register success. (With token: 5ba9d52bb381196c2a22e495ff1c9ba4bdc03440b726aa8b)Параметры:
-H — IP-адрес туннельного сервера;
-n — название туннеля;
-t — токен туннельного сервера (из файла udstunnel.conf);
-t — MAC-адрес туннельного сервера.
192.168.0.88:7777
Примечание
/etc/guacamole/guacamole.properties привести значение параметра uds-base-url к виду:
http://<IP_openuds_сервера>/uds/guacamole/auth/<Токен_из_udstunnel.conf>/Например:
uds-base-url=http://192.168.0.53/uds/guacamole/auth/5ba9d52bb381196c2a22e495ff1c9ba4bdc03440b726aa8b
# systemctl disable --now ahttpd
либо изменить порт Tomcat в файле /etc/tomcat/server.xml, например, на 8081:
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxParameterCount="1000"
/>
/etc/tomcat/server.xml добавить новый Connector, в котором указать порт (в примере 10443), сертификат (файл .crt, .pem и т.д.), закрытый ключ (.key, .pem и т.д.):
<Connector port="10443"
protocol="org.apache.coyote.http11.Http11AprProtocol"
SSLEnabled="true"
ciphers="TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305"
maxThreads="500"
scheme="https"
secure="true"
SSLCertificateFile="/etc/openuds-tunnel/ssl/certs/openuds-tunnel.pem"
SSLCertificateKeyFile="/etc/openuds-tunnel/ssl/private/openuds-tunnel.key"
maxKeepAliveRequests="1000"
clientAuth="false"
sslProtocol="TLSv1.2+TLSv1.3" />
# systemctl enable --now guacd tomcat
http://192.168.0.88:8080 — для подключения по HTTP;
https://192.168.0.88:10443 — для подключения по HTTPS.
/etc/openuds/settings.py.rpmnew (если они есть) в используемый файл /etc/openuds/settings.py.
# diff -u --color /etc/openuds/settings.py /etc/openuds/settings.py.rpmnew
# apt-get install memcached
# systemctl enable --now memcached
# su -s /bin/bash - openuds -c "cd /usr/share/openuds; python3 manage.py migrate"
# su -s /bin/bash - openuds -c "cd /usr/share/openuds; python3 manage.py createcachetable uds_response_cache"
/run/openuds/socket.




Примечание







Примечание


Примечание

Примечание



Примечание





Примечание

Примечание



Примечание






Важно
/disabled: https://<адрес_сервера>/uds/page/login/disabled
Примечание

https://<адрес_сервера>/uds/page/login/<метка> (например, https://192.168.0.53/uds/page/login/AD).



Важно

uid=user_freeipa,cn=users,cn=accounts,dc=example,dc=test) и пароль:


Примечание




Примечание
userPrincipalName, пользователь при входе должен указать логин в формате имя_пользователя@домен. Если указано sAMAccountName, в качестве логина используется имя пользователя без указания домена.
Примечание
Предупреждение
/etc/samba/smb.conf в секции [global]:
ldap server require strong auth = noи перезапустить samba:
# systemctl restart samba
Примечание

Примечание








Примечание




Примечание



Примечание
OU = name_OU_last_level, … OU = name_OU_first_level, DC = name_domain, DC = extension_domain. Во избежание ошибок, рекомендуется сверяться со значением атрибута distinguishedName в свойствах целевой OU;


OU = name_OU_last_level, … OU = name_OU_first_level, DC = name_domain, DC = extension_domain. Во избежание ошибок, рекомендуется сверяться со значением атрибута distinguishedName в свойствах целевой OU;







lpstat -a);





/media);



Примечание
Важно











/);


Примечание








Примечание

{use} — процент использования пула (рассчитывается на основе максимального количества предоставляемых сервисов и текущего числа назначенных услуг);
{total} — общее количество машин (значение из поля Максимальное количество предоставляемых сервисов);
{usec} — количество машин, используемых пользователями в пуле;
{left} — количество машин, доступных для подключения;
Примечание



Примечание













Примечание



Примечание



Примечание
Warning (Предупреждение), Error (Ошибка) и Critical (Критическая ошибка).



Примечание
/join <secret>где <secret> — секретный ключ, указанный в настройках Telegram-уведомлений OpenUDS. Только после успешной подписки сообщения от бота будут доставляться в данный чат.
/leave



Важно
Примечание

# apt-get install openuds-actor
# systemctl enable udsactor.service
$ /usr/sbin/UDSActorConfig-pkexec

Важно
Примечание
# apt-get install xrdp
#systemctl enable --now xrdp#systemctl enable --now xrdp-sesman
# gpasswd -a user tsusers
# apt-get install x2goserver
# systemctl enable --now x2goserver
# UDSActorRegister
SSL validation (yes/no): no
Hostname: 192.168.0.53
Authenticator ['Internal', 'radiusauth', 'freeipa', 'AD', 'admin']: admin
Username: root
Password:
Pre connect:
Run once:
Post config:
Log level ['debug', 'info', 'error', 'fatal']: error
Registration with UDS completed.
Можно использовать переменные окружения:
#export OPENUDS_ACTOR_SSL_VALIDATION=no#export OPENUDS_HOST=192.168.0.53#export OPENUDS_AUTHENTICATOR=admin#export OPENUDS_ACTOR_POST_CONFIG=/home/user/test.sh#export OPENUDS_ACTOR_LOG_LEVEL=error#UDSActorRegisterUsername: root Password: Pre connect: Run once: Registration with UDS completed.
SSL Validation — проверки SSL-сертификата (OPENUDS_ACTOR_SSL_VALIDATION);
Hostname — имя или IP-адрес сервера OpenUDS (OPENUDS_HOST);
Authenticator — аутентификатор (OPENUDS_AUTHENTICATOR);
Username — имя администратора в OpenUDS (OPENUDS_USERNAME);
Password — пароль пользователя (OPENUDS_PASSWORD);
Pre connect — путь к скрипту предподключения (OPENUDS_ACTOR_PRE_CONNECT);
Run once — путь к однократному скрипту (OPENUDS_ACTOR_RUN_ONCE);
Post config — путь к скрипту постнастройки (OPENUDS_ACTOR_POST_CONFIG);
Log Level — уровень журналирования (OPENUDS_ACTOR_LOG_LEVEL).
Примечание
Примечание


Примечание

Важно


Примечание



Примечание

# apt-get install openuds-client




Примечание
Примечание

Примечание

Таблица 58.2. Системные требования
|
Компонент
|
Количество
|
ОЗУ
|
ЦП
|
Диск
|
|---|---|---|---|---|
|
SQL Server
|
2
|
1 ГБ
|
2 vCPU
|
10 ГБ
|
|
HAProxy
|
2
|
1 ГБ
|
2 vCPU
|
10 ГБ
|
|
OpenUDS Server
|
2
|
2 ГБ
|
2 vCPU
|
8 ГБ
|
|
OpenUDS Tunnel
|
2
|
2 ГБ
|
2 vCPU
|
13 ГБ
|
Примечание
# apt-get install mariadb
Запустить службу и добавить её в автозагрузку:
# systemctl enable --now mariadb.service
Выполнить базовую настройку безопасности:
# mysql_secure_installation
/etc/my.cnf.d/server.cnf):
skip-networking;
server-id = 1 log-bin = mysql-bin bind-address = 192.168.0.128где
192.168.0.128 — IP-адрес главного сервера.
# systemctl restart mariadb
$ mysql -p
MariaDB [(none)]> CREATE USER 'replica'@'%' IDENTIFIED BY 'uds';
Query OK, 0 rows affected (0.009 sec)
replication slave пользователю:
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%'
Query OK, 0 rows affected (0.002 sec)
MariaDB [(none)]> SHOW MASTER STATUS\G
Пример вывода:
*************************** 1. row ***************************
File: mysql-bin.000002
Position: 328
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.001 sec)
mysql-bin.000002 — имя файла;
328 — позиция двоичного файла.
/etc/my.cnf.d/server.cnf:
skip-networking;
server-id = 2 log-bin = mysql-bin bind-address = 192.168.0.129где
192.168.0.129 — IP-адрес вторичного сервера.
# systemctl restart mariadb
$ mysql -p
MariaDB [(none)]> STOP SLAVE;
Query OK, 0 rows affected, 1 warning (0.001 sec)
MariaDB [(none)]> CHANGE MASTER TO
MASTER_HOST='192.168.0.128',
MASTER_USER='replica',
MASTER_PASSWORD='uds',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=328;
Query OK, 0 rows affected (0.020 sec)
192.168.0.128 — IP-адрес основного сервера;
replica — пользователь, с правами которого будет производиться репликация;
uds — пароль пользователя replica;
mysql-bin.000002 — имя файла, полученного на предыдущем шаге;
328 — позиция двоичного файла.
MariaDB [(none)]> START SLAVE;
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.128
Master_User: replica
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 328
Relay_Log_File: mysqld-relay-bin.000006
Relay_Log_Pos: 555
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
…
Slave_IO_Running: Yes Slave_SQL_Running: Yes
MariaDB [(none)]>CREATE DATABASE replicatest;Query OK, 1 row affected (0.001 sec) MariaDB [(none)]>SHOW DATABASES;+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | replicatest | +--------------------+ 4 rows in set (0.001 sec)
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| replicatest |
+--------------------+
4 rows in set (0.002 sec)
MariaDB [(none)]> DROP DATABASE replicatest;
$mysql -pEnter password: MariaDB [(none)]>CREATE DATABASE dbuds CHARACTER SET utf8 COLLATE utf8_general_ci;MariaDB [(none)]>CREATE USER 'dbuds'@'%' IDENTIFIED BY 'password';MariaDB [(none)]>GRANT ALL PRIVILEGES ON dbuds.* TO 'dbuds'@'%';MariaDB [(none)]>FLUSH PRIVILEGES;MariaDB [(none)]>exit;
/etc/openuds/settings.py).
/etc/openuds/settings.py на всех серверах OpenUDS заменить IP-адрес базы данных на IP вторичного сервера (192.168.0.129);
# systemctl restart openuds-web openuds-taskmanager
Примечание
# mysqldump -u dbuds -ppassword --databases dbuds > dbuds_dump.sql

Примечание
Важно
# openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /root/ssl.key -out /root/ssl.crt
.pem (предварительно следует убедиться, что каталог /etc/openssl/private существует):
#mkdir -p /etc/openssl/private#cat /root/ssl.crt /root/ssl.key > /etc/openssl/private/haproxy.pem
Примечание
/etc/openssl/private на резервном узле. Если используется корпоративный сертификат, корпоративный сертификат, его также следует разместить на обоих серверах.
# apt-get install haproxy keepalived
/etc/haproxy/haproxy.cfg следующим:
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /var/lib/haproxy/admin.sock mode 660 level admin
stats timeout 30s
maxconn 2048
user _haproxy
group _haproxy
daemon
# Настройки SSL
ssl-default-bind-options ssl-min-ver TLSv1.2 prefer-client-ciphers
ssl-default-bind-ciphers ECDH+AESGCM:ECDH+CHACHA20:ECDH+AES256:ECDH+AES128:!aNULL:!SHA1:!AESCCM
tune.ssl.default-dh-param 2048
defaults
log global
mode http
option httplog
option dontlognull
option forwardfor
retries 3
option redispatch
stats enable
stats uri /haproxystats
stats realm Strictly\ Private
stats auth stats:haproxystats
timeout connect 5000
timeout client 50000
timeout server 50000
frontend http-in
bind *:80
mode http
http-request set-header X-Forwarded-Proto http
default_backend openuds-backend
frontend https-in
bind *:443 ssl crt /etc/openssl/private/haproxy.pem
mode http
http-request set-header X-Forwarded-Proto https
default_backend openuds-backend
frontend tunnel-in
bind *:1443
mode tcp
option tcplog
default_backend tunnel-backend-ssl
frontend tunnel-in-guacamole # HTML5
bind *:10443
mode tcp
option tcplog
default_backend tunnel-backend-guacamole
backend openuds-backend
option http-keep-alive
balance roundrobin
server udss1 192.168.0.85:80 check inter 2000 rise 2 fall 5
server udss2 192.168.0.86:80 check inter 2000 rise 2 fall 5
backend tunnel-backend-ssl
mode tcp
option tcplog
balance roundrobin
server udst1 192.168.0.87:7777 check inter 2000 rise 2 fall 5
server udst2 192.168.0.88:7777 check inter 2000 rise 2 fall 5
backend tunnel-backend-guacamole
mode tcp
option tcplog
balance source
server udstg1 192.168.0.87:10443 check inter 2000 rise 2 fall 5
server udstg2 192.168.0.88:10443 check inter 2000 rise 2 fall 5
#echo "net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf#sysctl -p
/etc/keepalived/keepalived.conf.
/etc/keepalived/keepalived.conf на основном узле:
global_defs {
# Keepalived process identifier
lvs_id haproxy_DH
}
# Script used to check if HAProxy is running
vrrp_script check_haproxy {
script "killall -0 haproxy"
interval 2
weight 2
}
# Виртуальный интерфейс
# The priority specifies the order in which the assigned interface to take over in a failover
vrrp_instance VI_01 {
state MASTER
interface enp0s3
virtual_router_id 51
priority 101
# Виртуальный IP-адрес
virtual_ipaddress {
192.168.0.49
}
track_script {
check_haproxy
}
}
где enp0s3 — сетевой интерфейс для виртуального IP.
global_defs {
# Keepalived process identifier
lvs_id haproxy_DH_passive
}
# Script used to check if HAProxy is running
vrrp_script check_haproxy {
script "killall -0 haproxy"
interval 2
weight 2
}
# Виртуальный интерфейс
# The priority specifies the order in which the assigned interface to take over in a failover
vrrp_instance VI_01 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
# Виртуальный IP-адрес
virtual_ipaddress {
192.168.0.49
}
track_script {
check_haproxy
}
}
где eth0 — интерфейс для виртуального IP.
Примечание
ip a.
#systemctl enable --now haproxy#systemctl enable --now keepalived
$ ip a |grep enp0s3
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
inet 192.168.0.52/24 brd 192.168.0.255 scope global noprefixroute enp0s3
inet 192.168.0.49/32 scope global enp0s3
# apt-get install openuds-server-nginx
/etc/openuds/settings.py, указав корректные данные для подключения к главному MySQL-серверу:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'OPTIONS': {
'isolation_level': 'read committed',
},
'NAME': 'dbuds',
'USER': 'dbuds',
'PASSWORD': 'password',
'HOST': '192.168.0.128', # IP главного MySQL
'PORT': '3306',
}
}
#su -s /bin/bash - openuds$cd /usr/share/openuds$python3 manage.py migrate$exit
#systemctl enable --now openuds-web.service#ln -s ../sites-available.d/openuds.conf /etc/nginx/sites-enabled.d/openuds.conf#systemctl enable --now nginx.service#systemctl enable --now openuds-taskmanager.service
# apt-get install openuds-tunnel
/etc/openuds-tunnel/udstunnel.conf :
uds_server = http://192.168.0.49/uds/rest/tunnel/ticket uds_token = 5ba9d52bb381196c2a22e495ff1c9ba4bdc03440b726aa8b
# systemctl enable --now openuds-tunnel.service
/etc/guacamole/guacamole.properties указать:
uds-base-url=http://192.168.0.49/uds/guacamole/auth/5ba9d52bb381196c2a22e495ff1c9ba4bdc03440b726aa8bгде 192.168.0.49 — виртуальный IP-адрес;
/etc/tomcat/server.xml добавить новый Connector с корректными путями к сертификатам:
<Connector port="10443"
protocol="org.apache.coyote.http11.Http11AprProtocol"
SSLEnabled="true"
ciphers="TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305"
maxThreads="500"
scheme="https"
secure="true"
SSLCertificateFile="/etc/openuds-tunnel/ssl/certs/openuds-tunnel.pem"
SSLCertificateKeyFile="/etc/openuds-tunnel/ssl/private/openuds-tunnel.key"
maxKeepAliveRequests="1000"
clientAuth="false"
sslProtocol="TLSv1.2+TLSv1.3" />
# systemctl enable --now guacd tomcat
#openuds_tunnel_register -H 192.168.0.87 -n Tunnel1\ -t 5ba9d52bb381196c2a22e495ff1c9ba4bdc03440b726aa8b \ -m 08:00:27:31:2d:14 #openuds_tunnel_register -H 192.168.0.88 -n Tunnel2\ -t 9ba4bdc03440b726aa8b5ba9d52bb381196c2a22e495ff1c \ -m 08:00:27:31:ac:22
Примечание
Примечание
frontend tunnel-in файла /etc/haproxy/haproxy.cfg (в примере: 192.168.0.49:1443):

frontend tunnel-in-guacamole (в примере: 192.168.0.49:10443).
proxmox-backup-client можно создавать резервные копии и восстанавливать данные (в PVE клиент встроен).
ct/100/2025-04-05T09:41:43Z host/server/2025-04-06T10:36:33Z
# apt-get install proxmox-backup-server
или через компоненты:
# alteratorctl components install proxmox-backup-server
# systemctl enable --now proxmox-backup-proxy.service
proxmox-backup-proxy предоставляет API управления PBS по адресу 127.0.0.1:82. Она имеет права на выполнение всех привилегированных операций.
Примечание
# modprobe zfs
Чтобы модуль загружался автоматически при старте системы, следует раскомментировать строку:
#zfsв файле
/etc/modules-load.d/zfs.conf.
# apt-get install proxmox-backup-client
https://<имя-компьютера|IP-адрес>:8007. Для входа требуется аутентификация (логин по умолчанию: root, пароль задаётся в процессе установки ОС):



# proxmox-backup-manager disk list

/mnt/datastore/store1):
# proxmox-backup-manager disk fs create store1 \
--disk nvme0n3 --filesystem ext4 --add-datastore true
create datastore 'store1' on disk nvme0n3
Chunkstore create: 1%
Chunkstore create: 2%
…
Chunkstore create: 99%
TASK OK

/mnt/datastore/zfs_st:
# proxmox-backup-manager disk zpool create zfs_st \
--devices nvme0n1,nvme0n2 --raidlevel mirror
# proxmox-backup-manager disk smart-attributes sdX
/etc/proxmox-backup/datastore.cfg.

# proxmox-backup-manager datastore create store2 /mnt/backup/disk1
# ls -arilh /mnt/backup/disk1/
итого 1,1M
2228231 -rw-r--r-- 1 backup backup 0 апр 4 15:55 .lock
2228230 drwxr-x--- 1 backup backup 1,1M апр 4 15:55 .chunks
2228228 drwxr-xr-x 3 root root 4,0K апр 4 15:55 ..
2228229 drwxr-xr-x 3 backup backup 4,0K апр 4 15:55 .
где:
.lock — пустой файл, используемый для блокировки процесса;
.chunks — каталог, содержащий подкаталоги с именами от 0000 до ffff. В них будут храниться фрагментированные данные, полученные в результате резервного копирования.
Примечание

# proxmox-backup-manager datastore create my_disk2 \
data --backing-device bc995ea6-e296-4682-82a9-5480de4f583c
где:

# proxmox-backup-manager datastore unmount my_disk
В обоих случаях устройство будет отключено после завершения всех запущенных задач.


# proxmox-backup-manager datastore update <имя_хранилища> --maintenance-mode offline
Вывести хранилище из режима обслуживания:
# proxmox-backup-manager datastore update <имя_хранилища> --delete maintenance-mode
/mnt/datastore/<имя_хранилища>, при этом указанный при создании путь определяет подкаталог на самом устройстве..
proxmox-backup-debug:
# proxmox-backup-debug inspect device /dev/sde1
Device contains 2 stores
---------------
Datastore at "/my_disk" | VM: 0, CT: 2, HOST: 0, NS: 0
Datastore at "/data" | VM: 0, CT: 0, HOST: 0, NS: 0
# proxmox-backup-manager datastore list
#proxmox-backup-manager datastore update store2 --gc-schedule 'Tue 04:27'#proxmox-backup-manager datastore show store2
# proxmox-backup-manager datastore remove store2
Данная команда удаляет только конфигурацию хранилища данных. Данные в базовом каталоге сохраняются и не удаляются.
Примечание

# proxmox-backup-manager traffic-control create rule0 \
--network 0.0.0.0/0 \
--rate-in 100MB --rate-out 100MB \
--comment "Default rate limit (100MB/s) for all clients"
# proxmox-backup-manager traffic-control update rule0 \
--timeframe "mon..fri 8-19"
# proxmox-backup-manager traffic-control list
# proxmox-backup-manager traffic-control remove rule0
# proxmox-backup-manager traffic-control traffic

/etc/proxmox-backup/user.cfg.
/etc/proxmox-backup/shadow.json;
adduser) .
/etc/proxmox-backup/shadow.json). Пароли хешируются с использованием алгоритма yescrypt.

# proxmox-backup-manager user list
# proxmox-backup-manager user create backup_u@pbs --email backup_u@test.alt
# proxmox-backup-manager user update backup_u@pbs --firstname Дмитрий --lastname Иванов
# proxmox-backup-manager user update backup_u@pbs --enable 0
# proxmox-backup-manager user remove backup_u@pbs


Примечание



Примечание
# proxmox-backup-manager ldap sync example.test
Для автоматической синхронизации пользователей и групп можно добавить эту команду в планировщик задач.


Примечание


Примечание
# proxmox-backup-manager ldap sync test.alt
Для автоматической синхронизации пользователей и групп можно добавить эту команду в планировщик задач.


Примечание
Примечание
# proxmox-backup-manager user generate-token backup_u@pbs client1
Result: {
"tokenid": "backup_u@pbs!client1",
"value": "ff13e5e0-30df-4a70-99f1-c62b13803769"
}
/etc/proxmox-backup/acl.cfg. Каждая строка файла содержит пять полей, разделённых двоеточием (':'):
acl:1:/datastore:backup_u@pbs!client1:DatastoreAdminПоля имеют следующее назначение:

/mnt/backup/disk1/store2):
# proxmox-backup-manager acl update /datastore/store2 DatastoreAdmin --auth-id backup_u@pbs
# proxmox-backup-manager acl list
# proxmox-backup-manager user permissions backup_u@pbs --path /datastore/store2
Privileges with (*) have the propagate flag set
Path: /datastore/store2
- Datastore.Audit (*)
- Datastore.Backup (*)
- Datastore.Modify (*)
- Datastore.Prune (*)
- Datastore.Read (*)
- Datastore.Verify (*)
Примечание
Примечание





Примечание

# proxmox-backup-manager user tfa unlock backup_u@pbs
proxmox-backup-manager remote.
/etc/proxmox-backup/remote.cfg.

Примечание

# proxmox-backup-manager cert info | grep Fingerprint
# proxmox-backup-manager remote create pbs2 \
--host pbs2.test.alt --auth-id root@pam --password 'SECRET' \
--fingerprint 42:5d:ff:3a:50:38:53:5a:9b:f7:50:...:ab:1b
# proxmox-backup-manager remote list
# proxmox-backup-manager remote remove pbs2
Примечание
Примечание
remove vanished), или пропустить снимки (если расписание не обеспечивает строго инкрементное резервное копирование).
proxmox-backup-manager sync-job.
/etc/proxmox-backup/sync.cfg.



# proxmox-backup-manager sync-job create test_job \
--store zfs_st --owner root@pam \
--remote pbs2 --remote-store remotestore \
--schedule 'Sat 18:15'
# proxmox-backup-manager sync-job create test_job_push \
--sync-direction push --store zfs_st --owner root@pam \
--remote pbs2 --remote-store my_disk --schedule '0/2:00'
# proxmox-backup-manager sync-job update test_job --comment 'offsite'
# proxmox-backup-manager sync-job update test_job \
--group-filter type:ct --group-filter exclude:group:ct/100
# proxmox-backup-manager sync-job list
# proxmox-backup-manager sync-job remove test_job
[[пользователь@]сервер[:порт]:]datastoreЗначение по умолчанию для пользователя — root@pam. Если сервер не указан, используется localhost.
--repository, или установив переменную окружения PBS_REPOSITORY, например:
# export PBS_REPOSITORY=pbs.test.alt:store1
Таблица 59.1. Примеры репозиториев
|
Пример
|
Пользователь
|
Хост:Порт
|
Хранилище
|
|---|---|---|---|
|
store1
|
root@pam
|
localhost:8007
|
store1
|
|
pbs.test.alt:store1
|
root@pam
|
pbs.test.alt:8007
|
store1
|
|
backup_u@pbs@pbs.test.alt:store1
|
backup_u@pbs
|
pbs.test.alt:8007
|
store1
|
|
backup_u@pbs!client1@pbs.test.alt:store1
|
backup_u@pbs!client1
|
pbs.test.alt:8007
|
store1
|
|
192.168.0.123:1234:store1
|
root@pam
|
192.168.0.123:1234
|
store1
|
$ proxmox-backup-client backup user.pxar:/home/user/ \
--repository pbs.test.alt:store1
Password for "root@pam": ***
Starting backup: host/server/2025-04-06T10:36:33Z
Client name: server
Starting backup protocol: Sun Apr 6 12:36:35 2025
fingerprint: 14:a3:8f:58:a4:5d:fd:8d:3a:71:cf:40:8d:d4:54:1b:01:47:bf:70:4b:31:15:a1:94:93:4b:8e:56:d2:5b:0a
Are you sure you want to continue connecting? (y/n): y
No previous manifest available.
Upload directory '/home/user/' to 'store1' as user.pxar.didx
user.pxar: had to backup 24.408 KiB of 24.408 KiB (compressed 8.303 KiB) in 0.01 s (average 2.254 MiB/s)
Uploaded backup catalog (598 B)
Duration: 6.49s
End Time: Sun Apr 6 12:36:42 2025
proxmox-backup-client backup принимает список параметров резервного копирования, включая имя архива на сервере, тип архива и источник архива на клиенте, в формате:
<archive-name>.<type>:<source-path>Тип .pxar используется для файловых архивов, а тип .img — для образов блочных устройств.
$ proxmox-backup-client backup mydata.img:/dev/mylvm/mydata \
--repository pbs.test.alt:zfs_st
Password for "root@pam": ***
Starting backup: host/server/2025-04-06T14:21:00Z
Client name: server
Starting backup protocol: Sun Apr 6 16:21:02 2025
fingerprint: 14:a3:8f:58:a4:5d:fd:8d:3a:71:cf:40:8d:d4:54:1b:01:47:bf:70:4b:31:15:a1:94:93:4b:8e:56:d2:5b:0a
Are you sure you want to continue connecting? (y/n): y
storing login ticket failed: $XDG_RUNTIME_DIR must be set
Downloading previous manifest (Sun Apr 6 16:06:55 2025)
Couldn't re-use previous manifest - missing key - manifest was created with key a9:25:e2:c8:24:26:23:3b
Upload image '/dev/mylvm/mydata' to 'zfs_st' as mydata.img.fidx
mydata.img: had to backup 4 MiB of 4.766 GiB (compressed 159 B) in 8.21 s (average 499.086 KiB/s)
mydata.img: backup was done incrementally, reused 4.762 GiB (99.9%)
Duration: 15.70s
End Time: Sun Apr 6 16:21:18 2025
Примечание
'Previous manifest does not contain an archive called 'mydata.img.fidx', skipping download..'не является ошибкой — это часть нормального процесса при первом резервном копировании.
Примечание

$ proxmox-backup-client key create my-backup.key
Encryption Key Password: ******
Verify Password: ******
$ proxmox-backup-client backup user.pxar:/home/user/ \
--repository pbs.test.alt:store1 --keyfile ./my-backup.key
Password for "root@pam": ***
Starting backup: host/server/2025-04-06T14:06:55Z
Client name: server
Starting backup protocol: Sun Apr 6 16:06:57 2025
Using encryption key from './my-backup.key'..
Encryption Key Password: ******
Encryption key fingerprint: a9:25:e2:c8:24:26:23:3b
Downloading previous manifest (Sun Apr 6 12:36:33 2025)
Upload directory '/home/user/' to 'store1' as user.pxar.didx
user.pxar: had to backup 24.905 KiB of 24.905 KiB (compressed 8.69 KiB) in 0.00 s (average 7.099 MiB/s)
Uploaded backup catalog (620 B)
Duration: 4.22s
End Time: Sun Apr 6 16:07:01 2025

$ proxmox-backup-client snapshot list --repository pbs.test.alt:store1
Password for "root@pam": ******
┌─────────────────────────────────────┬────────────┬─────────────────────────────────────┐
│ snapshot │ size │ files │
╞═════════════════════════════════════╪════════════╪═════════════════════════════════════╡
│ host/server/2025-04-06T10:36:33Z │ 25.359 KiB │ catalog.pcat1 index.json user.pxar │
├─────────────────────────────────────┼────────────┼─────────────────────────────────────┤
│ host/server/2025-04-06T14:21:00Z │ 4.766 GiB │ index.json mydata.img │
└─────────────────────────────────────┴────────────┴─────────────────────────────────────┘
$ proxmox-backup-client catalog dump \
host/server/2025-04-06T10:36:33Z --repository pbs.test.alt:store1
proxmox-backup-client restore <снимок> <имя-архива> <целевой-путь> [ОПЦИИ]Восстановление архива user.pxar в каталог
/home/user/restore:
$ proxmox-backup-client restore host/server/2025-04-06T10:36:33Z user.pxar \
/home/user/restore --repository pbs.test.alt:store1
index.json в репозитории по целевому пути «-»:
$ proxmox-backup-client restore host/server/2025-04-06T10:36:33Z \
index.json - --repository pbs.test.alt:store1
Результат будет выведен в стандартный поток вывода.
$ proxmox-backup-client catalog shell host/server/2025-04-06T10:36:33Z \
user.pxar --repository pbs.test.alt:store1
Starting interactive shell
pxar:/ > ls
…
pxar:/ > find *.txt --select /test/connection_trace.txt /Рабочий стол/1.txt pxar:/ > list-selected /test/connection_trace.txt /Рабочий стол/1.txt pxar:/ > restore-selected /home/user/restore/ pxar:/ > restore /home/user/conf/ --pattern *.conf pxar:/ > exitгде:
find *.txt --select — найти все файлы с расширением .txt и добавить их в список для восстановления;
list-selected — вывести список выбранных файлов;
restore-selected /home/user/restore/ — восстановить выбранные файлы в указанный каталог;
restore /home/user/conf/ --pattern *.conf — восстановить все файлы с расширением .conf в /home/user/conf/ на локальном хосте.
proxmox-backup-client, требуется ввести пароль. Сервер проверяет учётные данные и выдаёт билет аутентификации, действительный 2 часа. Клиент использует его для последующих запросов к серверу
$ proxmox-backup-client login --repository pbs.test.alt:store1
Password for "root@pam": ******
Завершение сеанса (удаление билета):
$ proxmox-backup-client logout --repository pbs.test.alt:store1


Примечание

# proxmox-backup-manager cert info | grep Fingerprint
Fingerprint (sha256): c8:26:af:4a:c3:dc:60:72:4a:0b:4d:c1:e6:58:02:62:90:39:cb:fc:75:5d:00:9a:57:ca:3d:28:a0:2c:99:a5
# pvesm add pbs pbs_backup \
--server pbs.test.alt --datastore store1 \
--fingerprint c8:26:af:4a:c3:dc:60:72:...:99:a5 \
--username root@pam --password
# pvesm status --storage pbs_backup
Name Type Status Total Used Available %
pbs_backup pbs active 30786448 3097752 26099504 10.06%
Примечание
# proxmox-tape format --drive your-drive --fast 0
Эта команда полностью стирает все данные и запускает этап оптимизации.
--fast 1), форматируется только первый раздел ленты.
sg:
# lsmod | grep sg
Если вывод пуст, загрузить модуль sg:
# modprobe sg
Чтобы модуль загружался автоматически при загрузке системы, необходимо создать файл /etc/modules-load.d/sg.conf, в который добавить имя модуля:
# echo sg > /etc/modules-load.d/sg.conf
# apt-get install mt-st mtx
#либо:apt-get install lsscsi#lsscsi -g
# lsscsi -vd
В выводе должны присутствовать наименования устройств, с указанием устройств в служебной ФС ядра /dev, например:
# lsscsi -g
[1:2:0:0] tape HP Ultrium 5-SCSI Z39W /dev/st0 /dev/sg4 (ленточный привод)
[1:2:0:1] mediumx HP MSL G3 Series 6.20 /dev/sch0 /dev/sg5 (устройство смены лент)
mtx для управления роботом:
# mtx <устройство> команда
Например:
# mtx -f /dev/sg5 status
Storage Changer /dev/sg5:1 Drives, 16 Slots (
0 Import/Export ) Data Transfer Element 0:Empty Storage Element 1:Empty
Storage Element 2:Empty Storage Element 3:Empty Storage Element 4:Empty
Storage Element 5:Empty Storage Element 6:Empty Storage Element 7:Empty
Storage Element 8:Empty Storage Element 9:Empty Storage Element
10:Empty Storage Element 11:Empty Storage Element 12:Empty Storage
Element 13:Empty Storage Element 14:Empty Storage Element 15:Empty
Storage Element 16:Empty
Основные команды mtx:
status — отображает текущее состояние;
inventory — выполняет инвентаризацию лент;
load <номер_слота> [<номер_привода>] — загружает ленту из слота в привод;
unload [<номер_слота>] [<номер_привода>] — выгружает ленту из привода.
Примечание
mtx — низкоуровневый интерфейс для управления устройством смены лент
mt — низкоуровневый интерфейс для управления ленточным приводом
Примечание
Примечание
TASK ERROR: media read error - read failed - Blank Check, Additional sense: End-of-data not foundнеобходимо выполнить команду:
# pmt rewind
# proxmox-tape changer scan
┌─────────────────────────────┬─────────┬──────────────┬────────┐
│ path │ vendor │ model │ serial │
╞═════════════════════════════╪═════════╪══════════════╪════════╡
│ /dev/tape/by-id/scsi-CC2C52 │ Quantum │ Superloader3 │ CC2C52 │
└─────────────────────────────┴─────────┴──────────────┴────────┘
# proxmox-tape changer create CHGR1 --path /dev/tape/by-id/scsi-CC2C52
где CHGR1 — произвольное имя.
Примечание
/dev/sg* могут изменяться после перезагрузки. Необходимо использовать постоянные имена устройств, например: /dev/tape/by-id/.


# proxmox-tape changer config CHGR1
┌──────┬─────────────────────────────┐
│ Name │ Value │
╞══════╪═════════════════════════════╡
│ name │ CHGR1 │
├──────┼─────────────────────────────┤
│ path │ /dev/tape/by-id/scsi-CC2C52 │
└──────┴─────────────────────────────┘
# proxmox-tape changer list
┌──────┬─────────────────────────────┬─────────┬──────────────┬────────────┐
│ name │ path │ vendor │ model │ serial │
╞══════╪═════════════════════════════╪═════════╪══════════════╪════════════╡
│ CHGR1│ /dev/tape/by-id/scsi-CC2C52 │ Quantum │ Superloader3 │ CC2C52 │
└──────┴─────────────────────────────┴─────────┴──────────────┴────────────┘
Производитель, модель и серийный номер определяются автоматически, но отображаются только в том случае, если устройство подключено.
# proxmox-tape changer status CHGR1
┌───────────────┬──────────┬────────────┬─────────────┐
│ entry-kind │ entry-id │ label-text │ loaded-slot │
╞═══════════════╪══════════╪════════════╪═════════════╡
│ drive │ 0 │ vtape1 │ 1 │
├───────────────┼──────────┼────────────┼─────────────┤
│ slot │ 1 │ │ │
├───────────────┼──────────┼────────────┼─────────────┤
│ slot │ 2 │ vtape2 │ │
├───────────────┼──────────┼────────────┼─────────────┤
│ ... │ ... │ │ │
├───────────────┼──────────┼────────────┼─────────────┤
│ slot │ 16 │ │ │
└───────────────┴──────────┴────────────┴─────────────┘
proxmox-tape changer status.
proxmox-tape changer status.
# proxmox-tape changer update CHGR1 --export-slots 15,16
Теперь эти слоты будут отображаться как import-export::
# proxmox-tape changer status CHGR1
┌───────────────┬──────────┬────────────┬─────────────┐
│ entry-kind │ entry-id │ label-text │ loaded-slot │
╞═══════════════╪══════════╪════════════╪═════════════╡
│ drive │ 0 │ vtape1 │ 1 │
├───────────────┼──────────┼────────────┼─────────────┤
│ import-export │ 15 │ │ │
├───────────────┼──────────┼────────────┼─────────────┤
│ import-export │ 16 │ │ │
├───────────────┼──────────┼────────────┼─────────────┤
│ slot │ 1 │ │ │
├───────────────┼──────────┼────────────┼─────────────┤
│ slot │ 2 │ vtape2 │ │
├───────────────┼──────────┼────────────┼─────────────┤
│ ... │ ... │ │ │
├───────────────┼──────────┼────────────┼─────────────┤
│ slot │ 14 │ │ │
└───────────────┴──────────┴────────────┴─────────────┘
# proxmox-tape changer update CHGR1 --eject-before-unload true
# proxmox-tape drive scan
┌────────────────────────────────┬────────┬─────────────┬────────┐
│ path │ vendor │ model │ serial │
╞════════════════════════════════╪════════╪═════════════╪════════╡
│ /dev/tape/by-id/scsi-12345-sg │ IBM │ ULT3580-TD4 │ 12345 │
└────────────────────────────────┴────────┴─────────────┴────────┘

# proxmox-tape drive create mydrive --path /dev/tape/by-id/scsi-<цифры>-sg
Примечание
/dev/tape/by-id/), а не /dev/sg*.
# proxmox-tape drive update mydrive --changer CHGR1 --changer-drivenum 0
Параметр --changer-drivenum необходим только при наличии нескольких приводов в библиотеке (номера отображаются в выводе команды proxmox-tape changer status).
Примечание
--changer-drivenum, не сохраняется явно в конфигурации, поскольку используется по умолчанию.
# proxmox-tape drive config mydrive
┌─────────┬────────────────────────────────┐
│ Name │ Value │
╞═════════╪════════════════════════════════╡
│ name │ mydrive │
├─────────┼────────────────────────────────┤
│ path │ /dev/tape/by-id/scsi-12345-sg │
├─────────┼────────────────────────────────┤
│ changer │ CHGR1 │
└─────────┴────────────────────────────────┘
# proxmox-tape drive list
┌────────┬──────────────────────────────┬────────┬───────┬────────────┬────────┐
│ name │ path │ changer│ vendor│ model │ serial │
╞════════╪══════════════════════════════╪════════╪═══════╪════════════╪════════╡
│ mydrive│ /dev/tape/by-id/scsi-12345-sg│ CHGR1 │ IBM │ ULT3580-TD4│ 12345 │
└────────┴──────────────────────────────┴────────┴───────┴────────────┴────────┘
Производитель, модель и серийный номер отображаются только если устройство подключено.
# proxmox-tape status --drive mydrive
┌────────────────┬──────────────────────────┐
│ Name │ Value │
╞════════════════╪══════════════════════════╡
│ blocksize │ 0 │
├────────────────┼──────────────────────────┤
│ density │ LTO4 │
├────────────────┼──────────────────────────┤
│ compression │ 1 │
├────────────────┼──────────────────────────┤
│ buffer-mode │ 1 │
├────────────────┼──────────────────────────┤
│ alert-flags │ (empty) │
├────────────────┼──────────────────────────┤
│ file-number │ 0 │
├────────────────┼──────────────────────────┤
│ block-number │ 0 │
├────────────────┼──────────────────────────┤
│ manufactured │ Fri Dec 13 01:00:00 2019 │
├────────────────┼──────────────────────────┤
│ bytes-written │ 501.80 GiB │
├────────────────┼──────────────────────────┤
│ bytes-read │ 4.00 MiB │
├────────────────┼──────────────────────────┤
│ medium-passes │ 20 │
├────────────────┼──────────────────────────┤
│ medium-wearout │ 0.12% │
├────────────────┼──────────────────────────┤
│ volume-mounts │ 2 │
└────────────────┴──────────────────────────┘
Примечание

Примечание
--export.
Примечание
Примечание
man systemd.time). Например, значение weekly (или Mon *-*-* 00:00:00) создаёт новый набор каждую неделю.
Примечание
Примечание

# proxmox-tape pool create <Имя> [OPTIONS]
#proxmox-tape pool create daily#proxmox-tape pool update daily --allocation daily --retention 7days
# proxmox-tape pool list
┌───────┬──────────┬────────────┬───────────┬──────────┐
│ name │ drive │ allocation │ retention │ template │
╞═══════╪══════════╪════════════╪═══════════╪══════════╡
│ daily │ mydrive │ daily │ 7days │ │
└───────┴──────────┴────────────┴───────────┴──────────┘
# proxmox-tape backup-job create job2 --store pve-backup \
--pool mypool --drive mydrive --schedule daily
# proxmox-tape backup-job update job2 --latest-only
# proxmox-tape backup-job update job2 --notify-user root@pam
Примечание
# systemctl enable --now postfix
# proxmox-tape backup-job update job2 --eject-media
Для автономных приводов опция --eject-media извлекает ленту, гарантируя, что следующая резервная копия не сможет использовать ленту (если только кто-то вручную не загрузит ленту). Для ленточных библиотек этот параметр выгружает ленту в свободный слот.
Примечание
# proxmox-tape backup-job update job2 --export-media-set
Это гарантирует, что ленты больше не будут использоваться, и принудительно запускает новый набор.
# proxmox-tape backup-job run job2
# proxmox-tape backup-job remove job2
--ns и глубину с помощью параметра --max-deep. Например:
# proxmox-tape backup-job update job2 --ns mynamespace --max-depth 3
Если --max-deep не указан, копируются все вложенные пространства имён.

proxmox-tape используется параметр --drive для указанием привода, с которым будет происходить работа. Для удобства можно задать привод через переменную окружения:
# export PROXMOX_TAPE_DRIVE=mydrive
После этого параметр --drive можно опускать в командах.. Если привод связан с устройством смены лент, также можно не указывать параметр --changer в командах, которым требуется устройство смены лент, например:
# proxmox-tape changer status
Эта команда отобразит статус устройства смены лент, связанного с приводом mydrive.
# proxmox-tape label --label-text <текст метки> [--pool <имя пула>]
Аргумент --pool можно опустить, чтобы разрешить использование ленты любым пулом.
Примечание
label не выполняется, если лента содержит данные.
# proxmox-tape read-label
┌─────────────────┬──────────────────────────────────────┐
│ Name │ Value │
╞═════════════════╪══════════════════════════════════════╡
│ label-text │ vtape1 │
├─────────────────┼──────────────────────────────────────┤
│ uuid │ 7f42c4dd-9626-4d89-9f2b-c7bc6da7d533 │
├─────────────────┼──────────────────────────────────────┤
│ ctime │ Wed Jul 24 09:13:36 2024 │
├─────────────────┼──────────────────────────────────────┤
│ pool │ daily │
├─────────────────┼──────────────────────────────────────┤
│ media-set-uuid │ 00000000-0000-0000-0000-000000000000 │
├─────────────────┼──────────────────────────────────────┤
│ media-set-ctime │ Wed Jul 24 09:13:36 2024 │
└─────────────────┴──────────────────────────────────────┘
Примечание
media-set-uuid, состоящее из одних нулей, указывает на пустую ленту (не используемую ни одним набором носителей).
# proxmox-tape barcode-label [--pool <имя пула>]
# proxmox-tape backup <хранилище> <пул> [OPTIONS]
Доступны следующие опции:
--eject-media — извлечь ленту после завершения работы;
--export-media-set — переместить все ленты набора в слоты импорта/экспорта;
--ns — пространство имён для копирования (по умолчанию — корневое);
--max-depth — глубина рекурсии (0 — без рекурсии).
# proxmox-tape media content
# proxmox-tape restore <media-set-uuid> <хранилище>
Например:
# proxmox-tape restore 9da37a55-aac7-4deb-91c6-482b3b675f30 pve-backup
snapshot:
# proxmox-tape restore <media-set-uuid> <хранилище> [<snapshot>]
Например:
# proxmox-tape restore 9da37a55-aac7-4deb-91c6-482b3b675f30 pve-backup sourcestore:host/hostname/2024-04-01T00:01:00Z
Снимок сначала восстанавливается во временное расположение, затем — архивы фрагментов, и только потом — данные в целевое хранилище.
snapshot можно передавать несколько раз, чтобы восстановить несколько снимков одним действием.
Примечание
--namespaces. Формат параметра:
store=<source-datastore>[,source=<source-ns>][,target=<target-ns>][,max-depth=<depth>]Если
source или target не указаны, предполагается корневое пространство имен. Если не указан max-depth, исходное пространство имен будет полностью рекурсивно.
# proxmox-tape restore 9da37a55-aac7-4deb-91c6-482b3b675f30 pve-backup \
--namespaces store=sourcedatastore,source=ns1,target=ns2,max-depth=2
Параметр --namespaces можно указывать несколько раз и комбинировать с snapshot.
# proxmox-tape catalog

proxmox-tape key.
# proxmox-tape key create --hint "tape pw 2025"
Tape Encryption Key Password: ********
Verify Password: ********
"aa:8e:53:82:9f:b0:37:9b:e5:55:ae:cf:53:1b:2b:54:ac:97:65:f9:43:b6:88:71:dc:71:41:2f:22:db:2e:89"
# proxmox-tape key list
┌───────────────────────────────────────────────────┬───────────────┐
│ fingerprint │ hint │
╞═══════════════════════════════════════════════════╪═══════════════╡
│ aa:8e:53:82:9f:b0:37:9b: ... :41:2f:22:db:2e:89 │ tape pw 2025 │
└───────────────────────────────────────────────────┴───────────────┘
# proxmox-tape key show aa:8e:53:82:9f:b0:37:9b: ... :2f:22:db:2e:89
┌─────────────┬───────────────────────────────────────────────┐
│ Name │ Value │
╞═════════════╪═══════════════════════════════════════════════╡
│ kdf │ scrypt │
├─────────────┼───────────────────────────────────────────────┤
│ created │ Fri Apr 4 16:17:56 2025 │
├─────────────┼───────────────────────────────────────────────┤
│ modified │ Fri Apr 4 16:17:56 2025 │
├─────────────┼───────────────────────────────────────────────┤
│ fingerprint │ aa:8e:53:82:9f:b0:37:9b: ... :2f:22:db:2e:89 │
├─────────────┼───────────────────────────────────────────────┤
│ hint │ tape pw 2025 │
└─────────────┴───────────────────────────────────────────────┘
paperkey можно использовать для создания QR-кода ключа шифрования ленты. Например, создать QR-код и записать его в текстовый файл для удобной печати:
# proxmox-tape key paperkey <fingerprint> --output-format text > qrkey.txt
# proxmox-tape key restore
Tape Encryption Key Password: ***********
При правильном пароле ключ импортируется в базу данных. Задания восстановления используют любой доступный ключ автоматически.
# proxmox-tape changer status CHGR1
┌───────────────┬──────────┬────────────┬─────────────┐
│ entry-kind │ entry-id │ label-text │ loaded-slot │
╞═══════════════╪══════════╪════════════╪═════════════╡
│ drive │ 0 │ vtape1 │ 1 │
├───────────────┼──────────┼────────────┼─────────────┤
│ slot │ 1 │ │ │
├───────────────┼──────────┼────────────┼─────────────┤
│ slot │ 2 │ vtape2 │ │
├───────────────┼──────────┼────────────┼─────────────┤
│ slot │ 3 │ CLN001CU │ │
├───────────────┼──────────┼────────────┼─────────────┤
│ ... │ ... │ │ │
└───────────────┴──────────┴────────────┴─────────────┘
# proxmox-tape clean
Команда:
notifications.cfg — основные настройки;
notifications-priv.cfg — конфиденциальные параметры (пароли, токены аутентификации). Файл доступен для чтения только пользователю root.
sendmail для отправки электронных писем указанным получателям. Если в качестве получателя указан пользователь PBS, используется адрес электронной почты из его профиля (адрес электронной почты пользователя можно настроить в разделе → → ). Если у пользователя не указан адрес электронной почты, письмо не будет отправлено.
Примечание
sendmail предоставляется почтовым агентом (например, Postfix). Для корректной доставки может потребоваться настройка Postfix (например, указание внешнего ретранслятора). В случае ошибок необходимо проверить системные журналы на наличие сообщений, зарегистрированных демоном Postfix (journalctl -u postfix).

notifications.cfg):
users.cfg;
email_from из node.cfg, а при его отсутствии — значение по умолчанию root@$hostname, где $hostname — имя узла.

# proxmox-backup-manager notification endpoint sendmail create \
sendmail-admins --mailto-user kim@test.alt \
--mailto-user orlov@test.alt --mailto-user root@pam \
--mailto user@example.test --comment "Отправка уведомлений администраторам"
/etc/proxmox-backup/notifications.cfg):
sendmail: sendmail-admins
comment Отправка уведомлений администраторам
mailto user@example.test
mailto-user kim@test.alt
mailto-user orlov@test.alt
mailto-user root@pam
Примечание

notifications.cfg):
users.cfg;

# proxmox-backup-manager notification endpoint smtp create \
smtp --from-address pve-mail@test.alt --server mail.test.alt \
--username pve-mail --password "123" --mailto-user root@pam \
--mailto-user orlov@test.alt
/etc/proxmox-backup/notifications.cfg):
smtp: smtp
from-address pve-mail@test.alt
mailto-user root@pam
mailto-user orlov@test.alt
mode tls
server mail.test.alt
username pve-mail

notifications.cfg):
notifications-priv.cfg), доступном для чтения только пользователю root. Для любых конечных точек API, возвращающих конфигурацию конечной точки, будет возвращено только имя секрета, но не значение. Доступ к секретам можно получить в шаблонах body/header/URL через пространство имен secrets.

# proxmox-backup-manager notification endpoint webhook create ntfy \
--method post \
--url "https://ntfy.sh/pbs_sync_job_144" \
--body e3sgbWVzc2FnZSB9fQo= \ # Закодированный {{ message }}
--secret name=channel,value=cGJzX3N5bmNfam9iXzE0NA== \ # pbs_sync_job_144
--comment "Отправка PUSH уведомлений"
Значения body и secret.value должны быть закодированы в base64.
Примечание
$ echo -n ' pbs_sync_job_144' | base64 -w 0
cGJzX3N5bmNfam9iXzE0NA==
/etc/proxmox-backup/notifications.cfg):
webhook: ntfy body e3sgbWVzc2FnZSB9fQ== comment Отправка PUSH уведомлений method post url https://ntfy.sh/pbs_sync_job_144
{{ title }} — заголовок уведомления;
{{ message }} — тело уведомления;
{{ difficulty }} — уровень серьёзности;
{{ timestamp }} — временная метка в виде эпохи UNIX (в секундах);
{{ fields.<name> }} — метаданные (например, fields.type содержит тип уведомления);
{{ secrets.<name> }} — секреты (например, секретный именованный токен доступен через secrets.token).
{{ url-encode <value/property> }} — URL-кодирование свойства/литерала;
{{ escape <value/property> }} — экранирование управляющих символов, которые не могут быть безопасно представлены как строка JSON;
{{ json <value/property> }} — преобразование в JSON. Может быть полезно для передачи целого подпространства имен (например, полей) как части полезной нагрузки JSON (например, {{{ json fields }}).
Примечание
matcher: always-matches
comment Это сопоставление всегда срабатывает
mode all
target mail-to-root
match-calendar фильтрует уведомления по временной метке события.
match-calendar 8-12 — ежедневно с 8 до 12 часов;
match-calendar 8:00-15:30 — ежедневно с 8 часов до 15:30;
match-calendar mon..fri 9:00-17:00 — в будние дни с 9 до 17 часов;
match-calendar sun,tue..wed,fri 9-17 — в воскресенье вторник, среду и пятницу с 9 до 17 часов.
match-field фильтрует уведомления по значениям полей метаданных.
exact, значения можно перечислять через запятую. Правило срабатывает, если поле содержит любое из указанных значений.
regex применяется регулярное выражение.
match-field exact:type=gc — только уведомления для заданий по сборке мусора;
match-field exact:type=prune,verify — уведомления о заданиях prune и verify;
match-field regex:datastore=^backup-.*$ — уведомления для хранилищ, имя которых начинается с backup.
match-field regex:datastore=.* сработает только для уведомлений, содержащих поле datastore.
match-severity фильтрует уведомления по уровню серьёзности (severity) события. Поддерживаются следующие уровни: info, notice, warning, error, unknown.
match-severity error — только ошибки;
match-severity warning,error — предупреждения и ошибки.
Таблица 59.2. Список событий уведомлений
|
Событие
|
Тип
|
Серьёзность
|
Поля метаданных (в дополнение к типу)
|
|---|---|---|---|
|
Обновление сертификата ACME не удалось
|
acme
|
error
|
hostname
|
|
Сбой сбора мусора
|
gc
|
error
|
datastore, hostname
|
|
Успешный сбор мусора
|
gc
|
info
|
datastore, hostname
|
|
Доступны обновления пакетов
|
package-updates
|
info
|
hostname
|
|
Ошибка задания Prune
|
prune
|
error
|
datastore, hostname, job-id
|
|
Успешное выполнение задания Prune
|
prune
|
info
|
datastore, hostname, job-id
|
|
Ошибка удалённой синхронизации
|
sync
|
error
|
datastore, hostname, job-id
|
|
Удалённая синхронизация выполнена успешно
|
sync
|
info
|
datastore, hostname, job-id
|
|
Почта для root
|
system-mail
|
unknown
|
hostname
|
|
Ошибка задания резервного копирования на ленту
|
tape-backup
|
error
|
datastore, hostname, media-pool, job-id
|
|
Успешное выполнение задания резервного копирования на ленту
|
tape-backup
|
info
|
datastore, hostname, media-pool, job-id
|
|
Запрос на загрузку ленты
|
tape-load
|
notice
|
hostname
|
|
Ошибка задания проверки
|
verify
|
error
|
datastore, hostname, job-id
|
|
Успешное выполнение задания проверки
|
verify
|
info
|
datastore, hostname, job-id
|
match-field.
Таблица 59.3. Описание полей метаданных
|
Поле
|
Описание
|
|---|---|
|
datastore
|
Имя хранилища данных
|
|
hostname
|
Имя сервера резервного копирования
|
|
job-id
|
Идентификатор задания
|
|
media-pool
|
Имя пула ленточных носителей
|
|
type
|
Тип события уведомления
|
/etc/proxmox-backup/notifications.cfg):
matcher: workday
match-calendar mon..fri 9-17
target admin
comment Notify admins during working hours
matcher: night-and-weekend
match-calendar mon..fri 9-17
invert-match true
target on-call-admins
comment Separate target for non-working hours
matcher: zfs-error
match-calendar mon..fri 8-17
match-field exact:datastore=zfs
match-severity error
mode all
target smtp



# proxmox-backup-manager notification matcher create workday \
--mode all \
--match-calendar "mon..fri 8-17" \
--match-severity "error" \
--match-field "exact:datastore=zfs" \
--target sendmail-admins
system-mail с уровнем серьёзности unknown.
/system/notifications.
notification-mode, который может принимать одно из двух значений:
legacy-sendmail — отправлять уведомления по электронной почте с помощью системной команды sendmail. Система уведомлений PBS игнорируется. Этот режим соответствует поведению PBS до версии 3.2;
notification-system — использовать встроенную систему уведомлений PBS.
notification-mode не задан, PBS по умолчанию использует legacy-sendmail.
notification-system. Если хранилище создаётся с помощью API или CLI (proxmox-backup-manager), параметр notification-mode необходимо явно установить в notification-system, чтобы задействовать новую систему уведомлений.
notification-mode имеет значение legacy-sendmail, PBS отправляет уведомления с помощью системной команды sendmail на адрес электронной почты, указанный для пользователя, установленного в параметре notify-user (или root@pam, если параметр notify-user не установлен).
notify:
notify-user и notify игнорируются, если параметр notification-mode установлен в notification-system.
Примечание
# apt-get install urbackup-server
# mkdir -p /mnt/backups/urbackup
Каталог должен принадлежать пользователю urbackup и у этого пользователя должны быть права на чтение/запись:
# chown -R urbackup:urbackup /mnt/backups/urbackup
# systemctl enable --now urbackup-server
Примечание
http://<ip-сервера>:55414:

Важно
Примечание

# apt-get install urbackup-client
# systemctl enable --now urbackup-client



urbackupclientctl).





Примечание

current является ссылкой на последнюю резервную копию. Резервные копии папок с файлами сохраняются в открытом виде. Образы дисковых разделов хранятся в виде файлов в формате vhdz (имя файла будет иметь вид Image_<Drive>_<YYMMDD-HHMM>.vhdz).
urbackupclientctl:
urbackupclientctl start — запустить инкрементное/полное резервное копирование;
urbackupclientctl status — получить текущий статус резервного копирования;
urbackupclientctl browse — просмотр списка резервных копий и файлов в резервных копиях;
urbackupclientctl restore-start — восстановить файлы из резервной копии;
urbackupclientctl set-settings — установить параметры резервного копирования;
urbackupclientctl add-backupdir — добавить новый каталог в список каталогов, для которых выполняется резервное копирование;
urbackupclientctl list-backupdirs — вывести список каталогов, для которых выполняется резервное копирование;
urbackupclientctl remove-backupdir — удалить каталог из списока каталогов, для которых выполняется резервное копирование.
urbackupclientctl <command> --helpНиже приведены примеры использования утилиты
urbackupclientctl.
$ urbackupclientctl browse
[{
"archived": 0,
"backuptime": 1742848011,
"disable_delete": true,
"id": 3,
"incremental": 1,
"size_bytes": 2945033
}
,{
"archived": 0,
"backuptime": 1742847646,
"id": 1,
"incremental": 0,
"size_bytes": 101610098
}
]
$ urbackupclientctl start -f
Waiting for server to start backup... done
Preparing... -
Completed successfully.
# urbackupclientctl restore-start -b 3
Starting restore. Waiting for backup server... done
[=============================================================> ] 97% 2.33831 GB/2.41119 GB at 76.024 KBit/s
Restore completed successfully.
virt-install, virt-clone, virsh и другие. Для управления через графическую оболочку доступен virt-manager.
Содержание
# apt-get install libvirt libvirt-kvm libvirt-qemu
# systemctl enable --now libvirtd
# gpasswd -a user vmusers
/etc/libvirt/ — каталог с файлами конфигурации libvirt;
/var/lib/libvirt/ — рабочий каталог сервера виртуализации;
/var/log/libvirt — файлы журналов libvirt.
qemu-img — управление дисковыми образами ВМ. Позволяет создавать образы различных форматов, конвертировать их, получать информацию об образах и объединять снимки ВМ (для форматов, поддерживающих эту функцию);
virsh — консольный интерфейс для управления ВМ, виртуальными дисками и сетями;
virt-clone — клонирование ВМ;
virt-install — создание ВМ с помощью параметров командной строки;
virt-xml — редактирование XML-файлов описаний ВМ.
virsh — утилита для командной строки, предназначенная для управления ВМ и гипервизорами KVM.
virsh использует API libvirt и служит альтернативой графическому интерфейсу virt-manager.
virsh можно сохранять состояние ВМ, переносить их между гипервизорами, а также управлять виртуальными сетями.
virsh можно использовать команду:
$ virsh help
Таблица 62.1. Управление виртуальными машинами через virsh
|
Команда
|
Описание
|
|---|---|
|
help
|
Краткая справка
|
|
list
|
Просмотр всех ВМ
|
|
dumpxml
|
Вывод XML-конфигурации указанной ВМ
|
|
create
|
Создание ВМ из XML-файла и запуск
|
|
start
|
Запуск неактивной ВМ
|
|
destroy
|
Принудительная остановка ВМ
|
|
define
|
Определение XML-файла конфигурации ВМ
|
|
domid
|
Просмотр идентификатора ВМ
|
|
domuuid
|
Просмотр UUID ВМ
|
|
dominfo
|
Просмотр информации о ВМ
|
|
domname
|
Просмотр имени ВМ
|
|
domstate
|
Просмотр состояния ВМ
|
|
quit
|
Выход из интерактивного режима
|
|
reboot
|
Перезагрузка ВМ
|
|
restore
|
Восстановление ВМ из файла
|
|
resume
|
Возобновление приостановленной ВМ
|
|
save
|
Сохранение состояния ВМ в файл
|
|
shutdown
|
Корректное завершение работы ВМ
|
|
suspend
|
Приостановка работы ВМ
|
|
undefine
|
Удаление всех конфигурационных файлов ВМ
|
|
migrate
|
Перенос ВМ на другой узел
|
Таблица 62.2. Управление ресурсами ВМ и гипервизора через virsh
|
Команда
|
Описание
|
|---|---|
|
setmem
|
Установка объёма выделенной ВМ памяти
|
|
setmaxmem
|
Установка максимального объёма памяти, доступного гипервизору
|
|
setvcpus
|
Изменение числа виртуальных процессоров ВМ
|
|
vcpuinfo
|
Просмотр информации о виртуальных процессорах
|
|
vcpupin
|
Настройка соответствия виртуальных процессоров
|
|
domblkstat
|
Просмотр статистики блочных устройств ВМ
|
|
domifstat
|
Просмотр статистики сетевых интерфейсов ВМ
|
|
attach-device
|
Подключение устройства (из XML-файла) к ВМ
|
|
attach-disk
|
Подключение нового дискового устройства к ВМ
|
|
attach-interface
|
Подключение нового сетевого интерфейса к ВМ
|
|
detach-device
|
Отключение устройства от ВМ (по XML, как и attach-device)
|
|
detach-disk
|
Отключение дискового устройства от ВМ
|
|
detach-interface
|
Отключение сетевого интерфейса от ВМ
|
virt-install — это инструмент для создания ВМ.
Примечание
# apt-get install virt-install
virt-install можно получить, выполнив команду:
$ man virt-install
Таблица 62.3. Параметры команды virt-install
|
Команда
|
Описание
|
|---|---|
|
-n NAME, --name=NAME
|
Имя новой ВМ. Это имя должно быть уникально внутри одного гипервизора
|
|
--memory MEMORY
|
Объём оперативной памяти, выделенной ВМ, например:
Просмотреть список всех доступных параметров можно с помощью опции
--memory=?
|
|
--vcpus VCPUS
|
Количество виртуальных ЦПУ, например:
|
|
--cpu CPU
|
Модель и параметры ЦП, например:
|
|
--metadata METADATA
|
Метаданные ВМ
|
|
Метод установки
|
|
|
--cdrom CDROM
|
Установочный CD-ROM. Может указывать на файл ISO-образа или физическое устройство CD/DVD
|
|
-l LOCATION, --location LOCATION
|
Источник установки, например,
https://host/path
|
|
--pxe
|
Загрузка из сети с использованием протокола PXE
|
|
--import
|
Пропустить установку ОС и создать ВМ на основе существующего образа диска
|
|
--boot BOOT
|
Параметры загрузки ВМ, например:
|
|
--os-variant=DISTRO_VARIANT
|
Гостевая ОС. Позволяет выбрать оптимальные параметры, включая VirtIO. Примеры значений: alt.p10, alt10.1, win10
|
|
--disk DISK
|
Настройки пространства хранения данных, например:
|
|
-w NETWORK, --network NETWORK
|
Конфигурация сетевого интерфейса ВМ, например:
|
|
--graphics GRAPHICS
|
Настройки графики, например:
|
|
--input INPUT
|
Конфигурация устройства ввода, например:
|
|
--hostdev HOSTDEV
|
Конфигурация физических USB/PCI и других устройств хоста для совместного использования ВМ
|
|
-filesystem FILESYSTEM
|
Предоставление каталога хоста гостевой системе, например:
|
|
Параметры платформы виртуализации
|
|
|
-v, --hvm
|
ВМ с полной виртуализацией
|
|
-p, --paravirt
|
ВМ с паравиртуализацией
|
|
--container
|
Тип ВМ — контейнер
|
|
--virt-type VIRT_TYPE
|
Тип гипервизора (kvm, qemu и т.п.)
|
|
--arch ARCH
|
Эмулируемая архитектура процессора
|
|
--machine MACHINE
|
Эмулируемый тип компьютера
|
|
Прочие параметры
|
|
|
--autostart
|
Автоматический запуск ВМ при старте хоста
|
|
--transient
|
Создать временный домен
|
|
--noautoconsole
|
Не подключаться к гостевой консоли автоматически
|
|
-q, --quiet
|
Подавлять вывод (за исключением ошибок)
|
|
-d, --debug
|
Вывод отладочной информации
|
virt-install поддерживает как графическую установку (через VNC и Spice), так и текстовую — через последовательный порт. ВМ может использовать несколько дисков, сетевых интерфейсов, аудиоустройств, а также физические USB и PCI-устройства.
virt-install получает минимальный набор файлов и позволяет установщику ОС загрузить остальное. Поддерживается также загрузка по сети (PXE) и создание ВМ/контейнера без установки ОС или загрузка по сети предустановленной системы.
virt-install предоставляет множество параметров, позволяющих создать полностью готовую к работе ВМ, что делает её удобной для автоматизации установки.
qemu-img — инструмент для работы с образами дисков ВМ QEMU.
qemu-img [опции] команда [параметры команды]
create — создание нового образа диска;
check — проверка образа на ошибки;
convert — преобразование образа в другой формат;
info — информация об образе;
snapshot — управление снимками состояния (snapshot);
commit — сохранение изменений в базовый образ;
rebase — создает новый базовый образ на основании существующего.
qemu-img info или ls -ls;
# qemu-img info /var/lib/libvirt/images/alt-server-test.qcow2
image: /var/lib/libvirt/images/alt-server-test.qcow2
file format: qcow2
virtual size: 60 GiB (64424509440 bytes)
disk size: 9.57 MiB
cluster_size: 65536
Format specific information:
compat: 1.1
compression type: zlib
lazy refcounts: true
refcount bits: 16
corrupt: false
extended l2: false
Child node '/file':
filename: /var/lib/libvirt/images/alt-server-test.qcow2
protocol type: file
file length: 60 GiB (64434601984 bytes)
disk size: 9.57 MiB
# qemu-img create -f qcow2 /var/lib/libvirt/images/hdd.qcow2 20G
# qemu-img convert -f raw -O qcow2 disk_hd.img disk_hd.qcow2
virt-manager предоставляет графический интерфейс для доступа к гипервизорам и ВМ в локальной и удаленных системах. С помощью virt-manager можно создавать ВМ. Кроме того, virt-manager выполняет управляющие функции:
Примечание


$где 192.168.0.147 — IP-адрес сервера с libvirt.ssh-keygen -t ed25519$ssh-copy-id user@192.168.0.147
Примечание
virsh -c URI
URI не задан, libvirt попытается определить наиболее подходящий гипервизор.
URI может принимать следующие значения:
--readonly.
$ virsh -c qemu:///system list --all
ID Имя Состояние
------------------------------
- alt-server-test выключен
Примечание
-c qemu:///system, можно установить переменную окружения:
export LIBVIRT_DEFAULT_URI=qemu:///system
$ virsh -c qemu+ssh://user@192.168.0.147/system
Добро пожаловать в virsh — интерактивный терминал виртуализации.
Введите «help» для получения справки по командам
«quit», чтобы завершить работу и выйти.
virsh #
где:
virt-manager с подключением к удалённому гипервизору, выполнив следующую команду:
$ virt-manager -c qemu+ssh://user@192.168.0.147/system
где:

virsh и virt-install, либо через графический интерфейс программы virt-manager.
Важно
$ virsh create guest.xml
Domain 'altK' created from guest.xml
dumpxml:
virsh dumpxml <domain>
guest.xml), можно выполнить команду:
$ virsh -c qemu:///system dumpxml alt-server > guest.xml
Примечание
--name, --memory, хранилище (--disk, --filesystem или --nodisks) и опции установки.
virt-install необходимо загрузить ISO-образ ОС, которая будет устанавливаться.
# virt-install --connect qemu:///system \
--name alt-server-test \
--os-variant=linux2022 \
--cdrom /var/lib/libvirt/images/alt-server-11.0-x86_64.iso \
--graphics spice,listen=0.0.0.0 \
--video qxl \
--disk pool=default,size=60,bus=virtio,format=qcow2 \
--memory 4096 \
--vcpus=2 \
--network network=default \
--hvm \
--virt-type=kvm
где:
--name alt-server — название ВМ;
--os-variant=linux2022 — вариант ОС (для корректной оптимизации);
--cdrom /var/lib/libvirt/images/alt-server-11.0-x86_64.iso — путь к ISO-образу установочного диска;
--graphics spice,listen=0.0.0.0 — графическая консоль с доступом по протоколу SPICE;
--disk pool=default,size=60,bus=virtio,format=qcow2 — хранилище: диск объёмом 60 ГБ в формате qcow2 из пула default;
--memory 4096 — объем оперативной памяти (в МБ);
--vcpus=2 — количество виртуальных процессоров;
--network network=default — подключение к виртуальной сети default;
--hvm — использование полной (аппаратной) виртуализации;
--virt-type=kvm — указание гипервизора KVM как основы виртуализации.
--hvm и --virt-type) оптимизируют ВМ под аппаратную виртуализацию. Если эти параметры не заданы явно, они применяются по умолчанию.
Примечание
--boot loader=…, указывающий путь к UEFI-образу (например, OVMF):
# virt-install --connect qemu:///system \
--name alt-server-test \
--os-variant=linux2022 \
--cdrom /var/lib/libvirt/images/alt-server-11.0-x86_64.iso \
--graphics spice,listen=0.0.0.0 \
--video qxl \
--disk pool=default,size=60,bus=virtio,format=qcow2 \
--memory 4096 \
--vcpus=2 \
--network network=default \
--hvm \
--virt-type=kvm \
--boot loader=/usr/share/OVMF/OVMF_CODE.fd
где /usr/share/OVMF/OVMF_CODE.fd — путь к файлу прошивки UEFI.
Примечание
$ osinfo-query os
# virt-install \
--hvm \
--name demo \
--memory 500 \
--nodisks \
--livecd \
--graphics vnc \
--cdrom /var/lib/libvirt/images/altlive.iso
# virt-install \
--connect lxc:/// \
--name bash_guest \
--memory 512 \
--vcpus 1 \
--init /bin/bash
# virt-install \
--name demo \
--memory 512 \
--disk /home/user/VMs/mydisk.img \
--import
Примечание







Примечание


start — запуск ВМ;
shutdown — завершение работы. Поведение выключаемой ВМ можно контролировать с помощью параметра on_shutdown в файле конфигурации;
destroy — принудительная остановка. Использование virsh destroy может повредить гостевую файловую систему. Рекомендуется использовать команду shutdown;
reboot — перезагрузка ВМ. Поведение перезагружаемой ВМ можно контролировать с помощью параметра on_reboot в файле конфигурации;
suspend — приостановка ВМ. В приостановленном состоянии ВМ продолжает потреблять оперативную память, но не использует процессорные ресурсы;
resume — возобновление работы приостановленной ВМ;
save — сохранение текущего состояния ВМ. Команда останавливает ВМ и сохраняет состояние в файл (время выполнения зависит от объема ОЗУ);
restore — восстановление ВМ, ранее сохраненной с помощью команды virsh save. ВМ будет восстановлена из файла и перезапущена. Имя и UUID останутся прежними, но будет выдан новый идентификатор домена;
undefine — удаление ВМ (удаляется также её конфигурационный файл);
autostart — добавление ВМ в автозагрузку;
autostart --disable — исключение ВМ из автозагрузки;
$virsh destroy alt-server$virsh undefine alt-server



$ virsh edit alt-server-test
Добавить графический элемент SPICE, например:
<graphics type='spice' port='5900' autoport='yes' listen='127.0.0.1'>
<listen type='address' address='127.0.0.1'/>
</graphics>
Добавить видеоустройство QXL:
<video>
<model type='qxl'/>
</video>
$ virsh domdisplay alt-server-test
spice://localhost:5900
<graphics type='spice' port='5900' autoport='yes' listen='0.0.0.0' passwd='mypasswd'>
<listen type='address' address='0.0.0.0'/>
</graphics>

$virt-viewer -c qemu+ssh://user@192.168.0.147/system -d alt-server-test$remote-viewer "spice://192.168.0.147:5900"

Примечание
<graphics type='vnc' port='5900' autoport='no' listen='0.0.0.0' passwd='mypasswd'>
<listen type='address' address='0.0.0.0'/>
</graphics>

$ virsh domdisplay alt-server-test
vnc://127.0.0.1:1
$virt-viewer -c qemu+ssh://user@192.168.0.147/system -d alt-server-test$vncviewer 192.168.0.147:5901

virsh edit. Например, чтобы отредактировать конфигурацию ВМ с именем alt-server-test, можно выполнить команду:
$ virsh edit alt-server-test
$ virsh nodeinfo
Модель процессора: x86_64
CPU: 16
Частота процессора: 400 MHz
Сокеты: 1
Ядер на сокет: 16
Потоков на ядро: 1
Ячейки NUMA: 1
Объём памяти: 15995768 KiB
$ virsh list
virsh list:
--inactive — показать список неактивных доменов;
--all — показать все ВМ, независимо от их состояния.
virsh list:
$ virsh list --all
ID Имя Состояние
-----------------------------------
2 alt-server-test работает
- ALT_Server выключен
- Education выключен
virsh suspend; потребляет ресурсы, но не использует CPU;
virsh dominfo <domain>
где <domain> — имя, ID или UUID домена.
virsh dominfo:
$ virsh dominfo alt-server-test
ID: 2
Имя: alt-server-test
UUID: ac44f417-278b-4ebd-b16c-917d52e4688c
Тип ОС: hvm
Состояние: работает
CPU: 2
Время CPU: 6,5s
Макс.память: 4194304 KiB
Занято памяти: 4194304 KiB
Постоянство: yes
Автозапуск: выкл.
Управляемое сохранение: no
Модель безопасности: none
DOI безопасности: 0
virsh vcpuinfo <domain>
$ virsh vcpuinfo alt-server-test
Виртуальный процессор:: 0
CPU: 11
Состояние: работает
Время CPU: 137,1s
Соответствие ЦП: yyyyyyyyyyyyyyyy
Виртуальный процессор:: 1
CPU: 5
Состояние: работает
Время CPU: 17,2s
Соответствие ЦП: yyyyyyyyyyyyyyyy
virsh vcpupin <domain> [--vcpu <число>] [--cpulist <строка>] [--config] [--live] [--current]
Параметры:
<domain> — имя, ID или UUID домена;
--vcpu <число> — номер виртуального процессора;
--cpulist <строка> — список физических процессоров. Если не указан, выводится текущий список;
--config — сохранить изменения в конфигурации;
--live — применить к работающей ВМ;
--current — применить к текущему состоянию.
$ virsh vcpupin alt-server-test
VCPU Соответствие ЦП
-------------------------
0 0-15
1 0-15
virsh setvcpus <domain> <count> [--maximum] [--config] [--live] [--current] [--guest] [--hotpluggable]
где:
<domain> — имя, ID или UUID домена;
[--count] <число> — новое количество виртуальных процессоров;
--maximum — установить максимальное значение;
--guest — состояние процессоров ограничивается гостевой ОС.
virsh setmem <domain> <size> [--config] [--live] [--current]
где:
<domain> — имя, ID или UUID домена;
[--size] <число> — объем (по умолчанию в КБ). Значение должно быть не менее 64 МБ и не превышать максимум, заданный при создании ВМ.
virsh setmaxmem <domain> <size> [--config] [--live] [--current]
где:
<domain> — имя, ID или UUID домена;
[--size] <число> — максимальный объем (по умолчанию в КБ).
$virsh setmaxmem --size 624000 alt-server-test$virsh setmem --size 52240 alt-server-test$virsh setvcpus --config alt-server-test 3 --maximum
virsh domblkstat <domain> [--device <строка>] [--human]
где:
<domain> — имя, ID или UUID домена;
--device <строка> — имя блочного устройства;
--human — форматировать вывод.
virsh domifstat <domain> <interface>
где:
<domain> — имя, ID или UUID домена;
[--interface] <строка> — устройство интерфейса, указанное по имени или MAC-адресу.







$ ip addr show virbr0
3: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 52:54:00:b9:5a:15 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
scp для обмена файлами.
Примечание
dev=<interface> или указывается при создании сети в virt-manager.
Таблица 67.1. Сравнение типов сетевых подключений ВМ
| |
ВМ↔Хост
|
ВМ1↔ВМ2
|
ВМ→Интернет
|
Интернет→ВМ
|
|---|---|---|---|---|
|
Сеть на основе моста
|
+
|
+
|
+
|
+
|
|
NAT
|
+
|
+
|
+
|
-
|
|
Маршрутизация
|
+
|
+
|
+
|
+
|
|
Изолированный
|
+
|
+
|
-
|
-
|
|
Открытый
|
Зависит от правил межсетевого экрана хоста
|
|||
virsh net-autostart имя_сети — автоматический запуск заданной сети;
virsh net-autostart имя_сети --disable — отключить автозапуск заданной сети;
virsh net-create файл_XML — создание и запуск новой сети на основе существующего XML-файла;
virsh net-define файл_XML — создание нового сетевого устройства на основе существующего XML-файла (устройство не будет запущено);
virsh net-destroy имя_сети — удаление заданной сети;
virsh net-dumpxml имя_сети —просмотр XML-конфигурации виртуальной сети (в формате xml);
virsh net-info имя_сети — просмотр общей информации о заданной виртуальной сети;
virsh net-list — просмотр списка виртуальных сетей;
virsh net-name UUID_сети — преобразование заданного идентификатора в имя сети;
virsh net-start имя_неактивной_сети — запуск неактивной сети;
virsh net-uuid имя_сети — преобразование заданного имени в идентификатор UUID;
virsh net-update имя_сети — обновить существующую конфигурацию сети;
virsh net-undefine имя_неактивной_сети — удаление определения неактивной сети.
$virsh net-list --allИмя Состояние Автозапуск Постоянный ------------------------------------------------- default не активен no yes $virsh net-start defaultСеть default запущена $virsh net-autostart defaultДобавлена метка автоматического запуска сети default $virsh net-listИмя Состояние Автозапуск Постоянный ------------------------------------------------ default активен yes yes $virsh net-dumpxml default<network connections='1'> <name>default</name> <uuid>4a1398b4-99e1-46ef-b4bd-f68c3ddd5d13lt;/uuid> <forward mode='nat'> <nat> <port start='1024' end='65535'/> </nat> </forward> <bridge name='virbr0' stp='on' delay='0'/> <mac address='52:54:00:3e:12:c7'/> <ip address='192.168.122.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.122.2' end='192.168.122.254'/> </dhcp> </ip> </network> $virsh net-info defaultИмя: default UUID: 4a1398b4-99e1-46ef-b4bd-f68c3ddd5d13 Активен: yes Постоянство: yes Автозапуск: yes Мост: virbr0
$ virsh dumpxml alt-server-test | grep 'mac address'
<mac address='52:54:00:ec:28:03'/>
$ virsh net-edit default
<range start='192.168.122.2' end='192.168.122.254'/>Вставить строки с MAC-адресами виртуальных адаптеров:
<host mac='52:54:00:ec:28:03' name='alt-server-test' ip='192.168.122.50'/>
$virsh net-destroy default$virsh net-start default
virsh net-edit, не вступят в силу в силу до тех пор, пока сеть не будет перезапущена, что приведет к потере всеми ВМ сетевого подключения к хосту до тех пор, пока их сетевые интерфейсы повторно не подключаться.
virsh net-update, которая требует немедленного применения изменений. Например, чтобы добавить запись статического хоста, можно использовать команду:
$ virsh net-update default add ip-dhcp-host \
"<host mac='52:54:00:ec:28:03' name='alt-server-test' ip='192.168.122.50' />" \
--live --config


, расположенную в нижнем левом углу диалогового окна Сведения о подключении.


Примечание
$ virt-install --network bridge=vmbr0 ...
$ virsh edit alt-server-test
<interface type='network'>
<mac address='52:54:00:85:11:34'/>
<source network='default'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface>
<interface type='bridge'>
<mac address='52:54:00:85:11:34'/>
<source bridge="vmbr0"/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface>
<interface type='bridge'>
<source bridge="vmbr0"/>
</interface>


# ip -4 route add 192.168.30.0/24 via 192.168.0.175
/tmp/routed_network.xml со следующим содержимым:
<network> <name>routed_network</name> <forward mode="route"/> <ip address="192.168.30.0" netmask="255.255.255.0"> <dhcp> <range start="192.168.30.128" end="192.168.30.254"/> </dhcp> </ip> </network>
/tmp/routed_network.xml:
$virsh net-define /tmp/routed_network.xmlСеть routed_network определена на основе /tmp/routed_network.xml $virsh net-autostart routed_networkДобавлена метка автоматического запуска сети routed_network $virsh net-start routed_networkСеть routed_network запущена

$ virt-install --network network=routed_network ...
$ virsh edit alt-server-test
<interface type='network'> <mac address='52:54:00:85:11:34'/> <source network='default'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> </interface>
<interface type='network'> <mac address='52:54:00:85:11:34'/> <source network='routed_network'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> </interface>
<interface type='network'> <source bridge="routed_network"/> </interface>


/tmp/nat_network.xml со следующим содержимым:
<network>
<name>nat_network</name>
<forward mode="nat"/>
<ip address="192.168.20.1" netmask="255.255.255.0">
<dhcp>
<range start="192.168.20.128" end="192.168.20.254"/>
</dhcp>
</ip>
</network>
/tmp/nat_network.xml:
$virsh net-define /tmp/nat_network.xml$virsh net-autostart nat_network$virsh net-start nat_network

$ virt-install --network network=nat_network ...
$ virsh edit alt-server-test
<interface type='network'>
<mac address='52:54:00:85:11:34'/>
<source network='default'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface>
<interface type='network'>
<mac address='52:54:00:85:11:34'/>
<source network='nat_network'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface>
<interface type='network'>
<source bridge="nat_network"/>
</interface>


/tmp/isolated_network.xml со следующим содержимым:
<network>
<name>isolated_network</name>
<ip address="192.168.100.1" netmask="255.255.255.0">
<dhcp>
<range start="192.168.100.128" end="192.168.100.254"/>
</dhcp>
</ip>
</network>
/tmp/isolated_network.xml:
$virsh net-define /tmp/isolated_network.xml$virsh net-autostart isolated_network$virsh net-start isolated_network

$ virt-install --network network=isolated_network ...
$ virsh edit alt-server-test
<interface type='network'>
<mac address='52:54:00:85:11:34'/>
<source network='default'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface>
<interface type='network'>
<mac address='52:54:00:85:11:34'/>
<source network='isolated_network'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface>
<interface type='network'>
<source bridge="isolated_network"/>
</interface>

/var/lib/libvirt/images на хосте виртуализации.
Таблица 68.1. Утилита командной строки virsh. Команды управления хранилищами
|
Команда
|
Описание
|
|---|---|
|
pool-define
|
Определить неактивный постоянный пул носителей на основе XML-файла
|
|
pool-create
|
Создать пул из XML-файла
|
|
pool-define-as
|
Определить пул на основе набора аргументов
|
|
pool-create-as
|
Создать пул на основе набора аргументов
|
|
pool-dumpxml
|
Вывести XML-конфигурацию для заданного пула
|
|
pool-list
|
Вывести список пулов
|
|
pool-build
|
Создать/инициализировать пул
|
|
pool-start
|
Запустить ранее определённый неактивный пул
|
|
pool-autostart
|
Установить автозапуск пула
|
|
pool-destroy
|
Остановить (разрушить) пул
|
|
pool-delete
|
Удалить пул
|
|
pool-edit
|
Редактировать XML-конфигурацию пула носителей
|
|
pool-info
|
Просмотреть информации о пуле
|
|
pool-refresh
|
Обновить состояние пула
|
|
pool-undefine
|
Удалить определение неактивного пула
|
virsh pool-define-as создаёт конфигурационный XML-файл для постоянного пула. Позже этот пул можно запустить командой virsh pool-start, настроить его на автоматический запуск при загрузке хоста, остановить командой virsh pool-destroy.
virsh pool-create-as создаёт временный пул (без сохранения конфигурации), который сразу запускается. Такой пул удаляется командой virsh pool-destory. Временный пул хранения нельзя запустить автоматически при загрузке системы.
virsh pool-dumpxml имя_пула > имя_пула.xml && virsh pool-define имя_пула.xml
$ virsh pool-create-as NFS-POOL netfs \
--source-host 192.168.0.179 \
--source-path /export/storage \
--target /var/lib/libvirt/images/NFS-POOL
Пул NFS-POOL создан
где:
Примечание
# systemctl enable --now nfs-client.target
$ virsh pool-list --all --details
Имя Состояние Автозапуск Постоянный Размер Распределение Доступно
-------------------------------------------------------------------------------------------
default работает yes yes 898,84 GiB 22,60 GiB 876,24 GiB
NFS-POOL работает no no 48,91 GiB 20,20 GiB 28,71 GiB
Автозапуск имеет значение no, пул не будет доступен после перезапуска. Если параметр Постоянный имеет значение no, пул вообще не будет определён после перезагрузки.
/etc/libvirt/storage.
virsh pool-dumpxml, указав в качестве ее заключительного аргумента имя пула, для которого нужно получить XML-описание. Эта команда осуществляет запись в стандартный поток вывода, поэтому необходимо перенаправить выводимую ей информацию в соответствующий файл.
$ virsh pool-dumpxml NFS-POOL > NFS-POOL.xml && virsh pool-define NFS-POOL.xml
Пул NFS-POOL определён на основе NFS-POOL.xml
Автозапуск, можно воспользоваться командой virsh pool-autostart:
$ virsh pool-autostart NFS-POOL
Добавлена метка автоматического запуска пула NFS-POOL
/etc/libvirt/storage/autostart будет содержать символьную ссылку на соответствующий XML-файл).
$virsh pool-define-as boot --type dir --target /var/lib/libvirt/bootПул boot определён $virsh pool-list --allИмя Состояние Автозапуск ------------------------------------- boot не активен no default активен yes NFS-POOL активен yes $virsh pool-build bootПул boot собран $virsh pool-start bootПул boot запущен $virsh pool-autostart bootДобавлена метка автоматического запуска пула boot $virsh pool-list --allИмя Состояние Автозапуск ------------------------------------- boot активен yes default активен yes NFS-POOL активен yes
$ virsh pool-create-as --name iscsi_virtimages --type iscsi \
--source-host 192.168.0.146 \
--source-dev iqn.2025-05.alt.test:iscsi.target1 \
--target /dev/disk/by-path
Пул iscsi_virtimages создан
где:
Примечание
# systemctl enable --now iscsid


, расположенную в нижнем левом углу диалогового окна Сведения о подключении.


Примечание
--copy-storage-all). Однако в этом случае произойдёт передача образа ВМ между серверами, что приведёт к значительному сетевому трафику и возможному простою сервиса. Чтобы миграция была по-настоящему «живой», с незаметным простоем, необходимо использовать общее хранилище.
virsh. Для выполнения живой миграции необходимо указать параметр --live.
$ virsh migrate --live VMName DestinationURL
где:
$ virsh list
ID Имя Состояние
-----------------------------------
3 ALT_Server работает
8 alt-server-test работает
$ virsh migrate --live alt-server-test qemu+ssh://192.168.0.175/system
virsh будет сообщать только об ошибках. До завершения операции ВМ продолжит работу на исходном узле;
$ virsh list


virsh с параметрами:
$ virsh migrate --live --persistent --undefinesource \
alt-server-test qemu+ssh://192.168.0.175/system
Примечание
virsh snapshot-create <domain> [--xmlfile <строка>] [--disk-only] [--live]...
virsh snapshot-create-as <domain> [--name <строка>] [--disk-only] [--live]...
$ virsh snapshot-create-as --domain alt-server-test --name alt-server-test-30jun2025
Снимок домена alt-server-test-30jun2025 создан
где:
/var/lib/libvirt/qemu/snapshot/.
$ virsh snapshot-create-as --domain alt-server-test --name 01jul2025 \
--diskspec vda,file=/var/lib/libvirt/images/alt-server-test01jul2025.qcow2 --disk-only --atomic
Снимок домена 01jul2025 создан
$ virsh snapshot-list --domain alt-server-test
Имя Время создания Состояние
------------------------------------------------------------------------
01jul2025 2025-06-30 13:00:55 +0200 disk-snapshot
alt-server-test-30jun2025 2025-06-30 12:42:41 +0200 running
$ virsh snapshot-revert --domain alt-server --snapshotname alt-server-test-30jun2025 --running
$ virsh snapshot-delete --domain alt-server --snapshotname 01jul2025

, расположенную в нижнем левом углу окна управления снимками. В открывшемся окне следует указать название снимка и нажать кнопку :


/etc/libvirt/libvirtd.conf. Логи сохраняются в каталоге /var/log/libvirt.
x:name # только сообщение журнала x:+name # сообщение журнала + трассировка стекагде
log_filtrers="3:remote 4:event"
log_outputs=”3:syslog:libvirtd 1:file:/tmp/libvirt.log”
/var/log/libvirt/qemu/. Например, для машины alt-server-test журнал будет расположен по адресу: /var/log/libvirt/qemu/alt-server-test.log.
/usr/share/polkit-1/actions/ расположены два файла, предоставленные разработчиками libvirt, содержащие описание допустимых действий:
org.libvirt.unix.policy — мониторинг и базовое управление ВМ;
org.libvirt.api.policy — конкретные действия (остановка, перезапуск и др.), разрешаемые после первичной проверки..
/usr/share/polkit-1/actions/org.libvirt.api.policy.
org.libvirt.api.<объект>.<разрешение>
search-storage-vols на объекте storage_pool соответствует действию:
org.libvirt.api.storage-pool.search-storage-vols
/etc/libvirt/libvirtd.conf строку:
access_drivers = [ "polkit" ]
# systemctl restart libvirtd
/etc/polkit-1/rules.d/100-libvirt-acl.rules (имя может быть другим):
polkit.addRule(function(action, subject) {
if (action.id == "org.libvirt.unix.manage" &&
subject.user == "test") {
return polkit.Result.YES;
}
});
polkit.addRule(function(action, subject) {
// разрешить пользователю test действия с доменом "alt-server-test"
if (action.id.indexOf("org.libvirt.api.domain.") == 0 &&
subject.user == "test")
{
if (action.lookup("domain_name") == 'alt-server-test')
{
return polkit.Result.YES;
}
else
{
return polkit.Result.NO;
}
}
else {
// разрешить другие действия: со storage, network и пр.
if (action.id.indexOf("org.libvirt.api.") == 0 &&
subject.user == "test")
{
polkit.log("org.libvirt.api.Yes");
return polkit.Result.YES;
}
else
{
return polkit.Result.NO;
}
}
})
$ virsh --connect qemu:///system list --all
ID Имя Состояние
-----------------------------------
4 alt-server-test работает
org.libvirt.api.domain.start:
polkit.addRule(function(action, subject)
{
// разрешить пользователю test запускать ВМ "alt-server-test"
if (action.id. == "org.libvirt.api.domain.start") &&
subject.user == "test")
{
if (action.lookup("domain_name") == 'alt-server-test')
{
return polkit.Result.YES;
}
else
{
return polkit.Result.NO;
}
}
});
if (action.id == "org.libvirt.api.domain.start")
{
if (subject.isInGroup("wheel"))
{
return polkit.Result.YES;
}
else
{
return polkit.Result.NO;
}
};
if (action.id == "org.libvirt.api.domain.stop")
{
if (subject.isInGroup("wheel"))
{
return polkit.Result.YES;
}
else
{
return polkit.Result.NO;
}
};
if (action.id.match("org.libvirt.api.domain.start"))
{
polkit.log("action=" + action);
polkit.log("subject=" + subject);
return polkit.Result.YES;
}
if (action.id.match("org.libvirt.api.domain.stop"))
{
polkit.log("action=" + action);
polkit.log("subject=" + subject);
return polkit.Result.YES;
}





Примечание




Примечание


ping внутри гостевой системы невозможно;
Примечание
ping в гостевой системе (все команды выполняются на хостовой машине):
# groupadd unpriv_ping
# for U in user1 user2 ... user_n; do
gpasswd -a "$U" unpriv_ping
done
где user1 user2 ... user_n — имена пользователей, которым нужно разрешить использовать ping.
sysctl net.ipv4.ping_group_range:
# GROUP_ID=$(getent group unpriv_ping | cut -d: -f3)
/etc/sysctl.conf:
# echo "net.ipv4.ping_group_range = $GROUP_ID $GROUP_ID" >> /etc/sysctl.conf
# sysctl -p
ping из гостевой системы.

Примечание
# apt-get install spice-webdavd
После установки необходимо перезагрузить систему.
https://www.spice-space.org/download.html раздел → ):

Примечание
XDG_PUBLICSHARE_DIR или каталога, на который она ссылается.
Public и установить XDG_PUBLICSHARE_DIR:
$mkdir ~/Public$xdg-user-dirs-update --set PUBLICSHARE ~/Public
dav://localhost:9843:

Примечание

~/.local/share/gnome-boxes/images/.
$mv ~/.local/share/gnome-boxes/ /path/to/directory$ln -s /path/to/directory ~/.local/share/gnome-boxes
/path/to/directory — каталог, в который нужно переместить ВМ.
Примечание
gnome-boxes должны позволять пользователю работать с файлами.
Таблица 16. Краткое сравнение
|
Технология
|
Уровень
|
Основное назначение
|
|---|---|---|
|
LXC
|
ОС
|
Изолированные окружения
|
|
Docker
|
Приложение
|
Упаковка и доставка приложений
|
|
Podman
|
Приложение
|
Безопасные контейнеры
|
|
Kubernetes
|
Кластер
|
Оркестрация контейнеров
|
Примечание
# apt-get install lxc
Проверка конфигурации системы для использования LXC:
# lxc-checkconfig
Примечание
lxc-checkconfig проверяет наличие необходимых возможностей ядра (namespaces, cgroups, seccomp и т.д.). Все основные пункты должны иметь статус enabled.
/var/lib/lxc:
# cd /var/lib/lxc
config:
# touch config
# tar Jcf metadata.tar.xz config
# wget http://ftp.altlinux.org/pub/distributions/ALTLinux/p11/images/cloud/x86_64/alt-p11-rootfs-sysvinit-x86_64.tar.xz
Примечание
config. В реальных сценариях в конфигурации контейнера рекомендуется явно задавать параметры сети, cgroups и безопасности.
# cd /var/lib/lxc
# lxc-create -t local -n alt1 -B dir -- --metadata metadata.tar.xz --fstree alt-p11-rootfs-sysvinit-x86_64.tar.xz
где:
-t — определение шаблона для создания контейнера, в данном случае local, будет использован локальный архив;
-n — название создаваемого контейнера, в данном случае alt1;
-B — указание типа хранилища, в данном случае dir;
-- — разделитель перед дополнительными параметрами;
--metadata — путь к архиву метаданных контейнера;
--fstree — путь к архиву файловой системы контейнера.
Примечание
# lxc-start -n alt1
Остановка контейнера из основной системы:
# lxc-stop -n alt1
# lxc-ls -f
NAME STATE AUTOSTART GROUPS IPV4 IPV6 UNPRIVILEGED
alt1 RUNNING 0 - 10.0.3.100 - false
alt2 STOPPED 0 - - - false
Примечание
# lxc-attach -n alt1
[root@localhost /]#
Примечание
# ip addr show eth0
2: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 10:66:6a:af:71:b4 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 10.0.3.100/24 brd 10.0.3.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::1266:6aff:feaf:71b4/64 scope link proto kernel_ll
valid_lft forever preferred_lft forever
Если адрес отсутствует, перезапустить службу:
# service network stop && service network start
lxc-cgroup для текущего запущенного контейнера.
# lxc-cgroup -n alt1 cpu.weight 50
Контейнер alt1 получает в 2 раза меньший приоритет CPU, чем контейнер с cpu.weight = 100. Чем ниже значение, тем меньшая доля CPU выделяется контейнеру при конкуренции с другими нагрузками.
# lxc-cgroup -n alt1 memory.max 1073741824
Ограничение памяти до 1Gb (в команде указывается значение в байтах).
# cat >> /var/lib/lxc/alt1/config << EOF
> lxc.cgroup2.cpu.weight = "50"
> lxc.cgroup2.memory.max = "1073741824"
> EOF
Добавив данные строки, ограничения по загрузке CPU и максимальному объему оперативной памяти будут применяться при запуске контейнера.
# apt-get install docker-engine
Запустить и включить службы Docker:
# systemctl enable --now docker
Примечание
docker:
# gpasswd -a <имя_пользователя> docker
и перезайти пользователем в систему.
docker pull, в качестве аргумента которой указывается имя образа в формате <репозиторий>/<образ>:<тег>:
$ docker pull registry.altlinux.org/p11/nginx:latest
latest: Pulling from p11/nginx
d96357fefe31: Pull complete
62dd7807dca6: Pull complete
fd4b25ec9e55: Pull complete
5b4265e5d706: Pull complete
b14e4fb67e49: Pull complete
38ed32afa007: Pull complete
9b380a7150f8: Pull complete
Digest: sha256:cf8ec144dfa76fcb56baf70db94006a8f16e204eb67da933f70b5a502b440804
Status: Downloaded newer image for registry.altlinux.org/p11/nginx:latest
registry.altlinux.org/p11/nginx:latest
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.altlinux.org/p11/nginx latest 9cb039373197 2 months ago 143MB
docker run. В качестве аргумента указывается имя образа, а также опции, зависящие от требований приложения. Например, запуск контейнера с nginx:
$ docker run -d --name my-nginx -p 81:80 registry.altlinux.org/p11/nginx
13e18d8b468528cc1868bd15ae1953d25909c1239b0c830b1192d5e672fbab36
где:
-d — запуск контейнера в фоновом режиме;
--name — имя, которое будет присвоено контейнеру;
-p — публикация порта: сопоставляет порт хоста с портом внутри контейнера;
registry.altlinux.org/p11/nginx — имя образа.
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
13e18d8b4685 registry.… "nginx -g…" 8 minutes ago Up 8 minutes 0.0.0.0:81…, [::]:81… my-nginx
$ docker start <имя_контейнера>
$ docker stop <имя_контейнера>
$ docker rm <имя_контейнера>
$ docker pause <имя_контейнера>
$ docker kill <имя_контейнера>
$ docker restart <имя_контейнера>
$ docker image <команда>
$ docker rmi <образ>
$ docker container <команда>
$ docker volume <команда>
$ docker network <команда>
Примечание
Примечание
/etc/docker/daemon.json параметр live-restore имеет значение false.
$ docker swarm init --advertise-addr 192.168.0.103
Параметр --advertise-addr — IP-адрес, который будет использоваться для присоединения других узлов.
Swarm initialized: current node (1vtfpjhu8chni4pzym3benrkh) is now a manager.А также команды для добавления обычных узлов:
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-58vukbb4ozrcwronalx27sk5mfcbalj5wz7qa6zr1v0efe2d2y-anr4y8r2igum1ddihd09a0rz6 192.168.0.103:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
$ docker network create -d overlay my-overlay-network
Получить информацию о настроенной сети можно командой:
$ docker network inspect my-overlay-network
В выводе будет показано, какой диапазон IP-адресов доступен, какие контейнеры подключены, как настроено управление адресами и какая инфраструктура участвует в поддержке сети.
docker swarm join, выведенную при инициализации:
$ docker swarm join --token <токен> <ip адрес>:<порт>
$ docker swarm join --token SWMTKN-1-58vukbb4ozrcwronalx27sk5mfcbalj5wz7qa6zr1v0efe2d2y-anr4y8r2igum1ddihd09a0rz6 192.168.0.103:2377
This node joined a swarm as a worker.
Примечание
$ docker swarm join-token worker
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-58vukbb4ozrcwronalx27sk5mfcbalj5wz7qa6zr1v0efe2d2y-anr4y8r2igum1ddihd09a0rz6 192.168.0.103:2377
$ docker swarm join-token manager
To add a manager to this swarm, run the following command:
docker swarm join --token SWMTKN-1-58vukbb4ozrcwronalx27sk5mfcbalj5wz7qa6zr1v0efe2d2y-3wh5uvy1ppkc6g963eholvzx8 192.168.0.103:2377
$ docker swarm join-token --rotate worker
$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
jupdrmh4qwzpjhq347z4wir9m * manager Ready Active Leader 28.3.3
xohmm9rqnu3tes59mf4ivtznv worker-01 Ready Active 28.3.3
a0etres64a688omya3tqstpje worker-02 Ready Active 28.3.3
$ docker info
…
Swarm: active
NodeID: jupdrmh4qwzpjhq347z4wir9m
Is Manager: true
ClusterID: v3gna6r5kxvrxhow5wu7905rg
Managers: 1
Nodes: 3
…
где:
$ docker node inspect <имя_узла>
$ docker service create --name nginx --replicas 2 --network my-overlay-network -p 80:80 nginx
где
--name — имя сервиса;
--replicas — количество реплик;
--network — имя сети, в которой будут работать сервисы;
-p — порты для публикации;
nginx — имя Docker-образа, на основе которого создается контейнер.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3d2c60ee13d6 nginx:latest "/docker-entrypoint.…" 10 seconds ago Up 9 seconds 80/tcp nginx.1.z1ng3nzcnh…
$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
ky1wp4yv5eum nginx replicated 2/2 nginx:latest *:80->80/tcp
$ docker service ps nginx
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
z1ng3nzcnhnt nginx.1 nginx:latest manager Running Running 8 minutes ago
b7e2ihl6osx3 nginx.2 nginx:latest worker-01 Running Running 8 minutes ago
$ docker service update --replicas 3 nginx
nginx
overall progress: 3 out of 3 tasks
1/3: running
2/3: running
3/3: running
verify: Service nginx converged
где
--replicas — количество реплик;
nginx — имя сервиса, для которого обновляется число реплик.
Примечание
$ curl -I <ip_адрес>:<порт>
где:
-p при создании контейнера.
$ curl -I 192.168.0.102:80
HTTP/1.1 200 OK
Server: nginx/1.29.3
…
scale. Можно указать необходимое количество реплик для каждого сервиса, и менеджер кластера автоматически адаптируется, добавляя или удаляя контейнеры для поддержания желаемого состояния. Просмотр подробной информации о сервисе в кластере:
$ docker service inspect --pretty nginx
ID: ky1wp4yv5eum17ecnpbe0k2jj
Name: nginx
Service Mode: Replicated
Replicas: 3
…
где:
ID — уникальный идентификатор сервиса;
Name — название службы;
Service Mode — тип развертывания, в данном случае репликация;
Replicas — количество реплик.
$ docker service scale nginx=4
nginx scaled to 4
overall progress: 4 out of 4 tasks
1/4: running
2/4: running
3/4: running
4/4: running
verify: Service nginx converged
После добавления еще одного контейнера, он будет назначен одному из существующих узлов:
$ docker service ps nginx
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
z1ng3nzcnhnt nginx.1 nginx:latest manager Running Running 3 hours ago
b7e2ihl6osx3 nginx.2 nginx:latest worker-01 Running Running 3 hours ago
wcpk5dpb7yx1 nginx.3 nginx:latest worker-02 Running Running about an hour ago
pvp3etypauyp nginx.4 nginx:latest worker-01 Running Running 3 minutes ago
$ docker service ps nginx
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
z1ng3nzcnhnt nginx.1 nginx:latest manager Running Running 3 hours ago
4hhntzfmxbg8 nginx.2 nginx:latest worker-02 Running Running about a minute ago
b7e2ihl6osx3 \_ nginx.2 nginx:latest worker-01 Shutdown Shutdown about a minute ago
wcpk5dpb7yx1 nginx.3 nginx:latest worker-02 Running Running about an hour ago
ta3zhbkd18t7 nginx.4 nginx:latest manager Running Running about a minute ago
pvp3etypauyp \_ nginx.4 nginx:latest worker-01 Shutdown Shutdown about a minute ago
Примечание
# apt-get install podman
Проверка версии установленного пакета:
# podman --version
podman version 5.5.2
# sysctl kernel.unprivileged_userns_clone
kernel.unprivileged_userns_clone = 0
# apt-get install sysctl-conf-userns
/usr/bin/newuidmap и /usr/bin/newgidmap пользователям, не являющимся владельцами файла и не принадлежащим к группе владельца файла:
#control newgidmap public#control newuidmap public
$ podman run registry.altlinux.org/alt/alt:p11 uname -a
Trying to pull registry.altlinux.org/alt/alt:p11...
Getting image source signatures
Copying blob c549b474d68c done |
Copying blob 8d382247a69f done |
Copying config 97c70e35e5 done |
Writing manifest to image destination
Linux e23f31a2b4f9 6.12.45-6.12-alt1 #1 SMP PREEMPT_DYNAMIC Fri Sep 12 08:34:26 UTC 2025 x86_64 GNU/Linux
Если вывод отображает информацию о ядре Linux внутри контейнера, то rootless-режим настроен верно.
$ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.altlinux.org/alt/alt p11 97c70e35e575 5 months ago 125 MB
$ podman network create my-network
$ podman network ls
NETWORK ID NAME DRIVER
fcb565985cc6 my-network bridge
2f259bab93aa podman bridge
$ podman network inspect my-network
my-network
$ podman run -d --name nginx --network my-network -p 8081:80 registry.altlinux.org/p11/nginx
9f65b8ed6971b34f65a586800852ce695ac61176a54f318d610dacae0e5d6ce6
где:
-d — работа в фоновом режиме;
--name — имя контейнера;
--network — имя используемой сети для запуска контейнера;
-p — сопоставление порта хоста с портом в контейнере (например, 8081:80 означает: порт 8081 на хосте → порт 80 в контейнере);
registry.altlinux.org/p11/nginx — репозиторий и название необходимого приложения.
$ podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9f65b8ed6971 registry.altlinux… nginx -g daemon o... 7 minutes ago Up 7 minutes 0.0.0.0:8081->80/tcp nginx
$ curl -I <ip_адрес>:<порт>
где:
-p при создании контейнера.
$ curl -I 192.168.0.102:8081
HTTP/1.1 200 OK
Server: nginx/1.26.3
Date: Wed, 03 Dec 2025 16:31:26 GMT
…
$ podman pod create --name my-pod --network my-network -p 8081:80
Список Pod'ов (групп контейнеров):
$ podman pod ls
POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS
394308217ce0 my-pod Created 12 seconds ago 286d0da0f2dc 1
$ podman run -d --pod my-pod --name nginx registry.altlinux.org/p11/nginx
В Pod my-pod будет добавлен контейнер с приложением nginx.
$ podman pod inspect my-pod
$ podman pod ps --ctr-names
POD ID NAME STATUS CREATED INFRA ID NAMES
394308217ce0 my-pod Running About a minute ago bd7dd34e327f 394308217ce0-infra,nginx
$ podman pod stop my-pod
$ podman pod start my-pod
$ podman pod rm my-pod
kubectl — утилита для взаимодействия с API-сервером и управления объектами кластера (Pods, Deployments, Services и др.);
kubelet — агент, запускаемый на каждом узле, отвечающий за запуск и мониторинг контейнеров;
kubeadm — инструмент для инициализации и настройки компонентов control plane (API-сервер, etcd, scheduler и др.) при развёртывании кластера.
# apt-get install kubernetes1.31-kubeadm kubernetes1.31-kubelet kubernetes1.31-crio cri-tools1.31
Запустить и включить службы crio и kubelet:
#systemctl enable --now crio#systemctl enable --now kubelet
Примечание
/etc/hosts);
Примечание
# swapoff -a
И удалить соответствующую строку в /etc/fstab.
# kubeadm init --pod-network-cidr=10.244.0.0/16
# kubeadm init --pod-network-cidr=192.168.0.0/16
# kubeadm init --pod-network-cidr=10.244.0.0/16 \
--kubernetes-version=1.31.10 \
--image-repository=registry.altlinux.org/p11
# kubeadm init --pod-network-cidr=192.168.0.0/16 \
--kubernetes-version=1.31.10 \
--image-repository=registry.altlinux.org/p11
--pod-network-cidr — диапазон IP-адресов для подсети Pod'ов:
--image-repository — указывает реестр для образов control plane (по умолчанию registry.k8s.io);
--kubernetes-version — фиксирует версию компонентов control plane.
Your Kubernetes control-plane has initialized successfully!А также команды для настройки доступа и добавления узлов:
To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config Alternatively, if you are the root user, you can run: export KUBECONFIG=/etc/kubernetes/admin.conf You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ Then you can join any number of worker nodes by running the following on each as root: kubeadm join 192.168.0.103:6443 --token 4o84lf.yerap79j66r4riwi \ --discovery-token-ca-cert-hash sha256:35b569232b0e81ca19cf23948cb7b3580e17be7059bbf242c4fb0e481afd8ff6
~/.kube (с правами пользователя):
$ mkdir ~/.kube
# cp /etc/kubernetes/admin.conf /home/<пользователь>/.kube/config
# chown <пользователь>: /home/<пользователь>/.kube/config
$ kubectl apply -f https://altlinux.space/cloud/manifests/raw/branch/master/flannel/p11/latest/kube-flannel.yml
/etc/cni/net.d/:
# cd /etc/cni/net.d/
100-crio-bridge.conflist:
# cp 100-crio-bridge.conflist.sample 100-crio-bridge.conflist
$kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/refs/tags/v3.25.0/manifests/tigera-operator.yaml$kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/refs/tags/v3.25.0/manifests/custom-resources.yaml
$ kubectl get pods --namespace kube-system
NAME READY STATUS RESTARTS AGE
coredns-7c65d6cfc9-f6hjb 1/1 Running 0 4m49s
coredns-7c65d6cfc9-g7hbf 1/1 Running 0 4m49s
etcd-kube03 1/1 Running 0 4m51s
kube-apiserver-kube03 1/1 Running 0 4m54s
kube-controller-manager-kube03 1/1 Running 0 4m56s
kube-proxy-ncdxh 1/1 Running 0 4m50s
kube-scheduler-kube03 1/1 Running 0 4m49s
coredns должны быть в состоянии Running. Количество kube-flannel и kube-proxy зависит от общего числа узлов.
kubeadm join, выведенную при инициализации:
# kubeadm join <ip адрес>:<порт> --token <токен>
--discovery-token-ca-cert-hash sha256:<хеш> --ignore-preflight-errors=SystemVerification
# kubeadm join 192.168.0.103:6443 --token 4o84lf.yerap79j66r4riwi \
--discovery-token-ca-cert-hash \
sha256:35b569232b0e81ca19cf23948cb7b3580e17be7059bbf242c4fb0e481afd8ff6
[preflight] Running pre-flight checks
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-check] Waiting for a healthy kubelet at http://127.0.0.1:10248/healthz. This can take up to 4m0s
[kubelet-check] The kubelet is healthy after 502.186592ms
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap
This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.
Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
Примечание
$ kubeadm token list
TOKEN TTL EXPIRES USAGES
4o84lf.yerap79j66r4riwi 23h 2025-08-25T09:00:31Z authentication,signing
По умолчанию срок действия токена — 24 часа. Если требуется добавить новый узел в кластер по окончанию этого периода, можно создать новый токен:
$ kubeadm token create
--discovery-token-ca-cert-hash неизвестно, его можно получить, выполнив команду (на управляющем узле):
$ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | \
openssl rsa -pubin -outform der 2>/dev/null | \
openssl dgst -sha256 -hex | sed 's/^.* //'
35b569232b0e81ca19cf23948cb7b3580e17be7059bbf242c4fb0e481afd8ff6
<control-plane-host>:<control-plane-port>, адрес control plane должен быть в квадратных скобках:
[fd00::101]:2073
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
kube01 Ready <none> 2m2s v1.31.14
kube02 NotReady <none> 7s v1.31.14
kube03 Ready control-plane 8m4s v1.31.14
или
$ kubectl get nodes -o wide
$ kubectl cluster-info
Kubernetes control plane is running at https://192.168.0.103:6443
CoreDNS is running at https://192.168.0.103:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
Подробная информация об узле:
$ kubectl describe node kube03
nginx-deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: registry.altlinux.org/p11/nginx:1.26.3
ports:
- containerPort: 80
$ kubectl apply -f nginx-deployment.yaml
deployment.apps/nginx-deployment created
nginx-service.yaml:
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
selector:
app: nginx
$ kubectl apply -f nginx-service.yaml
service/nginx created
$ kubectl get svc nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx NodePort 10.97.219.184 <none> 80:31781/TCP 17s
$ curl -I <ip адрес>:<порт>
где:
$ curl -I 192.168.0.102:31781
HTTP/1.1 200 OK
Server: nginx/1.26.3
kubeadm init и kubeadm join --control-plane.
Примечание
# kubeadm init --control-plane-endpoint 192.168.0.201:6443 \
--upload-certs \
--pod-network-cidr=10.244.0.0/16
где:
--control-plane-endpoint — адрес и порт балансировщика нагрузки, общий для всех узлов управления;
--upload-certs — позволяет загрузить сертификаты в кластер, чтобы последующие узлы управления могли получить их при присоединении;
--pod-network-cidr=10.244.0.0/16 — адрес внутренней (разворачиваемой Kubernetes) сети, рекомендуется оставить данное значение для правильной работы Flannel.
… Your Kubernetes control-plane has initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config Alternatively, if you are the root user, you can run: export KUBECONFIG=/etc/kubernetes/admin.conf You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ You can now join any number of the control-plane node running the following command on each as root: kubeadm join 192.168.0.201:6443 --token lbau0b.uqv4g69t59tpscs6 \ --discovery-token-ca-cert-hash sha256:45988194e28aaf3789f8c2a1f81d69222638fb8bcfd0e92d8e77c3aa3abaa13c \ --control-plane --certificate-key c811ee11caccd900c0cb1708906705ff765aa8b7d34b6cf01664116864a65c95 Please note that the certificate-key gives access to cluster sensitive data, keep it secret! As a safeguard, uploaded-certs will be deleted in two hours; If necessary, you can use "kubeadm init phase upload-certs --upload-certs" to reload certs afterward. Then you can join any number of worker nodes by running the following on each as root: kubeadm join 192.168.0.201:6443 --token lbau0b.uqv4g69t59tpscs6 \ --discovery-token-ca-cert-hash sha256:45988194e28aaf3789f8c2a1f81d69222638fb8bcfd0e92d8e77c3aa3abaa13c
~/.kube (с правами пользователя):
$ mkdir ~/.kube
# cp /etc/kubernetes/admin.conf /home/<пользователь>/.kube/config
# chown <пользователь>: /home/<пользователь>/.kube/config
$ kubectl apply -f https://altlinux.space/cloud/manifests/raw/branch/master/flannel/p11/latest/kube-flannel.yml
$ kubectl get pod -n kube-system -w
NAME READY STATUS RESTARTS AGE
coredns-78fcd69978-c5swn 1/1 Running 0 11m
coredns-78fcd69978-zdbp8 1/1 Running 0 11m
etcd-master01 1/1 Running 0 11m
kube-apiserver-master01 1/1 Running 0 11m
kube-controller-manager-master01 1/1 Running 0 11m
kube-flannel-ds-qfzbw 1/1 Running 0 116s
kube-proxy-r6kj9 1/1 Running 0 11m
kube-scheduler-master01 1/1 Running 0 11m
kubeadm init:
# kubeadm join 192.168.0.201:6443 \
--token lbau0b.uqv4g69t59tpscs6 \
--discovery-token-ca-cert-hash sha256:45988194e28aaf3789f8c2a1f81d69222638fb8bcfd0e92d8e77c3aa3abaa13c \
--control-plane \
--certificate-key c811ee11caccd900c0cb1708906705ff765aa8b7d34b6cf01664116864a65c95
kubeadm init):
# kubeadm join 192.168.0.201:6443 \
--token lbau0b.uqv4g69t59tpscs6 \
--discovery-token-ca-cert-hash sha256:45988194e28aaf3789f8c2a1f81d69222638fb8bcfd0e92d8e77c3aa3abaa13c
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
kube01 Ready <none> 23m v1.31.14
kube02 Ready <none> 15m v1.31.14
kube03 Ready <none> 2m30s v1.31.14
master01 Ready control-plane 82m v1.31.14
master02 Ready control-plane 66m v1.31.14
master03 Ready control-plane 39m v1.31.14
Примечание
# cat << EOF > /etc/systemd/system/kubelet.service.d/kubelet.conf
# Replace "systemd" with the cgroup driver of your container runtime. The default value in the kubelet is "cgroupfs".
# Replace the value of "containerRuntimeEndpoint" for a different container runtime if needed.
#
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
authentication:
anonymous:
enabled: false
webhook:
enabled: false
authorization:
mode: AlwaysAllow
cgroupDriver: systemd
address: 127.0.0.1
containerRuntimeEndpoint: unix:///var/run/crio/crio.sock
staticPodPath: /etc/kubernetes/manifests
EOF
# cat << EOF > /etc/systemd/system/kubelet.service.d/20-etcd-service-manager.conf
[Service]
ExecStart=
ExecStart=/usr/bin/kubelet --config=/etc/systemd/system/kubelet.service.d/kubelet.conf
Restart=always
EOF
#systemctl daemon-reload#systemctl restart kubelet
# systemctl status kubelet
#!/bin/sh
# IP-адреса узлов etcd
export HOST0=192.168.0.204
export HOST1=192.168.0.205
export HOST2=192.168.0.206
# Имена узлов
export NAME0="etcd01"
export NAME1="etcd02"
export NAME2="etcd03"
# Создание временных каталогов
mkdir -p /tmp/${HOST0}/ /tmp/${HOST1}/ /tmp/${HOST2}/
HOSTS=(${HOST0} ${HOST1} ${HOST2})
NAMES=(${NAME0} ${NAME1} ${NAME2})
for i in "${!HOSTS[@]}"; do
HOST=${HOSTS[$i]}
NAME=${NAMES[$i]}
cat << EOF > /tmp/${HOST}/kubeadmcfg.yaml
---
apiVersion: "kubeadm.k8s.io/v1beta4"
kind: InitConfiguration
nodeRegistration:
name: ${NAME}
localAPIEndpoint:
advertiseAddress: ${HOST}
---
apiVersion: "kubeadm.k8s.io/v1beta4"
kind: ClusterConfiguration
etcd:
local:
serverCertSANs:
- "${HOST}"
peerCertSANs:
- "${HOST}"
extraArgs:
- name: initial-cluster
value: ${NAMES[0]}=https://${HOSTS[0]}:2380,${NAMES[1]}=https://${HOSTS[1]}:2380,${NAMES[2]}=https://${HOSTS[2]}:2380
- name: initial-cluster-state
value: new
- name: name
value: ${NAME}
- name: listen-peer-urls
value: https://${HOST}:2380
- name: listen-client-urls
value: https://${HOST}:2379
- name: advertise-client-urls
value: https://${HOST}:2379
- name: initial-advertise-peer-urls
value: https://${HOST}:2380
EOF
done
Примечание
/etc/kubernetes/pki/etcd/ca.crt и /etc/kubernetes/pki/etcd/ca.key. После этого можно перейти к следующему шагу.
# kubeadm init phase certs etcd-ca
[certs] Generating "etcd/ca" certificate and key
Будут созданы два файла: /etc/kubernetes/pki/etcd/ca.crt и /etc/kubernetes/pki/etcd/ca.key.
#!/bin/sh
# IP-адреса узлов
export HOST0=192.168.0.204
export HOST1=192.168.0.205
export HOST2=192.168.0.206
# Для третьего узла
kubeadm init phase certs etcd-server --config=/tmp/${HOST2}/kubeadmcfg.yaml
kubeadm init phase certs etcd-peer --config=/tmp/${HOST2}/kubeadmcfg.yaml
kubeadm init phase certs etcd-healthcheck-client --config=/tmp/${HOST2}/kubeadmcfg.yaml
kubeadm init phase certs apiserver-etcd-client --config=/tmp/${HOST2}/kubeadmcfg.yaml
cp -R /etc/kubernetes/pki /tmp/${HOST2}/
# cleanup non-reusable certificates
find /etc/kubernetes/pki -not -name ca.crt -not -name ca.key -type f -delete
# Для второго узла
kubeadm init phase certs etcd-server --config=/tmp/${HOST1}/kubeadmcfg.yaml
kubeadm init phase certs etcd-peer --config=/tmp/${HOST1}/kubeadmcfg.yaml
kubeadm init phase certs etcd-healthcheck-client --config=/tmp/${HOST1}/kubeadmcfg.yaml
kubeadm init phase certs apiserver-etcd-client --config=/tmp/${HOST1}/kubeadmcfg.yaml
cp -R /etc/kubernetes/pki /tmp/${HOST1}/
find /etc/kubernetes/pki -not -name ca.crt -not -name ca.key -type f -delete
# Для первого узла (не требует копирования)
kubeadm init phase certs etcd-server --config=/tmp/${HOST0}/kubeadmcfg.yaml
kubeadm init phase certs etcd-peer --config=/tmp/${HOST0}/kubeadmcfg.yaml
kubeadm init phase certs etcd-healthcheck-client --config=/tmp/${HOST0}/kubeadmcfg.yaml
kubeadm init phase certs apiserver-etcd-client --config=/tmp/${HOST0}/kubeadmcfg.yaml
# Удалить закрытый ключ CA с удалённых узлов (для безопасности)
find /tmp/${HOST2} -name ca.key -type f -delete
find /tmp/${HOST1} -name ca.key -type f -delete
HOST1=192.168.0.205 HOST2=192.168.0.206 USER=user #scp -r /tmp/${HOST1}/* ${USER}@${HOST1}:#ssh ${USER}@${HOST1}$su -#chown -R root:root /home/user/pki#mv /home/user/pki /etc/kubernetes/#exit$exit#scp -r /tmp/${HOST2}/* ${USER}@${HOST2}:#ssh ${USER}@${HOST2}$su -#chown -R root:root /home/user/pki#mv /home/user/pki /etc/kubernetes/#exit$exit
/tmp/${HOST0}
└── kubeadmcfg.yaml
---
/etc/kubernetes/pki
├── apiserver-etcd-client.crt
├── apiserver-etcd-client.key
└── etcd
├── ca.crt
├── ca.key
├── healthcheck-client.crt
├── healthcheck-client.key
├── peer.crt
├── peer.key
├── server.crt
└── server.key
$HOME
└── kubeadmcfg.yaml
---
/etc/kubernetes/pki
├── apiserver-etcd-client.crt
├── apiserver-etcd-client.key
└── etcd
├── ca.crt
├── healthcheck-client.crt
├── healthcheck-client.key
├── peer.crt
├── peer.key
├── server.crt
└── server.key
# kubeadm init phase etcd local --config=/tmp/192.168.0.204/kubeadmcfg.yaml
[etcd] Creating static Pod manifest for local etcd in "/etc/kubernetes/manifests
# kubeadm init phase etcd local --config=/home/user/kubeadmcfg.yaml
[etcd] Creating static Pod manifest for local etcd in "/etc/kubernetes/manifests"
export CONTROL_PLANE="user@192.168.0.201" #scp /etc/kubernetes/pki/etcd/ca.crt "${CONTROL_PLANE}":#scp /etc/kubernetes/pki/apiserver-etcd-client.crt "${CONTROL_PLANE}":#scp /etc/kubernetes/pki/apiserver-etcd-client.key "${CONTROL_PLANE}":
kubeadm-config.yaml:
---
apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
kubernetesVersion: stable
networking:
podSubnet: "10.244.0.0/16"
controlPlaneEndpoint: "192.168.0.201:6443" # IP-адрес, порт балансировщика нагрузки
etcd:
external:
endpoints:
- https://192.168.0.204:2379 # IP-адрес ETCD01
- https://192.168.0.205:2379 # IP-адрес ETCD02
- https://192.168.0.206:2379 # IP-адрес ETCD03
caFile: /etc/kubernetes/pki/etcd/ca.crt
certFile: /etc/kubernetes/pki/apiserver-etcd-client.crt
keyFile: /etc/kubernetes/pki/apiserver-etcd-client.key
#mkdir -p /etc/kubernetes/pki/etcd/#cp /home/user/ca.crt /etc/kubernetes/pki/etcd/#cp /home/user/apiserver-etcd-client.* /etc/kubernetes/pki/
# kubeadm init --config kubeadm-config.yaml --upload-certs
После успешной инициализации появится вывод с командами для присоединения узлов:
… Your Kubernetes control-plane has initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config Alternatively, if you are the root user, you can run: export KUBECONFIG=/etc/kubernetes/admin.conf You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ You can now join any number of the control-plane node running the following command on each as root: kubeadm join 192.168.0.201:6443 --token sypp2l.cqttrqku3fo7jc6v \ --discovery-token-ca-cert-hash sha256:e325640fefa4a559d2594965ae0b28f0f938ee4341cbfa3114df3ba59f9afa20 \ --control-plane --certificate-key 71fe1376ccd1889ad07566270c690be483b0418a92e102820657269a5f647c0b Please note that the certificate-key gives access to cluster sensitive data, keep it secret! As a safeguard, uploaded-certs will be deleted in two hours; If necessary, you can use "kubeadm init phase upload-certs --upload-certs" to reload certs afterward. Then you can join any number of worker nodes by running the following on each as root: kubeadm join 192.168.0.201:6443 --token sypp2l.cqttrqku3fo7jc6v \ --discovery-token-ca-cert-hash sha256:e325640fefa4a559d2594965ae0b28f0f938ee4341cbfa3114df3ba59f9afa20Следует сохранить этот вывод, так как токен будет использоваться для присоединения к кластеру остальных управляющих и вычислительных узлов.
~/.kube (с правами пользователя):
$ mkdir ~/.kube
# cp /etc/kubernetes/admin.conf /home/<пользователь>/.kube/config
# chown <пользователь>: /home/<пользователь>/.kube/config
$ kubectl apply -f https://altlinux.space/cloud/manifests/raw/branch/master/flannel/p11/latest/kube-flannel.yml
$ kubectl get pod -n kube-system -w
kubeadm init на первом управляющем узле):
# kubeadm join 192.168.0.201:6443 --token sypp2l.cqttrqku3fo7jc6v \
--discovery-token-ca-cert-hash sha256:e325640fefa4a559d2594965ae0b28f0f938ee4341cbfa3114df3ba59f9afa20 \
--control-plane --certificate-key 71fe1376ccd1889ad07566270c690be483b0418a92e102820657269a5f647c0b
kubeadm init на первом управляющем узле):
# kubeadm join 192.168.0.201:6443 --token sypp2l.cqttrqku3fo7jc6v \
--discovery-token-ca-cert-hash sha256:e325640fefa4a559d2594965ae0b28f0f938ee4341cbfa3114df3ba59f9afa20
$ kubectl get nodes
Содержание
apt-get. Она автоматически определяет зависимости между пакетами и строго следит за её соблюдением при выполнении любой из следующих операций: установка, удаление или обновление пакетов.
Важно
/etc/apt/sources.list, либо в любой файл .list (например, mysources.list) в каталоге /etc/apt/sources.list.d/. Описания репозиториев заносятся в эти файлы в следующем виде:
rpm [подпись] метод:путь база название rpm-src [подпись] метод:путь база названиеЗдесь:
/etc/apt/vendor.list;
/etc/apt/sources.list.d/*.list обычно указывается интернет-репозиторий, совместимый с установленным дистрибутивом.
sources.list, необходимо обновить локальную базу данных APT о доступных пакетах. Это делается командой apt-get update.
sources.list присутствует репозиторий, содержимое которого может изменяться (например, постоянно разрабатываемый репозиторий или репозиторий обновлений по безопасности), то прежде чем работать с APT, необходимо синхронизировать локальную базу данных с удалённым сервером командой apt-get update. Локальная база данных создаётся заново при каждом изменении в репозитории: добавлении, удалении или переименовании пакета.
/etc/apt/sources.list, относящиеся к ресурсам в сети Интернет.
apt-repo:
apt-repo
apt-repo add репозиторий
apt-repo rm репозиторий
apt-repo update
apt-repo:
man apt-repo
или
apt-repo --help
Примечание
#Или то же самое одной командой:apt-repo#rm allapt-repoadd p11
# apt-repo set p11
sources.list репозитория на сменном диске в APT предусмотрена специальная утилита — apt-cdrom.
Acquire::CDROM::mount в файле конфигурации APT (/etc/apt/apt.conf), по умолчанию это /media/ALTLinux:
# mkdir /media/ALTLinux
# mount /dev/носитель /media/ALTLinux
где /dev/носитель — соответствующее блочное устройство (например, /dev/cdrom — для CD/DVD-диска).
# apt-cdrom -m add
sources.list появится запись о подключённом носителе:
rpm cdrom:[ALT Server 11.1 x86_64 build 2025-08-12]/ ALTLinux main
Примечание
mount /dev/носитель /media/ALTLinux необходимо выполнять перед каждой командой apt-get install имя_пакета.
/etc/apt/sources.list.d/.
Примечание
alt.list может содержаться такая информация:
# ftp.altlinux.org (ALT Linux, Moscow) # ALT Platform 11 #rpm [p11] ftp://ftp.altlinux.org/pub/distributions/ALTLinux p11/branch/x86_64 classic gostcrypto #rpm [p11] ftp://ftp.altlinux.org/pub/distributions/ALTLinux p11/branch/x86_64-i586 classic #rpm [p11] ftp://ftp.altlinux.org/pub/distributions/ALTLinux p11/branch/noarch classic rpm [p11] http://ftp.altlinux.org/pub/distributions/ALTLinux p11/branch/x86_64 classic gostcrypto rpm [p11] http://ftp.altlinux.org/pub/distributions/ALTLinux p11/branch/x86_64-i586 classic rpm [p11] http://ftp.altlinux.org/pub/distributions/ALTLinux p11/branch/noarch classic #rpm [p11] rsync://ftp.altlinux.org/ALTLinux p11/branch/x86_64 classic gostcrypto #rpm [p11] rsync://ftp.altlinux.org/ALTLinux p11/branch/x86_64-i586 classic #rpm [p11] rsync://ftp.altlinux.org/ALTLinux p11/branch/noarch classic
apt-get update или apt-repo update).
apt-cache. Данная утилита позволяет искать пакет не только по имени, но и по его описанию.
apt-cache search подстрока позволяет найти все пакеты, в именах или описании которых присутствует указанная подстрока. Например:
$ apt-cache search dictionary
stardict-wn - GCIDE - The Collaborative International Dictionary of English
firefox-ru - Russian (RU) Language Pack for Firefox
gnome-dictionary-applet - GNOME panel applet for gnome-dictionary
gnome-utils - Utilities for the GNOME 2.0 desktop
libgdict - GNOME Dictionary Library.
stardict-mueller7 - V.K. Mueller English-Russian Dictionary, 7 Edition: stardict format
stardict-slovnyk_be-en - Dictionary: Slovnyk Belarusian-English
stardict-slovnyk_be-ru - Dictionary: Slovnyk Belarusian-Russian
stardict-slovnyk_be-uk - Dictionary: Slovnyk Belarusian-Ukrainian
stardict-slovnyk_cs-ru - Dictionary: Slovnyk Czech-Russian
stardict-slovnyk_en-be - Dictionary: Slovnyk English-Belarusian
stardict-slovnyk_en-ru - Dictionary: Slovnyk English-Russian
stardict-slovnyk_en-uk - Dictionary: Slovnyk English-Ukrainian
stardict-slovnyk_es-ru - Dictionary: Slovnyk Spanish-Russian
stardict-slovnyk_ru-be - Dictionary: Slovnyk Russian-Belarusian
stardict-slovnyk_ru-cs - Dictionary: Slovnyk Russian-Czech
stardict-slovnyk_ru-en - Dictionary: Slovnyk Russian-English
stardict-slovnyk_ru-es - Dictionary: Slovnyk Russian-Spanish
stardict-slovnyk_ru-uk - Dictionary: Slovnyk Russian-Ukrainian
stardict-slovnyk_uk-be - Dictionary: Slovnyk Ukrainian-Belarusian
stardict-slovnyk_uk-en - Dictionary: Slovnyk Ukrainian-English
stardict-slovnyk_uk-ru - Dictionary: Slovnyk Ukrainian-Russian
words - A dictionary of English words for the /usr/share/dict directory
apt-cache show:
$ apt-cache show stardict-mueller7
Package: stardict-mueller7
Section: Text tools
Installed Size: 3095255
Maintainer: Anton V. Boyarshinov <boyarsh@altlinux.ru>
Version: 1.0-alt7
Pre-Depends: rpmlib(PayloadIsLzma)
Depends: stardict (>= 2.4.2)
Provides: stardict-mueller7 (= 1.0-alt7)
Architecture: noarch
Size: 3135276
MD5Sum: ea95c67ca323350b454fbc26533c3548
Filename: stardict-mueller7-1.0-alt7.noarch.rpm
Description: V.K. Mueller English-Russian Dictionary, 7 Edition: stardict format
Electronic version of V.K. Mueller English-Russian Dictionary, 7 Edition
in stardict format. You can use it with stardict client.
apt-cache можно использовать русскую подстроку. В этом случае будут найдены пакеты, имеющие описание на русском языке. К сожалению, описание на русском языке в настоящее время есть не у всех пакетов, но наиболее актуальные описания переведены.
Важно
apt-get install имя_пакета.
Важно
# apt-get update
apt-get позволяет устанавливать в систему пакеты, требующие для работы наличие других, пока ещё не установленных пакетов. В этом случае он определяет, какие пакеты необходимо установить. apt-get устанавливает их, пользуясь всеми доступными репозиториями.
apt-get install stardict-mueller7 приведёт к следующему диалогу с APT (если пакет еще не установлен):
# apt-get install stardict-mueller7
Чтение списков пакетов... Завершено
Построение дерева зависимостей... Завершено
Следующие НОВЫЕ пакеты будут установлены:
stardict-mueller7
0 будет обновлено, 1 новых установлено, 0 пакетов будет удалено и 0 не будет обновлено.
Необходимо получить 0B/3135kB архивов.
После распаковки потребуется дополнительно 3095kB дискового пространства.
Совершаем изменения...
Preparing... ####################### [100%]
1: stardict-mueller7 ####################### [100%]
Running /usr/lib/rpm/posttrans-filetriggers
Завершено.
apt-get install имя_пакета
используется также и для обновления уже установленного пакета или группы пакетов. В этом случае apt-get дополнительно проверяет, есть ли обновлённая, в сравнении с установленной в системе, версия пакета в репозитории.
apt-get install stardict-mueller7 будет таким:
# apt-get install stardict-mueller7
Чтение списков пакетов... Завершено
Построение дерева зависимостей... Завершено
Последняя версия stardict-mueller7 уже установлена.
0 будет обновлено, 0 новых установлено, 0 пакетов будет удалено и 2262 не будет обновлено.
# apt-get install /путь/к/файлу.rpm
При этом APT проведёт стандартную процедуру проверки зависимостей и конфликтов с уже установленными пакетами.
apt-get отказывается выполнять операции установки, удаления или обновления. В этом случае необходимо повторить операцию, задав опцию -f, заставляющую apt-get исправить нарушенные зависимости, удалить или заменить конфликтующие пакеты. В этом случае необходимо внимательно следить за сообщениями, выводимыми apt-get. Любые действия в этом режиме обязательно требуют подтверждения со стороны пользователя.
apt-get remove имя_пакета. Для того чтобы не нарушать целостность системы, будут удалены и все пакеты, зависящие от удаляемого. В случае удаления пакета, который относится к базовым компонентам системы, apt-get потребует дополнительное подтверждение с целью предотвращения возможной случайной ошибки.
Важно
apt-get удалить базовый компонент системы, вы увидите следующий запрос на подтверждение операции:
# apt-get remove filesystem
Чтение списков пакетов... Завершено
Построение дерева зависимостей... Завершено
Следующие пакеты будут УДАЛЕНЫ:
...
ВНИМАНИЕ: Будут удалены важные для работы системы пакеты
Обычно этого делать не следует. Вы должны точно понимать возможные последствия!
...
0 будет обновлено, 0 новых установлено, 2648 пакетов будет удалено и 0 не будет обновлено.
Необходимо получить 0B архивов.
После распаковки будет освобождено 8994MB дискового пространства.
Вы делаете нечто потенциально опасное!
Введите фразу 'Yes, do as I say!' чтобы продолжить.
Предупреждение
#apt-get&&updateapt-getdist-upgrade
apt-get update) обновит индексы пакетов. Вторая команда (apt-get dist-upgrade) позволяет обновить только те установленные пакеты, для которых в репозиториях, перечисленных в /etc/apt/sources.list, имеются новые версии.
Примечание
apt-get upgrade существует, использовать её следует осторожно, либо не использовать вовсе.
/etc/apt/sources.list, имеются новые версии.
apt-get upgrade, в результате чего происходит нарушение целостности системы: появляются неудовлетворённые зависимости. Для разрешения этой проблемы существует режим обновления в масштабе дистрибутива — apt-get dist-upgrade.
apt-get, которым APT предварит само обновление.
Примечание
apt-get dist-upgrade обновит систему, но ядро ОС не будет обновлено.
# update-kernel
Примечание
update-kernel необходимо выполнить команду apt-get update.
update-kernel обновляет и модули ядра, если в репозитории обновилось что-то из модулей без обновления ядра.
# remove-old-kernels
Содержание
/.
/media/cdrom (путь в дистрибутиве обозначается с использованием /, а не \, как в DOS/Windows).
/:
/bin — командные оболочки (shell), основные утилиты;
/boot — содержит ядро системы;
/dev — псевдофайлы устройств, позволяющие работать с устройствами напрямую. Файлы в /dev создаются сервисом udev
/etc — общесистемные конфигурационные файлы для большинства программ в системе;
/etc/rc?.d, /etc/init.d, /etc/rc.boot, /etc/rc.d — каталоги, где расположены командные файлы, выполняемые при запуске системы или при смене её режима работы;
/etc/passwd — база данных пользователей, в которой содержится информация об имени пользователя, его настоящем имени, личном каталоге, его зашифрованный пароль и другие данные;
/etc/shadow — теневая база данных пользователей. При этом информация из файла /etc/passwd перемещается в /etc/shadow, который недоступен для чтения всем, кроме пользователя root. В случае использования альтернативной схемы управления теневыми паролями (TCB), все теневые пароли для каждого пользователя располагаются в каталоге /etc/tcb/имя пользователя/shadow;
/home — домашние каталоги пользователей;
/lib — содержит файлы динамических библиотек, необходимых для работы большей части приложений, и подгружаемые модули ядра;
/lost+found — восстановленные файлы;
/media — подключаемые носители (каталоги для монтирования файловых систем сменных устройств);
/mnt — точки временного монтирования;
/opt — вспомогательные пакеты;
/proc — виртуальная файловая система, хранящаяся в памяти компьютера при загруженной ОС. В данном каталоге расположены самые свежие сведения обо всех процессах, запущенных на компьютере.
/root — домашний каталог администратора системы;
/run — файлы состояния приложений;
/sbin — набор программ для административной работы с системой (системные утилиты);
/selinux — виртуальная файловая система SELinux;
/srv — виртуальные данные сервисных служб;
/sys — файловая система, содержащая информацию о текущем состоянии системы;
/tmp — временные файлы.
/usr — пользовательские двоичные файлы и данные, используемые только для чтения (программы и библиотеки);
/var — файлы для хранения изменяющихся данных (рабочие файлы программ, очереди, журналы).
/usr:
/usr/bin — дополнительные программы для всех учетных записей;
/usr/sbin — команды, используемые при администрировании системы и не предназначенные для размещения в файловой системе root;
/usr/local — место, где рекомендуется размещать файлы, установленные без использования пакетных менеджеров, внутренняя организация каталогов практически такая же, как и корневого каталога;
/usr/man — каталог, где хранятся файлы справочного руководства man;
/usr/share — каталог для размещения общедоступных файлов большей части приложений.
/var:
/var/log — место, где хранятся файлы аудита работы системы и приложений;
/var/spool — каталог для хранения файлов, находящихся в очереди на обработку для того или иного процесса (очереди печати, непрочитанные или не отправленные письма, задачи cron т.д.).
/dev файловой системы дистрибутива (об этом — ниже). Диски (в том числе IDE/SATA/SCSI/SAS жёсткие диски, USB-диски) имеют имена:
/dev/sda — первый диск;
/dev/sdb — второй диск;
/dev/sdX, где X — a, b, c, d, e, … в зависимости от порядкового номера диска на шине.
/dev/sdb4 — четвертый раздел второго диска.
/) и раздел подкачки (swap). Размер последнего, как правило, составляет от однократной до двукратной величины оперативной памяти компьютера. Если на диске много свободного места, то можно создать отдельные разделы для каталогов /usr, /home, /var.
command.com в DOS, но несравненно мощнее. При помощи командных интерпретаторов можно писать небольшие программы — сценарии (скрипты). В Linux доступны следующие командные оболочки:
bash — самая распространенная оболочка под linux. Она ведет историю команд и предоставляет возможность их редактирования;
pdksh — клон korn shell, хорошо известной оболочки в UNIX™ системах.
$ echo $SHELL
history. Команды, присутствующие в истории, отображаются в списке пронумерованными. Чтобы запустить конкретную команду необходимо набрать:
!номер команды
!!запустится последняя из набранных команд.
gunzip, можно набрать следующую команду:
gu
$guguilegunzipgupnp-binding-tool
gunzip — это единственное имя, третьей буквой которого является «n»), а затем нажать клавишу Tab, то оболочка самостоятельно дополнит имя. Чтобы запустить команду нужно нажать Enter.
$PATH. По умолчанию в этот перечень каталогов не входит текущий каталог, обозначаемый ./ (точка слеш) (если только не выбран один из двух самых слабых уровней защиты). Поэтому, для запуска программы из текущего каталога, необходимо использовать команду (в примере запускается команда prog):
./prog
cal, выводящая календарь на текущий месяц.
$calМарт 2025 Пн Вт Ср Чт Пт Сб Вс 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Команда$cal1 2026Январь 2026 Пн Вт Ср Чт Пт Сб Вс 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
cal 1 2026 состоит из двух частей — собственно команды cal и «остального». То, что следует за командой, называется параметрами (или аргументами), и они вводятся для изменения поведения команды. В большинстве случаев, первое слово считается именем команды, а остальные — её параметрами.
date, только для работы по Гринвичу ей нужен дополнительный параметр -u (он же --universal).
$dateЧт 13 мар 2025 12:10:52 EET$date-uЧт 13 мар 2025 10:11:05 UTC
--help. К примеру, получить подсказку о том, что делает команда rm, можно, набрав в терминале rm --help.
man. Пример:
$manls
Примечание
ls -l -F можно ввести команду ls -lF
Учетные записи пользователей
susu позволяет изменить «владельца» текущего сеанса (сессии) без необходимости завершать сеанс и открывать новый.
su [ОПЦИИ...] [ПОЛЬЗОВАТЕЛЬ]
su - будет запрошен пароль суперпользователя (root), и, в случае ввода корректного пароля, пользователь получит права администратора. Чтобы вернуться к правам пользователя, необходимо ввести команду:
exit
idid выводит информацию о пользователе и группах, в которых он состоит, для заданного пользователя или о текущем пользователе (если ничего не указано).
id [ОПЦИИ...] [ПОЛЬЗОВАТЕЛЬ]
passwdpasswd меняет (или устанавливает) пароль, связанный с входным_именем пользователя.
Основные операции с файлами и каталогами
lsls (list) печатает в стандартный вывод содержимое каталогов.
ls [ОПЦИИ...] [ФАЙЛ...]
-a — просмотр всех файлов, включая скрытые;
-l — отображение более подробной информации;
-R — выводить рекурсивно информацию о подкаталогах.
cdcd предназначена для смены каталога. Команда работает как с абсолютными, так и с относительными путями. Если каталог не указан, используется значение переменной окружения $HOME (домашний каталог пользователя). Если каталог задан полным маршрутным именем, он становится текущим. По отношению к новому каталогу нужно иметь право на выполнение, которое в данном случае трактуется как разрешение на поиск.
cd [-L|-P] [КАТАЛОГ]
$OLDPWD. Если переход был осуществлен по переменной окружения $CDPATH или в качестве аргумента был задан «-» и смена каталога была успешной, то абсолютный путь нового рабочего каталога будет выведен на стандартный вывод.
docs/ (относительный путь):
cd docs/
/usr/bin (абсолютный путь):
cd /usr/bin/
cd ..
cd -
cd
pwdpwd выводит абсолютный путь текущего (рабочего) каталога.
pwd [-L|-P]
-P — не выводить символические ссылки;
-L — выводить символические ссылки.
rmrm служит для удаления записей о файлах. Если заданное имя было последней ссылкой на файл, то файл уничтожается.
Предупреждение
rm[ОПЦИИ...]<ФАЙЛ>
-f — никогда не запрашивать подтверждения;
-i — всегда запрашивать подтверждение;
-r, -R — рекурсивно удалять содержимое указанных каталогов.
html в каталоге ~/html:
rm-i~/html/*.html
mkdirmkdir — команда для создания новых каталогов.
mkdir [-p] [-m права] <КАТАЛОГ...>
rmdirrmdir удаляет каталоги из файловой системы. Каталог должен быть пуст перед удалением.
rmdir [ОПЦИИ...] <КАТАЛОГ...>
-p — удалить каталог и его потомки.
rmdir часто заменяется командой rm -rf, которая позволяет удалять каталоги, даже если они не пусты.
cpcp предназначена для копирования файлов из одного в другие каталоги.
cp [-fip] [ИСХ_ФАЙЛ...] [ЦЕЛ_ФАЙЛ...]
cp [-fip] [ИСХ_ФАЙЛ...] [КАТАЛОГ]
cp [-R] [[-H] | [-L] | [-P]] [-fip] [ИСХ_ФАЙЛ...] [КАТАЛОГ]
-p — сохранять по возможности времена изменения и доступа к файлу, владельца и группу, права доступа;
-i — запрашивать подтверждение перед копированием в существующие файлы;
-r, -R — рекурсивно копировать содержимое каталогов.
mvmv предназначена для перемещения файлов.
mv [-fi] [ИСХ_ФАЙЛ...] [ЦЕЛ_ФАЙЛ...]
mv [-fi] [ИСХ_ФАЙЛ...] [КАТАЛОГ]
mv перемещает исх_файл в цел_файл (происходит переименование файла).
mv перемещает исходные файлы в указанный каталог под именами, совпадающими с краткими именами исходных файлов.
-f — не запрашивать подтверждения перезаписи существующих файлов;
-i — запрашивать подтверждение перезаписи существующих файлов.
catcat последовательно выводит содержимое файлов.
cat [ОПЦИИ...] [ФАЙЛ...]
-n, --number — нумеровать все строки при выводе;
-E, --show-ends — показывать $ в конце каждой строки.
headhead выводит первые 10 строк каждого файла на стандартный вывод.
head [ОПЦИИ] [ФАЙЛ...]
-n, --lines=[-]K — вывести первые К строк каждого файла, а не первые 10;
-q, --quiet — не печатать заголовки с именами файлов.
lessless позволяет постранично просматривать текст (для выхода необходимо нажать q).
less ФАЙЛ
grepgrep имеет много опций и предоставляет возможности поиска символьной строки в файле.
grep [шаблон_поиска] <ФАЙЛ>
Поиск файлов
findfind предназначена для поиска всех файлов, начиная с корневого каталога. Поиск может осуществляться по имени, типу или владельцу файла.
find [-H] [-L] [-P] [-Oуровень] [-D help|tree|search|stat|rates|opt|exec] [ПУТЬ…] [ВЫРАЖЕНИЕ]
-name — поиск по имени файла;
-type — поиск по типу f=файл, d=каталог, l=ссылка(lnk);
-user — поиск по владельцу (имя или UID).
find, можно выполнять различные действия над найденными файлами. Основные действия:
-exec команда \; — выполнить команду. Запись команды должна заканчиваться экранированной точкой с запятой. Строка «{}» заменяется текущим маршрутным именем файла;
-execdir команда \; — то же самое что и -exec, но команда вызывается из подкаталога, содержащего текущий файл;
-ok команда — эквивалентно -exec за исключением того, что перед выполнением команды запрашивается подтверждение (в виде сгенерированной командной строки со знаком вопроса в конце) и она выполняется только при ответе: «y»;
-print — вывод имени файла на экран.
-print.
find . -type f -name "~*" -print
file.bak:
find . -newer file.bak -type f -print
a.out или *.o, доступ к которым не производился в течение недели:
find / \( -name a.out -o -name '*.o' \) \ -atime +7 -exec rm {} \;
find . -size 0c -ok rm {} \;
whereiswhereis сообщает путь к исполняемому файлу программы, ее исходным файлам (если есть) и соответствующим страницам справочного руководства.
whereis [ОПЦИИ...] <ФАЙЛ>
-b — вывод информации только об исполняемых файлах;
-m — вывод информации только о страницах справочного руководства;
-s — вывод информации только об исходных файлах.
Мониторинг и управление процессами
psps отображает список текущих процессов.
ps [ОПЦИИ...]
-a — вывести информацию о процессах, ассоциированных с терминалами;
-f — вывести «полный» список;
-l — вывести «длинный» список;
-p список — вывести информацию о процессах с перечисленными в списке PID;
-u список — вывести информацию о процессах с перечисленными идентификаторами или именами пользователей.
killkill позволяет прекратить исполнение процесса или передать ему сигнал.
kill [-s] [сигнал] [идентификатор] [...]
kill [-l] [статус_завершения]
kill [-номер_сигнала] [идентификатор] [...]
-l — вывести список поддерживаемых сигналов;
-s сигнал, -сигнал — послать сигнал с указанным именем.
kill не дает желательного эффекта, необходимо использовать команду kill с параметром -9 (kill -9 PID_номер).
dfdf показывает количество доступного дискового пространства в файловой системе, в которой содержится файл, переданный как аргумент. Если ни один файл не указан, показывается доступное место на всех смонтированных файловых системах. Размеры по умолчанию указаны в блоках по 1КБ.
df [ОПЦИИ] [ФАЙЛ...]
--total — подсчитать общий объем в конце;
-h, --human-readable — печатать размеры в удобочитаемом формате (например, 1K, 234M, 2G).
dudu подсчитывает использование диска каждым файлом, для каталогов подсчет происходит рекурсивно.
du [ОПЦИИ] [ФАЙЛ...]
-a, --all — выводить общую сумму для каждого заданного файла, а не только для каталогов;
-c, --total — подсчитать общий объем в конце. Может быть использовано для выяснения суммарного использования дискового пространства для всего списка заданных файлов;
-d, --max-depth=N — выводить объем для каталога (или файлов, если указано --all) только если она на N или менее уровней ниже аргументов командной строки;
-S, --separate-dirs — выдавать отдельно размер каждого каталога, не включая размеры подкаталогов;
-s, --summarize — отобразить только сумму для каждого аргумента.
whichwhich отображает полный путь к указанным командам или сценариям.
which [ОПЦИИ] <ФАЙЛ...>
-a, --all — выводит все совпавшие исполняемые файлы по содержимому в переменной окружения $PATH, а не только первый из них;
-c, --total — подсчитать общий объем в конце. Может быть использовано для выяснения суммарного использования дискового пространства для всего списка заданных файлов;
-d, --max-depth=N — выводить объем для каталога (или файлов, если указано --all) только если она на N или менее уровней ниже аргументов командной строки;
-S, --separate-dirs — выдавать отдельно размер каждого каталога, не включая размеры подкаталогов;
--skip-dot — пропускает все каталоги из переменной окружения $PATH, которые начинаются с точки.
Использование многозадачности
bgbg позволяет перевести задание на задний план.
bg [ИДЕНТИФИКАТОР ...]
fgfg позволяет перевести задание на передний план.
fg [ИДЕНТИФИКАТОР ...]
Сжатие и упаковка файлов
tartar, которая преобразует файл или группу файлов в архив без сжатия (tarfile).
tar -cf [имя создаваемого файла архива] [упаковываемые файлы и/или каталоги]
tar -cf moi_dokumenti.tar Docs project.tex
tar -xf [имя файла архива]
gzip, bzip2 и 7z.
cat. По умолчанию команда cat читает данные из всех файлов, которые указаны в командной строке, и посылает эту информацию непосредственно в стандартный вывод (stdout). Следовательно, команда:
cat history-final masters-thesis
выведет на экран сначала содержимое файла history-final, а затем — файла masters-thesis.
cat читает входные данные из stdin и возвращает их в stdout. Пример:
cat
Hello there.
Hello there.
Bye.
Bye.
Ctrl-D
cat немедленно возвращает на экран. При вводе информации со стандартного ввода конец текста сигнализируется вводом специальной комбинации клавиш, как правило, Ctrl+D. Сокращённое название сигнала конца текста — EOT (end of text).
sort является простым фильтром — она сортирует входные данные и посылает результат на стандартный вывод. Совсем простым фильтром является команда cat — она ничего не делает с входными данными, а просто пересылает их на выход.
ls на stdin команды sort:
ls|sort-r notes masters-thesis history-final english-list
ls/usr/bin |more
где командаls|sort-r |head-1 notes
head -1 выводит на экран первую строку получаемого ей входного потока строк (в примере поток состоит из данных от команды ls), отсортированных в обратном алфавитном порядке.
ls > file-list
уничтожит содержимое файла file-list, если этот файл ранее существовал, и создаст на его месте новый файл. Если вместо этого перенаправление будет сделано с помощью символов >>, то вывод будет приписан в конец указанного файла, при этом исходное содержимое файла не будет уничтожено.
Примечание
chmod предназначена для изменения прав доступа файлов и каталогов.
chmod [ОПЦИИ] РЕЖИМ[,РЕЖИМ]... <ФАЙЛ>
chmod [ОПЦИИ] --reference=ИФАЙЛ <ФАЙЛ>
-R — рекурсивно изменять режим доступа к файлам, расположенным в указанных каталогах;
--reference=ИФАЙЛ — использовать режим файла ИФАЙЛ.
chmod изменяет права доступа каждого указанного файла в соответствии с правами доступа, указанными в параметре РЕЖИМ. Режим может быть представлен как в символьном виде, так и в числовом (восьмеричном) виде, представляющем битовую маску новых прав доступа.
[ugoa...][[+-=][разрешения...]...]Здесь разрешения — это ноль или более букв из набора «rwxXst» или одна из букв из набора «ugo».
Примечание
f1, а членам группы и прочим пользователям только читать. Команду можно записать двумя способами:
$chmod644 f1 $chmodu=rw,go=r f1
f2:
$ chmod +x f2
f3:
$ chmod +t f3
f4:
$chmod=rwx,g+s f4 $chmod2777 f4
chown изменяет владельца и/или группу для каждого заданного файла.
chown [КЛЮЧ]…[ВЛАДЕЛЕЦ][:[ГРУППА]] <ФАЙЛ>
chown [ОПЦИИ] --reference=ИФАЙЛ <ФАЙЛ>
-R — рекурсивно изменять файлы и каталоги;
--reference=ИФАЙЛ — использовать владельца и группу файла ИФАЙЛ.
/u на пользователя test:
chown test /u
/u:
chown test:staff /u
/u и вложенных файлов на test:
chown -hR test /u
chgrp изменяет группу для каждого заданного файла.
chgrp [ОПЦИИ] ГРУППА <ФАЙЛ>
chgrp [ОПЦИИ] --reference=ИФАЙЛ <ФАЙЛ>
-R — рекурсивно изменять файлы и каталоги;
--reference=ИФАЙЛ — использовать группу файла ИФАЙЛ.
umask задает маску режима создания файла в текущей среде командного интерпретатора равной значению, задаваемому операндом режим. Эта маска влияет на начальное значение битов прав доступа всех создаваемых далее файлов.
umask [-p] [-S] [режим]
$ umask
0022
или то же самое в символьном режиме:
$ umask -S
u=rwx,g=rx,o=rx
umask распознается и выполняется командным интерпретатором bash.
chattr изменяет атрибуты файлов на файловых системах ext3, ext4.
chattr [ -RVf ] [+-=aAcCdDeFijmPsStTux] [ -v версия ] <ФАЙЛЫ> …
-R — рекурсивно изменять атрибуты каталогов и их содержимого. Символические ссылки игнорируются;
-V — выводит расширенную информацию и версию программы;
-f — подавлять сообщения об ошибках;
-v версия — установить номер версии/генерации файла.
+-=aAcCdDeFijmPsStTux
a — только добавление к файлу;
A — не обновлять время последнего доступа (atime) к файлу;
c — сжатый файл;
C — отключение режима «Copy-on-write» для указанного файла;
d — не архивировать (отключает создание архивной копии файла командой dump);
D — синхронное обновление каталогов;
e — включает использование extent при выделении места на устройстве (атрибут не может быть отключён с помощью chattr);
F — регистронезависимый поиск в каталогах;
i — неизменяемый файл (файл защищен от изменений: не может быть удалён или переименован, к этому файлу не могут быть созданы ссылки, и никакие данные не могут быть записаны в этот файл);
j — ведение журнала данных (данные файла перед записью будут записаны в журнал ext3/ext4);
m — не сжимать;
P — каталог с вложенными файлами является иерархической структурой проекта;
s — безопасное удаление (перед удалением все содержимое файла полностью затирается «00»);
S — синхронное обновление (аналогичен опции монтирования «sync» файловой системы);
t — отключает метод tail-merging для файлов;
T — вершина иерархии каталогов;
u — неудаляемый (при удалении файла его содержимое сохраняется, это позволяет пользователю восстановить файл);
x — прямой доступ к файлам (атрибут не может быть установлен с помощью chattr).
lsattr выводит атрибуты файла расширенной файловой системы.
lsattr [ -RVadlpv ] <ФАЙЛЫ> …
-R — рекурсивно изменять атрибуты каталогов и их содержимого. Символические ссылки игнорируются;
-V — выводит расширенную информацию и версию программы;
-a — просматривает все файлы в каталоге, включая скрытые файлы (имена которых начинаются с «.»);
-d — отображает каталоги так же, как и файлы вместо того, чтобы просматривать их содержимое;
-l — отображает параметры, используя длинные имена вместо одного символа;
-p — выводит номер проекта файла;
-v — выводит номер версии/генерации файла.
getfacl выводит атрибуты файла расширенной файловой системы.
getfacl [ --aceEsRLPtpndvh ] <ФАЙЛ> …
-a — вывести только ACL файла;
-d — вывести только ACL по умолчанию;
-c — не показывать заголовок (имя файла);
-e — показывать все эффективные права;
-E — не показывать эффективные права;
-s — пропускать файлы, имеющие только основные записи;
-R — для подкаталогов рекурсивно;
-L — следовать по символическим ссылкам, даже если они не указаны в командной строке;
-P — не следовать по символическим ссылкам, даже если они указаны в командной строке;
-t — использовать табулированный формат вывода;
-p — не удалять ведущие «/» из пути файла;
-n — показывать числовые значения пользователя/группы.
1: # file: somedir/ 2: # owner: lisa 3: # group: staff 4: # flags: -s- 5: user::rwx 6: user:joe:rwx #effective:r-x 7: group::rwx #effective:r-x 8: group:cool:r-x 9: mask:r-x 10: other:r-x 11: default:user::rwx 12: default:user:joe:rwx #effective:r-x 13: default:group::r-x 14: default:mask:r-x 15: default:oter:---
setfacl изменяет ACL к файлам или каталогам. В командной строке за последовательностью команд идет последовательность файлов (за которой, в свою очередь, также может идти последовательность команд и так далее).
setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] <ФАЙЛ> …
setfacl --restore=file
-b — удалить все разрешенные записи ACL;
-k — удалить ACL по умолчанию;
-n — не пересчитывать маску эффективных прав, обычно setfacl пересчитывает маску (кроме случая явного задания маски) для того, чтобы включить ее в максимальный набор прав доступа элементов, на которые воздействует маска (для всех групп и отдельных пользователей);
-d — применить ACL по умолчанию;
-R — для подкаталогов рекурсивно;
-L — переходить по символическим ссылкам на каталоги (имеет смысл только в сочетании с -R);
-P — не переходить по символическим ссылкам на каталоги (имеет смысл только в сочетании с -R);
-L — следовать по символическим ссылкам, даже если они не указаны в командной строке;
-P — не следовать по символическим ссылкам, даже если они указаны в командной строке;
--mask — пересчитать маску эффективных прав;
-m — изменить текущий ACL для файла;
-M — прочитать записи ACL для модификации из файла;
-x — удалить записи из ACL файла;
-X — прочитать записи ACL для удаления из файла;
--restore=file — восстановить резервную копию прав доступа, созданную командой getfacl –R или ей подобной. Все права доступа дерева каталогов восстанавливаются, используя этот механизм. В случае если вводимые данные содержат элементы для владельца или группы-владельца, и команда setfacl выполняется пользователем с именем root, то владелец и группа-владелец всех файлов также восстанавливаются. Эта опция не может использоваться совместно с другими опциями за исключением опции --test;
--set=acl — установить ACL для файла, заменив текущий ACL;
--set-file=file — прочитать записи ACL для установления из файла;
--test — режим тестирования (ACL не изменяются).
--set, -m и -x должны быть перечислены записи ACL в командной строке. Элементы ACL разделяются одинарными кавычками.
-set-file, -M и -X команда setfacl принимает множество элементов в формате вывода команды getfacl. В строке обычно содержится не больше одного элемента ACL.
setfacl использует следующие форматы элементов ACL:
[d[efault]:] [u[ser]:]uid [:perms]
[d[efault]:] g[roup]:gid [:perms]
[d[efault]:] m[ask][:] [:perms]
[d[efault]:] o[ther][:] [:perms]
setfacl создает права доступа, используя уже существующие, согласно следующим условиям:
test.txt, принадлежащего пользователю liza и группе docs, так, чтобы:
$Установить разрешения (от пользователя liza):ls -l test.txt-rw-r-r-- 1 liza docs 8 янв 22 15:54 test.txt $getfacl test.txt# file: test.txt # owner: liza # group: docs user::rw- group::r-- other::r--
$Просмотреть разрешения (от пользователя liza):setfacl -m u:ivan:rw- test.txt$setfacl -m u:misha:--- test.txt
$ getfacl test.txt
# file: test.txt
# owner: liza
# group: docs
user::rw-
user:ivan:rw-
user:misha:---
group::r--
mask::rw-
other::r--
Примечание
ls -l указывает на использование ACL:
$ ls -l test.txt
-rw-rw-r--+ 1 liza docs 8 янв 22 15:54 test.txt
/etc/net для хранения конфигурационных файлов. В дистрибутивах ALT она заменяет или дополняет стандартные механизмы, такие как ifupdown, и предоставляет более гибкую модель настройки интерфейсов, VLAN, мостов, туннелей и других сетевых сущностей.
/etc/net/ содержит конфигурацию сетевых интерфейсов в декларативном виде, где каждый интерфейс описывается через набор параметров.
Важно
ifaces — каталог с подкаталогами для каждого сетевого интерфейса:
default — базовые настройки, общие для всех интерфейсов (не привязаны к конкретному устройству);
enp0s3 — настройки для интерфейса enp0s3;
lo — настройки для локального интерфейса (loopback);
unknown — шаблоны для интерфейсов, для которых нет отдельного каталога.
Примечание
options.d — каталог с общими настройками etcnet. Файлы (например, 00-default) читаются в алфавитном порядке. Позволяют задать глобальные параметры;
scripts — каталог с пользовательскими скриптами, которые выполняются при поднятии или остановке интерфейсов;
sysctl.conf — файл с параметрами ядра (sysctl), применяемыми после активации интерфейсов.
/etc/net/ifaces/<название интерфейса>.
options — основные параметры интерфейса;
ipv4address — IP-адрес и маска сети;
ipv4route — маршрут по умолчанию;
resolv.conf — DNS-серверы и домены.
options для получения настроек сети по DHCP (если в сети развернут DHCP-сервер):
BOOTPROTO=dhcp TYPE=eth NM_CONTROLLED=no DISABLED=no CONFIG_WIRELESS=no CONFIG_IPV4=yes SYSTEMD_CONTROLLED=no ONBOOT=yes CONFIG_IPV6=noгде:
BOOTPROTO — способ получения IP-адреса:
static — статический адрес (из файла ipv4address);
dhcp — автоматически через DHCP;
ipv4ll — адрес link-local из диапазона 169.254.0.0/16.
TYPE — тип соединения:
eth — Ethernet (проводное);
bri — Ethernet-мост (bridge);
bond — агрегация (объединение интерфейсов);
vlan — VLAN-интерфейс.
NM_CONTROLLED — управляется ли интерфейс NetworkManager (yes/no);
DISABLED — отключен ли интерфейс (yes/no);
CONFIG_WIRELESS — беспроводной интерфейс (yes/no);
CONFIG_IPV4 — включена ли поддержка IPv4 (yes/no);
SYSTEMD_CONTROLLED — управляется ли интерфейс systemd-networkd (yes/no);
ONBOOT — активировать при загрузке (yes/no);
CONFIG_IPV6 — включена ли поддержка IPv6 (yes/no).
options сетевой подсистеме.
Таблица 85.1. Сетевая подсистема и параметры файла options
|
Сетевая подсистема
|
DISABLED
|
NM_CONTROLLED
|
SYSTEMD_CONTROLLED
|
BOOTPROTO
|
|---|---|---|---|---|
|
Etcnet
|
no
|
no
|
no
|
static (файл
ipv4address должен существовать) или dhcp
|
|
NetworkManager (etcnet)
|
yes
|
yes
|
no
|
static (файл
ipv4address должен существовать) или dhcp
|
|
NetworkManager (native)
|
yes
|
yes
|
no
|
static (файл
ipv4address должен быть удалён)
|
|
systemd-networkd
|
yes
|
no
|
yes
|
|
|
Интерфейс не контролируется
|
yes
|
no
|
no
|
любое значение
|
$ ip link show
Показывает все интерфейсы, их состояние (UP/DOWN), MAC-адреса.
$ ip address
Подробный вывод: IPv4, IPv6, маски, интерфейсы. Пример вывода:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:19:a1:7d brd ff:ff:ff:ff:ff:ff
inet 192.168.0.134/24 brd 192.168.0.255 scope global dynamic noprefixroute enp0s3
valid_lft 22677sec preferred_lft 19527sec
inet6 fd2d:9ff1:91a6:0:a00:27ff:feb3:93a9/64 scope global dynamic mngtmpaddr proto kernel_ra
valid_lft 4294186711sec preferred_lft 4294186711sec
где:
enp0s3 — имя сетевого интерфейса;
08:00:27:19:a1:7d — MAC-адрес сетевой карты;
192.168.0.134/24 — IPv4-адрес и маска.
fd2d:9ff1:91a6:0:a00:27ff:feb3:93a9/64 — IPv6-адрес и маска.
$ ip -br addr
Это сокращённая версия ip addr, которая выводит краткую информацию о всех интерфейсах: имя, состояние, IP-адрес и маску. Пример вывода:
lo UNKNOWN 127.0.0.1/8 enp0s3 UNKNOWN 192.168.0.60/24 enp0s8 UP enp0s9 UP enp0s10 UP bond0 UP 192.168.0.62/24 br0 UP 192.168.0.61/24UP — интерфейс активен; DOWN — выключен; UNKNOWN — состояние не определено.
$ ip address show enp0s3
Пример вывода:
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:19:a1:7d brd ff:ff:ff:ff:ff:ff
inet 192.168.0.134/24 brd 192.168.0.255 scope global enp0s3
valid_lft forever preferred_lft forever
$ ip route
Пример вывода:
default via 192.168.0.10 dev enp0s3 proto static metric 100 192.168.0.0/24 dev enp0s3 proto kernel scope link src 192.168.0.134 metric 100Показывает маршруты, включая шлюз по умолчанию.
$ ip neigh show
Пример вывода:
192.168.0.30 dev enp0s3 lladdr 00:11:32:3b:78:10 STALE 192.168.0.32 dev enp0s3 lladdr 20:1a:06:ce:f0:01 REACHABLE 192.168.0.2 dev enp0s3 lladdr 6c:3b:6b:df:79:94 STALEОтображает соответствие IP → MAC в локальной сети.
$ ip -s link
Показывает количество переданных/принятых пакетов, ошибки, сброшенные пакеты.
#Пример:ifup <имя_интерфейса># включить указанный интерфейс #ifdown <имя_интерфейса># выключить указанный интерфейс
#ifup enp0s3#ifdown br0
Примечание
network состояние интерфейсов восстанавливается в соответствии с конфигурацией.
ONBOOT в файле options, расположенного в каталоге интерфейса /etc/net/ifaces/<название интерфейса>/.
# ifdown br0 && ifdown bond0 && ifdown enp0s8
# ifup enp0s8 && ifup br0 && ifup bond0
Примечание
/etc/net/ifaces/.
#Аналогip link set enp0s3 up#ip link set enp0s3 down
ifup/ifdown.
#ip addr add 192.168.0.100/24 dev enp0s3#ip addr del 192.168.0.100/24 dev enp0s3
#ip route add default via 192.168.0.1 dev enp0s3#ip route add 10.0.0.0/8 via 192.168.0.1#ip route del default
# systemctl restart network
Применяет настройки из /etc/net/ifaces/.
network поддерживает следующие команды:
BOOTPROTO=static в файле options.
ipv4address с IP-адресом:
# echo "192.168.0.60/24" > /etc/net/ifaces/enp0s3/ipv4address
ipv4route с маршрутом по умолчанию:
# echo "default via 192.168.0.1" > /etc/net/ifaces/enp0s3/ipv4route
resolv.conf:
#echo "nameserver 192.168.0.1" > /etc/net/ifaces/enp0s3/resolv.conf#echo "nameserver 8.8.8.8" >> /etc/net/ifaces/enp0s3/resolv.conf
Важно
# systemctl restart network
$Пример вывода ip addr show enp0s3:ip addr show enp0s3$ip route
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:19:a1:7d brd ff:ff:ff:ff:ff:ff
inet 192.168.0.60/24 brd 192.168.0.255 scope global dynamic noprefixroute enp0s3
valid_lft 22677sec preferred_lft 19527sec
Пример вывода ip route:
default via 192.168.0.1 dev enp0s3 192.168.0.0/24 dev enp0s3 proto kernel scope link src 192.168.0.60
options в каталоге /etc/net/ifaces/enp0s8/:
# cat <<EOF > /etc/net/ifaces/enp0s8/options
TYPE=eth
DISABLED=no
NM_CONTROLLED=no
CONFIG_IPV4=YES
EOF
# rm -f /etc/net/ifaces/enp0s8/{i,r}*
Примечание
# mkdir /etc/net/ifaces/br0
options:
# cat <<EOF > /etc/net/ifaces/br0/options
BOOTPROTO=static
CONFIG_WIRELESS=no
CONFIG_IPV4=yes
HOST='enp0s8'
ONBOOT=yes
TYPE=bri
EOF
HOST='enp0s8' — указывает, какие интерфейсы входят в мост.
Примечание
HOST в настройках моста.
HOST можно указать несколько интерфейсов:
HOST='enp0s8 enp0s9'
ipv4address с IP-адресом интерфейса br0:
# echo "192.168.0.61/24" > /etc/net/ifaces/br0/ipv4address
ipv4route с адресом шлюза:
# echo "default via 192.168.0.1" > /etc/net/ifaces/br0/ipv4route
# systemctl restart network
$ ip addr show br0
Пример вывода:
8: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 08:00:27:3f:57:63 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.61/24 scope global br0
valid_lft forever preferred_lft forever
$ ip addr
Пример вывода:
…
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UNKNOWN group default qlen 1000
link/ether 08:00:27:3f:57:63 brd ff:ff:ff:ff:ff:ff
8: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 08:00:27:3f:57:63 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.61/24 scope global br0
valid_lft forever preferred_lft forever
…
Примечание
master br0 — это означает, что он включён в мост.
Примечание
Таблица 85.2. Режимы агрегации Linux Bond
|
Режим
|
Название
|
Описание
|
Отказоустойчивость
|
Балансировка нагрузки
|
|---|---|---|---|---|
|
balance-rr или mode=0
|
Round-robin
|
Режим циклического выбора активного интерфейса для трафика. Пакеты последовательно передаются и принимаются через каждый интерфейс один за другим. Данный режим не требует применения специальных коммутаторов
|
Да
|
Да
|
|
active-backup или mode=1
|
Active Backup
|
В этом режиме активен только один интерфейс, остальные находятся в режиме горячей замены. Если активный интерфейс выходит из строя, его заменяет резервный. MAC-адрес интерфейса виден извне только на одном сетевом адаптере, что предотвращает путаницу в сетевом коммутаторе. Это самый простой режим, работает с любым оборудованием, не требует применения специальных коммутаторов
|
Да
|
Нет
|
|
balance-xor или mode=2
|
XOR
|
Один и тот же интерфейс работает с определённым получателем. Передача пакетов распределяется между интерфейсами на основе формулы ((MAC-адрес источника) XOR (MAC-адрес получателя)) % число интерфейсов. Режим не требует применения специальных коммутаторов. Этот режим обеспечивает балансировку нагрузки и отказоустойчивость
|
Да
|
Да
|
|
broadcast или mode=3
|
Широковещательный
|
Трафик идёт через все интерфейсы одновременно
|
Да
|
Нет
|
|
LACP (802.3ad) или mode=4
|
Агрегирование каналов по стандарту IEEE 802.3ad
|
В группу объединяются одинаковые по скорости и режиму интерфейсы. Все физические интерфейсы используются одновременно в соответствии со спецификацией IEEE 802.3ad. Для реализации этого режима необходима поддержка на уровне драйверов сетевых карт и коммутатор, поддерживающий стандарт IEEE 802.3ad (коммутатор требует отдельной настройки)
|
Да
|
Да
|
|
balance-tlb или mode=5
|
Адаптивная балансировка нагрузки при передаче
|
Исходящий трафик распределяется в соответствии с текущей нагрузкой (с учетом скорости) на интерфейсах (для данного режима необходима его поддержка в драйверах сетевых карт). Входящие пакеты принимаются только активным сетевым интерфейсом
|
Да
|
Да (исходящий трафик)
|
|
balance-alb или mode=6
|
Адаптивная балансировка нагрузки
|
Включает в себя балансировку исходящего трафика, плюс балансировку на приём (rlb) для IPv4 трафика и не требует применения специальных коммутаторов (балансировка на приём достигается на уровне протокола ARP, перехватом ARP ответов локальной системы и перезаписью физического адреса на адрес одного из сетевых интерфейсов, в зависимости от загрузки)
|
Да
|
Да
|
xmit_hash_policy).
Таблица 85.3. Режимы выбора каналов при организации балансировки нагрузки
|
Режим
|
Описание
|
|---|---|
|
layer2
|
Канал для отправки пакета однозначно определяется комбинацией MAC-адреса источника и MAC-адреса назначения. Трафик между определённой парой узлов всегда идёт по одному каналу. Алгоритм совместим с IEEE 802.3ad. Этот режим используется по умолчанию
|
|
layer2+3
|
Канал для отправки пакета определяется по совокупности MAC- и IP-адресов источника и назначения. Трафик между определённой парой IP-хостов всегда идёт по одному каналу (обеспечивается более равномерная балансировка трафика, особенно в случае, когда большая его часть передаётся через промежуточные маршрутизаторы). Для протоколов 3 уровня, отличных от IP, данный алгоритм равносилен layer2. Алгоритм совместим с IEEE 802.3ad
|
|
layer3+4
|
Канал для отправки пакета определяется по совокупности IP-адресов и номеров портов источника и назначения (трафик определённого узла может распределяться между несколькими каналами, но пакеты одного и того же TCP/UDP-соединения всегда передаются по одному и тому же каналу). Для фрагментированных пакетов TCP и UDP, а также для всех прочих протоколов 4 уровня, учитываются только IP-адреса. Для протоколов 3 уровня, отличных от IP, данный алгоритм равносилен layer2. Алгоритм не полностью совместим с IEEE 802.3ad
|
options для каждого интерфейса (enp0s9 и enp0s10):
#cat <<EOF > /etc/net/ifaces/enp0s9/optionsTYPE=eth DISABLED=no NM_CONTROLLED=no CONFIG_IPV4=YES EOF #cat <<EOF > /etc/net/ifaces/enp0s10/optionsTYPE=eth DISABLED=no NM_CONTROLLED=no CONFIG_IPV4=YES EOF
#rm -f /etc/net/ifaces/enp0s9/{i,r}*#rm -f /etc/net/ifaces/enp0s10/{i,r}*
# mkdir /etc/net/ifaces/bond0
options:
# cat <<EOF > /etc/net/ifaces/bond0/options
BOOTPROTO=static
CONFIG_WIRELESS=no
CONFIG_IPV4=yes
HOST='enp0s9 enp0s10'
ONBOOT=yes
TYPE=bond
BONDOPTIONS='miimon=100'
BONDMODE=1
EOF
где:
BONDMODE=1 — режим агрегации Active Backup;
HOST='enp0s9 enp0s10' — интерфейсы, входящие в объединение;
miimon=100 — интервал проверки состояния линка (100 мс).
ipv4address с IP-адресом для интерфейса bond0:
# echo "192.168.0.62/24" > /etc/net/ifaces/bond0/ipv4address
ipv4route:
# echo "default via 192.168.0.1" > /etc/net/ifaces/bond0/ipv4route
# systemctl restart network
$ cat /proc/net/bonding/bond0
Пример вывода:
Ethernet Channel Bonding Driver: v6.12.45-6.12-alt1 Bonding Mode: fault-tolerance (active-backup) Primary Slave: None Currently Active Slave: enp0s10 MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 Peer Notification Delay (ms): 0 Slave Interface: enp0s10 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 08:00:27:51:a2:b4 Slave queue ID: 0 Slave Interface: enp0s9 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 08:00:27:76:e2:b7 Slave queue ID: 0
$ ip addr show bond0
Пример вывода:
9: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 08:00:27:51:a2:b4 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.62/24 scope global bond0
valid_lft forever preferred_lft forever
$ ip addr
Пример вывода:
…
4: enp0s9: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bond0 state UP group default qlen 1000
link/ether 08:00:27:51:a2:b4 brd ff:ff:ff:ff:ff:ff permaddr 08:00:27:76:e2:b7
5: enp0s10: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bond0 state UP group default qlen 1000
link/ether 08:00:27:51:a2:b4 brd ff:ff:ff:ff:ff:ff
9: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 08:00:27:51:a2:b4 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.62/24 scope global bond0
valid_lft forever preferred_lft forever
…
Примечание
SLAVE и MASTER подтверждают корректную настройку.
Примечание
Примечание
# mkdir /etc/net/ifaces/enp0s3.100
options:
# cat <<EOF > /etc/net/ifaces/enp0s3.100/options
BOOTPROTO=static
CONFIG_WIRELESS=no
CONFIG_IPV4=yes
HOST=enp0s3
ONBOOT=yes
TYPE=vlan
VID=100
EOF
где:
HOST=enp0s3 — указывает физический интерфейс;
VID=100 — идентификатор VLAN.
ipv4address с IP-адресом для интерфейса enp0s3.100:
# echo "192.168.10.63/24" > /etc/net/ifaces/enp0s3.100/ipv4address
ipv4route с маршрутом по умолчанию для интерфейса enp0s3.100:
# echo "default via 192.168.10.1" > /etc/net/ifaces/enp0s3.100/ipv4route
# systemctl restart network
$ ip addr show enp0s3.100
Пример вывода:
12: enp0s3.100@enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 08:00:27:06:39:4d brd ff:ff:ff:ff:ff:ff
inet 192.168.10.63/24 scope global enp0s3.100
valid_lft forever preferred_lft forever
$ ip addr
Пример вывода:
…
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 …
inet 192.168.0.60/24 brd 192.168.0.255 scope global enp0s3
12: enp0s3.100@enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 …
inet 192.168.10.63/24 scope global enp0s3.100
…
Примечание
# mkdir /etc/net/ifaces/enp0s3.100.200
options:
# cat <<EOF > /etc/net/ifaces/enp0s3.100.200/options
BOOTPROTO=static
HOST=enp0s3.100
TYPE=vlan
VID=200
VLAN_REORDER_HDR=0
EOF
где:
HOST=enp0s3.100 — указывает на внешний VLAN-интерфейс;
VID=200 — внутренний (клиентский) VLAN;
VLAN_REORDER_HDR=0 — отключает переупорядочивание заголовков (важно для Q-in-Q).
ipv4address с IP-адресом для интерфейса enp0s3.100.200:
# echo "192.168.20.64/24" > /etc/net/ifaces/enp0s3.100.200/ipv4address
ipv4route с настройкой маршрута:
# echo "default via 192.168.20.1" > /etc/net/ifaces/enp0s3.100.200/ipv4route
# systemctl restart network
$ ip addr show enp0s3.100.200
Пример вывода:
16: enp0s3.100.200@enp0s3.100: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 08:00:27:06:39:4d brd ff:ff:ff:ff:ff:ff
inet 192.168.20.64/24 scope global enp0s3.100.200
valid_lft forever preferred_lft forever
$ ip addr
Пример вывода:
… 2: enp0s3: … inet 192.168.0.60/24 15: enp0s3.100@enp0s3: … inet 192.168.10.63/24 16: enp0s3.100.200@enp0s3.100: … inet 192.168.20.64/24 …
Примечание
su (shell of user), которая позволяет выполнить одну или несколько команд от лица другого пользователя. По умолчанию эта утилита выполняет команду sh от пользователя root, то есть запускает командный интерпретатор. Отличие от предыдущего способа в том, что всегда известно, кто именно запускал su, а значит, ясно, кто выполнил определённое административное действие.
su, а утилиту sudo, которая позволяет выполнять только заранее заданные команды.
Важно
su и sudo, необходимо быть членом группы wheel. Пользователь, созданный при установке системы, по умолчанию уже включён в эту группу.
control доступна только для суперпользователя (root). Для того чтобы посмотреть, что означает та или иная политика control (разрешения выполнения конкретной команды, управляемой control), надо запустить команду с ключом help:
# control su help
Запустив control без параметров, можно увидеть полный список команд, управляемых командой (facilities) вместе с их текущим состоянием и набором допустимых состояний.
su -
su без ключа, то происходит вызов командного интерпретатора с правами root. При этом значение переменных окружения, в частности $PATH, остаётся таким же, как у пользователя: в переменной $PATH не окажется каталогов /sbin, /usr/sbin, без указания полного имени будут недоступны команды route, shutdown, mkswap и другие. Более того, переменная $HOME будет указывать на каталог пользователя, все программы, запущенные в режиме суперпользователя, сохранят свои настройки с правами root в каталоге пользователя, что в дальнейшем может вызвать проблемы.
su -. В этом режиме su запустит командный интерпретатор в качестве login shell, и он будет вести себя в точности так, как если бы в системе зарегистрировался root.
id, вывод её может быть примерно следующим:
uid=1000(test) gid=1000(test) группы=1000(test),16(rpm)
Примечание
useradd[ОПЦИИ...]<ИМЯ ПОЛЬЗОВАТЕЛЯ>useradd -D[ОПЦИИ...]
-b каталог — базовый каталог для домашнего каталога новой учётной записи;
-c комментарий — текстовая строка (обычно используется для указания фамилии и мени);
-d каталог — домашний каталог новой учётной записи;
-D — показать или изменить настройки по умолчанию для useradd;
-e дата — дата устаревания новой учётной записи;
-g группа — имя или ID первичной группы новой учётной записи;
-G группы — список дополнительных групп (через запятую) новой учётной записи;
-m — создать домашний каталог пользователя;
-M — не создавать домашний каталог пользователя;
-p пароль — зашифрованный пароль новой учётной записи (не рекомендуется);
-s оболочка — регистрационная оболочка новой учётной записи (по умолчанию /bin/bash);
-u UID — пользовательский ID новой учётной записи.
useradd имеет множество параметров, которые позволяют менять её поведение по умолчанию. Например, можно принудительно указать, какой будет UID или какой группе будет принадлежать пользователь:
# useradd -u 1500 -G usershares new_user
passwd и утилит shadow.
passwd [ОПЦИИ...] [ИМЯ ПОЛЬЗОВАТЕЛЯ]
-d, --delete — удалить пароль для указанной записи;
-f, --force — форсировать операцию;
-k, --keep-tokens — сохранить не устаревшие пароли;
-l, --lock — блокировать указанную запись;
--stdin — прочитать новые пароли из стандартного ввода;
-S, --status — дать отчет о статусе пароля в указанной записи;
-u, --unlock — разблокировать указанную запись;
-?, --help — показать справку и выйти;
--usage — дать короткую справку по использованию;
-V, --version — показать версию программы и выйти.
passwd заканчивает работу с кодом выхода 0. Код выхода 1 означает, что произошла ошибка. Текстовое описание ошибки выводится на стандартный поток ошибок.
useradd и passwd:
#useraddtest1 #passwdtest1 passwd: updating all authentication tokens for user test1. You can now choose the new password or passphrase. A valid password should be a mix of upper and lower case letters, digits, and other characters. You can use a password containing at least 7 characters from all of these classes, or a password containing at least 8 characters from just 3 of these 4 classes. An upper case letter that begins the password and a digit that ends it do not count towards the number of character classes used. A passphrase should be of at least 3 words, 11 to 72 characters long, and contain enough different characters. Alternatively, if no one else can see your terminal now, you can pick this as your password: "Burst*texas$Flow". Enter new password: Weak password: too short. Re-type new password: passwd: all authentication tokens updated successfully.
passwd — но если он попытается поставить слабый пароль, система откажет ему (в отличие от root) в изменении.
/etc/passwdqc.conf.
passwdqc.conf состоит из 0 или более строк следующего формата:
опция=значениеПустые строки и строки, начинающиеся со знака решетка («#»), игнорируются. Символы пробела между опцией и значением не допускаются.
min=N0,N1,N2,N3,N4 (min=disabled,24,11,8,7) — минимально допустимая длина пароля.
Примечание
max=N (max=72) — максимально допустимая длина пароля. Эта опция может быть использована для того, чтобы запретить пользователям устанавливать пароли, которые могут быть слишком длинными для некоторых системных служб. Значение 8 обрабатывается особым образом: пароли длиннее 8 символов, не отклоняются, а обрезаются до 8 символов для проверки надежности (пользователь при этом предупреждается).
passphrase=N (passphrase=3) — число слов, необходимых для ключевой фразы (значение 0 отключает поддержку парольных фраз).
match=N (match=4) — длина общей подстроки, необходимой для вывода, что пароль хотя бы частично основан на информации, найденной в символьной строке (значение 0 отключает поиск подстроки). Если найдена слабая подстрока пароль не будет отклонен; вместо этого он будет подвергаться обычным требованиям к прочности при удалении слабой подстроки. Поиск подстроки нечувствителен к регистру и может обнаружить и удалить общую подстроку, написанную в обратном направлении.
similar=permit|deny (similar=deny) — параметр similar=permit разрешает задать новый пароль, если он похож на старый (параметр similar=deny — запрещает). Пароли считаются похожими, если есть достаточно длинная общая подстрока, и при этом новый пароль с частично удаленной подстрокой будет слабым.
random=N[,only] (random=47) — размер случайно сгенерированных парольных фраз в битах (от 26 до 81) или 0, чтобы отключить эту функцию. Любая парольная фраза, которая содержит предложенную случайно сгенерированную строку, будет разрешена вне зависимости от других возможных ограничений. Значение only используется для запрета выбранных пользователем паролей.
enforce=none|users|everyone (enforce=users) — параметр enforce=users задает ограничение задания паролей в passwd на пользователей без полномочий root. Параметр enforce=everyone задает ограничение задания паролей в passwd и на пользователей, и на суперпользователя root. При значении none модуль PAM будет только предупреждать о слабых паролях.
retry=N (retry=3) — количество запросов нового пароля, если пользователь с первого раза не сможет ввести достаточно надежный пароль и повторить его ввод.
/etc/passwdqc.conf:
min=8,7,4,4,4 enforce=everyoneВ указанном примере пользователям, включая суперпользователя root, будет невозможно задать пароли:
chage.
Примечание
# apt-get install shadow-change
chage изменяет количество дней между сменой пароля и датой последнего изменения пароля.
chage [опции] логин
-d, --lastday LAST_DAY — установить последний день смены пароля в LAST_DAY на день (число дней с 1 января 1970). Дата также может быть указана в формате ГГГГ-ММ-ДД;
-E, -expiredate EXPIRE_DAYS — установить дату окончания действия учётной записи в EXPIRE_DAYS (число дней с 1 января 1970) Дата также может быть указана в формате ГГГГ-ММ-ДД. Значение -1 удаляет дату окончания действия учётной записи;
-I, --inactive INACTIVE — используется для задания количества дней «неактивности», то есть дней, когда пользователь вообще не входил в систему, после которых его учетная запись будет заблокирована. Пользователь, чья учетная запись заблокирована, должен обратиться к системному администратору, прежде чем снова сможет использовать систему. Значение -1 отключает этот режим;
-l, --list — просмотр информации о «возрасте» учётной записи пользователя;
-m, --mindays MIN_DAYS — установить минимальное число дней перед сменой пароля. Значение 0 в этом поле обозначает, что пользователь может изменять свой пароль, когда угодно;
-M, --maxdays MAX_DAYS — установить максимальное число дней перед сменой пароля. Когда сумма MAX_DAYS и LAST_DAY меньше, чем текущий день, у пользователя будет запрошен новый пароль до начала работы в системе. Эта операция может предваряться предупреждением (параметр -W). При установке значения -1, проверка действительности пароля не будет выполняться;
-W, --warndays WARN_DAYS — установить число дней до истечения срока действия пароля, начиная с которых пользователю будет выдаваться предупреждение о необходимости смены пароля.
# chage -M 5 test
# chage -l test
Последний раз пароль был изменён : мар 13, 2025
Срок действия пароля истекает : мар 18, 2025
Пароль будет деактивирован через : никогда
Срок действия учётной записи истекает : никогда
Минимальное количество дней между сменой пароля : -1
Максимальное количество дней между сменой пароля : 5
Количество дней с предупреждением перед деактивацией пароля : -1
Примечание
PASS_MAX_DAYS в файле /etc/login.defs.
Предупреждение
Предупреждение
/etc/security/opasswd, в который пользователи должны иметь доступ на чтение и запись. При этом они могут читать хэши паролей остальных пользователей. Не рекомендуется использовать на многопользовательских системах.
/etc/security/opasswd и дайте права на запись пользователям:
#install -Dm0660 -gpw_users /dev/null /etc/security/opasswd#chgrp pw_users /etc/security#chmod g+w /etc/security
/etc/pam.d/system-auth-local-only таким образом, чтобы он включал модуль pam_pwhistory после первого появления строки с паролем:
password required pam_passwdqc.so config=/etc/passwdqc.conf password required pam_pwhistory.so debug use_authtok remember=10 retry=3
/etc/security/opasswd будут храниться последние 10 паролей пользователя (содержит хэши паролей всех учетных записей пользователей) и при попытке использования пароля из этого списка будет выведена ошибка:
Password has been already used. Choose another.
enforce_for_root:
password required pam_pwhistory.so use_authtok enforce_for_root remember=10 retry=3
usermod:
# usermod -G audio,rpm,test1 test1
# usermod -l test2 test1
usermod -L test2 и usermod -U test2 соответственно временно блокируют возможность входа в систему пользователю test2 и возвращают всё на свои места.
chpasswd. На стандартный вход ей следует подавать список, каждая строка которого будет выглядеть как имя:пароль.
userdel.
userdel test2 удалит пользователя test2 из системы. Если будет дополнительно задан параметр -r, то будет уничтожен и домашний каталог пользователя. Нельзя удалить пользователя, если в данный момент он еще работает в системе.
pstree.
/etc/inittab, откуда вызываются другие программы и скрипты на определенном этапе запуска.
service и chkconfig продолжат работать в мире systemd практически без изменений. Тем не менее, в этой таблице показано как выполнить те же действия с помощью встроенных утилит systemctl.
Таблица 88.1. Команды управления службами
|
Команды Sysvinit
|
Команды Systemd
|
Примечания
|
|---|---|---|
|
service frobozz start
|
systemctl start frobozz.service
|
Используется для запуска службы (не перезагружает постоянные)
|
|
service frobozz stop
|
systemctl stop frobozz.service
|
Используется для остановки службы (не перезагружает постоянные)
|
|
service frobozz restart
|
systemctl restart frobozz.service
|
Используется для остановки и последующего запуска службы
|
|
service frobozz reload
|
systemctl reload frobozz.service
|
Если поддерживается, перезагружает файлы конфигурации без прерывания незаконченных операций
|
|
service frobozz condrestart
|
systemctl condrestart frobozz.service
|
Перезапускает службу, если она уже работает
|
|
service frobozz status
|
systemctl status frobozz.service
|
Сообщает, запущена ли уже служба
|
|
ls /etc/rc.d/init.d/
|
systemctl list-unit-files --type=service (preferred)
ls /lib/systemd/system/*.service /etc/systemd/system/*.service
|
Используется для отображения списка служб, которые можно запустить или остановить.
Используется для отображения списка всех служб.
|
|
chkconfig frobozz on
|
systemctl enable frobozz.service
|
Включает службу во время следующей перезагрузки, или любой другой триггер
|
|
chkconfig frobozz off
|
systemctl disable frobozz.service
|
Выключает службу во время следующей перезагрузки, или любой другой триггер
|
|
chkconfig frobozz
|
systemctl is-enabled frobozz.service
|
Используется для проверки, сконфигурирована ли служба для запуска в текущем окружении
|
|
chkconfig --list
|
systemctl list-unit-files --type=service(preferred)
ls /etc/systemd/system/*.wants/
|
Выводит таблицу служб. В ней видно, на каких уровнях загрузки они (не)запускаются
|
|
chkconfig frobozz --list
|
ls /etc/systemd/system/*.wants/frobozz.service
|
Используется, для отображения на каких уровнях служба (не)запускается
|
|
chkconfig frobozz --add
|
systemctl daemon-reload
|
Используется, когда вы создаете новую службу или модифицируете любую конфигурацию
|
/var/log/journal, что исключает возможность просмотра содержимого данных файлов стандартными утилитами обработки текстовых данных. Для просмотра логов используется утилита journalctl.
journalctl с разными ключами:
journalctl -b — покажет сообщения только с текущей загрузки;
journalctl -f — покажет только последние сообщения и продолжит печатать новые записи при добавлении их в журнал.
journalctl _PID=1 — покажет сообщения первого процесса (init).
man journalctl.
/var/log/).
/etc/systemd/journald.conf. Справку по этому файлу можно получить, выполнив команду man journald.conf.
# journalctl --disk-usage
--vacuum-size. Например, удалить журналы, оставив только последние 200 Мб:
# journalctl --vacuum-size=200M
--vacuum-time. Например, удалить журналы, оставив только журналы за последний месяц:
# journalctl --vacuum-time=1months
Примечание
--vacuum-size= оказывает лишь косвенное влияние на вывод, показанный --disk-usage, поскольку последний включает активные файлы журнала, в то время как операция очистки работает только с архивными файлами журнала. Аналогично, --vacuum-time= может фактически не уменьшить количество файлов журнала ниже указанного числа, так как не удалит активные файлы журнала.
/etc/systemd/journald.conf, например:
SystemMaxUse=1G
SystemMaxFileSize=200M
MaxFileSec=20day
MaxRetentionSec=1months
Примечание
/etc/systemd/journald.conf необходимо перезапустить службу systemd-journald:
# systemctl restart systemd-journald
/var/log/ — не текстовые, они являются неполноценными журналами и представляют собой «свалку событий» для служб авторизации и учёта. Текстовую информацию о входе пользователей в систему и выходе оттуда можно получить по команде last, а узнать о тех, кто в данный момент пользуется системой, помогут команды w и who.
ps, top, vmstat), сведения об использовании дискового пространства (du, df) и сведения о работе сетевых устройств (netstat).
man (сокращение от manual). Каждая страница руководства посвящена одному объекту системы. Для того чтобы прочесть страницу руководства по программе, необходимо набрать man название_программы. К примеру, если вы хотите узнать, какие опции есть у команды date, вы можете ввести команду:
$mandate
man осуществляется командой apropos. Если вы точно не знаете, как называется необходимая вам программа, то поиск осуществляется по ключевому слову, к примеру, apropos date или при помощи ввода слова, обозначающего нужное действие, после команды man -k (например, man -k copy). Слово, характеризующее желаемое для вас действие, можно вводить и на русском языке. При наличии русского перевода страниц руководства man результаты поиска будут выведены на запрашиваемом языке.
man запускает программу постраничного просмотра текстов. Страницы перелистывают пробелом, для выхода из режима чтения описания команд man необходимо нажать на клавиатуре q. Команда man man выдаёт справку по пользованию самой командой man.
man по умолчанию будет отображать их на русском языке.
info info. Команда info, введённая без параметров, предлагает пользователю список всех документов info, установленных в системе.
/usr/share/doc — место хранения разнообразной документации.
/usr/share/doc/имя_пакета. Например, документация к пакету file-5.45 находится в /usr/share/doc/file-5.45. Для получения полного списка файлов документации, относящихся к пакету, воспользуйтесь командой rpm -qd имя_установленного_пакета.
README, FAQ, TODO, СhangeLog и другие. В файле README содержится основная информация о программе — имя и контактные данные авторов, назначение, полезные советы и пр. FAQ содержит ответы на часто задаваемые вопросы; этот файл стоит прочитать в первую очередь, если у вас возникли проблемы или вопросы по использованию программы, поскольку большинство проблем и сложностей типичны, вполне вероятно, что в FAQ вы тут же найдёте готовое решение. В файле TODO записаны планы разработчиков на реализацию той или иной функциональности. В файле СhangeLog записана история изменений в программе от версии к версии.
rpm -qi имя_установленного_пакета. В информационном заголовке соответствующего пакета, среди прочей информации, будет выведена искомая ссылка.
Содержание
Примечание
cryptsetup. Ниже описаны лишь некоторые возможности утилиты cryptsetup. Для получения более подробной информации используйте команду man cryptsetup.
cryptsetup).
Примечание
# cryptsetup luksDump /dev/sdb1
LUKS header information
Version: 2
Epoch: 10
Metadata area: 16384 [bytes]
Keyslots area: 16744448 [bytes]
UUID: 87a00f6b-be95-ba47-af78-f38bd4fbcaed
Label: (no label)
Subsystem: (no subsystem)
Flags: (no flags)
Data segments:
0: crypt
offset: 16777216 [bytes]
length: (whole device)
cipher: aes-xts-plain64
sector: 512 [bytes]
Keyslots:
0: luks2
Key: 256 bits
Priority: normal
Cipher: aes-xts-plain64
Cipher key: 256 bits
PBKDF: pbkdf2
Hash: sha256
Iterations: 10727120
Salt: 50 a2 ab a9 6e dc cd e7 b2 0d 60 82 11 7b 62 af
1a 7a 3b 14 0b 26 64 9b fc 81 da f2 14 3b 62 69
AF stripes: 4000
AF hash: sha256
Area offset:163840 [bytes]
Area length:131072 [bytes]
Digest ID: 0
6: luks2
Key: 256 bits
Priority: normal
Cipher: aes-xts-plain64
Cipher key: 256 bits
PBKDF: argon2id
Time cost: 4
Memory: 1000100
Threads: 2
Salt: 45 1a 1e e4 c1 73 ee c8 ae 30 e1 91 55 93 7a 26
0a 11 43 c7 c3 56 72 1f 7f 4b ec 5f df fa d3 7f
AF stripes: 4000
AF hash: sha256
Area offset:32768 [bytes]
Area length:131072 [bytes]
Digest ID: 0
Tokens:
Digests:
0: pbkdf2
Hash: sha256
Iterations: 619725
Salt: 6b 33 83 b5 9a 89 5c 0e 5f ad e2 f2 bc 21 9a 24
a7 46 b0 50 72 94 64 92 7e 67 39 69 cc f8 41 f2
Digest: 65 7c fb 0b fe 73 6a 95 72 03 26 2b dd 3f 60 34
81 73 ac 1a 1e 22 3d cc 2b f2 69 78 2a 7c 29 6d
где /dev/sdb1 — шифрованный раздел.
Примечание
# cryptsetup isLuks -v /dev/sdb1
Команда выполнена успешно.
Если команда завершилась успешно, раздел использует LUKS.
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:17 0 2G 0 part [SWAP]
├─sda2 8:18 0 512M 0 part /boot/efi
└─sda3 8:19 0 38G 0 part /
sdb 8:16 0 18G 0 disk
└─sdb1 8:17 0 18G 0 part
└─luks-87a00f6b-be95-ba47-af78-f38bd4fbcaed 253:0 0 18G 0 crypt /home
sr0 11:0 1 1024M 0 rom
cryptsetup luksDump в разделе Keyslots будет отображен список активных слотов:
… Keyslots: 0: luks2 … 6: luks2 …
# cryptsetup open /dev/sdb1 sdb1_encrypted
Чтобы закрыть контейнер LUKS необходимо отмонтировать раздел и выполнить команду:
# cryptsetup close sdb1_encrypted
--key-file):
# cryptsetup luksAddKey /dev/sdb1
Введите любую существующую парольную фразу:
Введите новую парольную фразу для слота ключа:
Парольная фраза повторно:
Пароль будет добавлен в первый свободный слот.
--key-slot, например:
# cryptsetup luksAddKey /dev/sdb1 --key-slot 5
--key-file):
# cryptsetup luksChangeKey /dev/sdb1
Введите изменяемую парольную фразу:
Введите новую парольную фразу:
Парольная фраза повторно:
Если задан номер слота (опцией --key-slot), нужно ввести старый пароль именно для заданного слота, и замена пароля произойдёт тоже в этом слоте. Если номер слота не задан и есть свободный слот, то сначала новый пароль будет записан во временный свободный слот, а потом будет затёрт слот, содержащий старый пароль. Если свободных слотов не окажется, то новый пароль будет записан прямо в слот, ранее содержащий старый пароль.
-v:
# cryptsetup --test-passphrase -v open /dev/sdb1
Не найдено подходящего токена.
Введите парольную фразу для /dev/sdb1:
Слот ключа 0 разблокирован.
Команда выполнена успешно.
Примечание
Предупреждение
cryptsetup erase не запрашивает пароль и удаляет все ключевые слоты без подтверждения. Восстановить доступ можно только из резервной копии заголовка.
# cryptsetup luksRemoveKey /dev/sdb1
Введите удаляемую парольную фразу:
# cryptsetup luksKillSlot /dev/sdb1 5
Введите любую оставшуюся парольную фразу:
Важно
Важно
-q (тихий режим) удаление даже последнего пароля будет выполнено без каких-либо предупреждений. Если ни одного пароля не останется (то есть все слоты ключей будут пусты), дешифровать LUKS-раздел станет невозможно.
# cryptsetup luksHeaderBackup --header-backup-file luks_header.img /dev/sdb1
Примечание
# cryptsetup luksHeaderRestore --header-backup-file luks_header.img /dev/sdb1
ПРЕДУПРЕЖДЕНИЕ!
========
Устройство /dev/sdb1 уже содержит заголовок LUKS2. Замена заголовка уничтожит существующие слоты ключей.
Вы уверены? (введите «yes» заглавными буквами): YES
Предупреждение
Примечание
lsblk, чтобы узнать, нет ли на устройстве реальных данных, например, файловой системы:
# lsblk -f
В примере ниже будет использоваться устройство /dev/sdb1.
# cryptsetup luksFormat /dev/sdb1
ПРЕДУПРЕЖДЕНИЕ!
========
Данные на /dev/sdb1 будут перезаписаны без возможности восстановления.
Вы уверены? (введите «yes» заглавными буквами): YES
Введите парольную фразу для /dev/sdb1:
Парольная фраза повторно:
Предупреждение
# cryptsetup open /dev/sdb1 sdb1_encrypted
Введите парольную фразу для /dev/sdb1:
В результате выполнения данной команды появится новое блочное устройство /dev/mapper/sdb1_encrypted.
# mkfs -t ext4 /dev/mapper/sdb1_encrypted
Внутри зашифрованного контейнера будет создана файловая система ext4.
#Теперь можно использоватьmkdir /mnt/luks#mount /dev/mapper/sdb1_encrypted /mnt/luks
/mnt/luks как обычный каталог для чтения и записи зашифрованных данных.
# cryptsetup status sdb1_encrypted
/dev/mapper/sdb1_encrypted is active and is in use.
type: LUKS2
cipher: aes-xts-plain64
keysize: 512 bits
key location: keyring
device: /dev/sdb1
sector size: 512
offset: 32768 sectors
size: 20936704 sectors
mode: read/write
#umount /mnt/luks#cryptsetup close sdb1_encrypted
# mount /dev/sdb1 /mnt/luks
Password:

Предупреждение
# umount /mnt/test
# cryptsetup reencrypt --encrypt --init-only --header /home/header /dev/sdb1 sdb1_encrypted
ПРЕДУПРЕЖДЕНИЕ!
========
Файл заголовка не существует, создать?
Вы уверены? (введите «yes» заглавными буквами): YES
Введите парольную фразу для /home/header:
Парольная фраза повторно:
В результате выполнения данной команды устройство будет открыто и доступно через /dev/mapper/sdb1_encrypted для оперативного шифрования.
Примечание
/home/header содержит всю критическую метаинформацию (ключевые слоты, параметры шифрования, UUID и т.д.). Он обязателен для доступа к данным в будущем.
# mount /dev/mapper/sdb1_encrypted /mnt/test
# cryptsetup reencrypt --resume-only --header /home/header /dev/sdb1
Введите парольную фразу для /dev/sdb1:
Автоматически обнаруженное активное устройство dm «sdb1_encrypted» для устройства данных /dev/sdb1.
Выполнено, время 00м52с, 9 GiB записано, скорость 194,5 MiB/с
# cryptsetup luksDump /home/header
Должна отобразиться информация о шифровании, ключевых слотах и параметрах.
Примечание
# cp /home/header /root/luks-header-backup
Потеря заголовка сделает невозможным расшифровку данных.
#umount /mnt/test#cryptsetup close sdb1_encrypted
--header:
# cryptsetup open --header /home/header /dev/sdb1 sdb1_encrypted
Введите парольную фразу для /dev/sdb1:
iocharset);
/dev/vdс1).
# apt-get install genisoimage
/mnt/filesystem, в который будет монтироваться раздел:
# mkdir /mnt/filesystem
# mkfs.ext2 /dev/vdc1
# mkfs.ext3 /dev/vdc1
# mkfs.ext4 /dev/vdc1
# mkfs.fat -F 16 /dev/vdc1
# mkfs.fat -F 32 /dev/vdc1
# mkfs.ntfs /dev/vdc1
# mkfs.xfs /dev/vdc1
/etc:
# mkisofs -r -jcharset koi8-r -o /root/cd.iso /etc
/mnt/filesystem:
# mount /dev/vdc1 /mnt/filesystem
# echo test_content > /mnt/filesystem/test.fs
убедиться, что файл создан:
# ls -l /mnt/filesystem/test.fs
-rw-r--r--. 1 root root 13 май 23 20:10 /mnt/filesystem/test.fs
# cat /mnt/filesystem/test.fs
/mnt/filesystem/ (файл образа диска будет примонтирован в режиме «только для чтения»):
# mount -o loop,ro /root/cd.iso /mnt/filesystem/
Примечание
df:
$ df -Th | grep "^/dev"
или lsblk:
$ lsblk -f
Команда fsck позволяет узнать файловую систему раздела, который ещё не примонтирован:
# fsck -N /dev/sdc1
fsck из util-linux 2.39.2
[/sbin/fsck.xfs (1) -- /dev/sdc1] fsck.xfs /dev/sdc1



$ smbclient -L 192.168.0.147 -U%
$ smbclient -L 192.168.0.147 -Uuser_samba
Enter SAMBA\user_samba's password:
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
public Disk Public
IPC$ IPC IPC Service (4.21.9-alt1)
For_doc Disk
user_samba Disk Home Directories
SMB1 disabled -- no workgroup available
/etc/samba/sambacreds (например, командой mcedit /etc/samba/sambacreds), с содержимым:
username=имя_пользователя password=пароль
/etc/samba/sambacreds, надо установить так, чтобы файл был доступен на чтение и запись только пользователю-владелецу файла:
# chmod 600 /etc/samba/sambacreds
и принадлежать root:
# chown root: /etc/samba/sambacreds
/etc/fstab необходимо прописать, строку вида:
//СЕРВЕР/ИМЯ_РЕСУРСА /mnt/точка_монтирования cifs credentials=/путь/к/полномочиям/sambacreds 0 0Например:
//192.168.0.147/public /mnt/server_public cifs users,_netdev,x-systemd.automount,credentials=/etc/samba/sambacreds 0 0
# apt-get install nfs-server
# systemctl enable --now nfs
/etc/exports следует указать экспортируемые каталоги (каталоги, которые будет разрешено монтировать с других машин):
/mysharedir ipaddr1(rw)Например, чтобы разрешить монтировать
/home на сервере необходимо добавить в /etc/exports строку:
/home 192.168.0.0/24(no_subtree_check,rw)где 192.168.0.0/24 — разрешение экспорта для подсети 192.168.0.X; rw — разрешены чтение и запись.
$ man exports
/etc/exports необходимо выполнить команду:
# exportfs -r
# exportfs
/home 192.168.0.0/24
# mkdir /mnt/nfs
# mount -t nfs 192.168.0.131:/home /mnt/nfs
где 192.168.0.131 — IP-адрес сервера NFS; /mnt/nfs — локальный каталог, куда монтируется удалённый каталог;
/mnt/nfs:
# ls -al /mnt/nfs
Должен отобразиться список файлов каталога /home, расположенного на сервере NFS.
/etc/fstab:
192.168.0.131:/home /mnt/nfs nfs intr,soft,nolock,_netdev,x-systemd.automount 0 0
Примечание
/etc/fstab, попробуйте смонтировать вручную и убедитесь, что всё работает.
Примечание
# apt-get install vsftpd anonftp
/etc/vsftpd.conf:
local_enable=YES chroot_local_user=YES local_root=/var/ftp/
# systemctl start vsftpd.service
# netstat -ant | grep 21
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
FTP-сервер запущен и принимает соединения на 21 порту.
/var/ftp/:
# echo "vsftpd test file" > /var/ftp/test.txt


/var/ftp/, расположенного на сервере FTP:


/etc/chrony.conf:
allow all #Разрешить NTP-клиенту доступ из локальной сети pool pool.ntp.org iburst #параметр iburst используется для ускорения начальной синхронизациии перезапустить сервис командой:
# systemctl restart chronyd
# systemctl status chronyd.service

$ chronyc sources
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^? 192.168.0.131 0 10 0 - +0ns[ +0ns] +/- 0n
$ chronyc activity
200 OK
1 sources online
0 sources offline
0 sources doing burst (return to online)
0 sources doing burst (return to offline)
0 sources with unknown address
# apt-get install apache2-base
# systemctl start httpd2
Убедиться, что служба httpd2 запущена:
# systemctl status httpd2
# echo "Hello, World" >/var/www/html/index.html
http://<ip-сервера>:

$ curl http://192.168.0.199
Hello, World
Происходит обращение к серверу и получение данных по протоколу http.
auditctl — программа, управляющая поведением системы аудита и позволяющая контролировать текущее состояние системы, создавать или удалять правила;
aureport — программа, генерирующая суммарные отчёты о работе системы аудита;
ausearch — программа, позволяющая производить поиск событий в журнальных файлах;
aulast — используется для просмотра истории входов пользователей, основанной на логах аудита (auditd).
/etc/audit/auditd.conf.
.rules в каталоге /etc/audit/rules.d/. Правила будут обрабатываться в определённом порядке, основанном на их естественном порядке сортировки. Механизм правил ядра использует стратегию «первый совпавший выигрывает», поэтому порядок правил имеет значение.
ausearch и aureport. Команда auditctl позволяет настраивать правила аудита.
auditd [-f] [-l] [-n] [-s disable|enable|nochange] [-c <config_file>]
-f — не переходить в фоновый режим (для отладки). Сообщения программы будут направляться в стандартный вывод для ошибок (stderr), а не в файл;
-l — включить следование по символическим ссылкам при поиске конфигурационных файлов;
-n — не создавать дочерний процесс (для запуска из inittab или system);
-s=ENABLE_STATE — указать, должен ли auditd при старте изменять текущее значение флага ядра — enabled. Допустимые значения ENABLE_STATE: disable, enable и nochange. Значение по умолчанию enable (disable, когда auditd остановлен). Значение флага может быть изменено во время жизненного цикла auditd с помощью команды: auditctl -e;
-c — указать альтернативный каталог конфигурационного файла (по умолчанию: /etc/audit/). Этот же каталог будет передан диспетчеру.
SIGHUP — перезагрузить конфигурацию — загрузить файл конфигурации с диска. Если в файле не окажется синтаксических ошибок, внесённые в него изменения вступят в силу. При этом в журнал будет добавлена запись о событии DAEMON_CONFIG. В противном случае действия службы будут зависеть от параметров space_left_action, admin_space_left_action, disk_full_action, disk_error_action в файле auditd.conf;
SIGTERM — прекратить обработку событий аудита и завершить работу, о чем предварительно занести запись в журнал;
SIGUSR1 — произвести ротацию файлов журналов auditd. Создать новый файл журнала, перенумеровав старые файлы или удалив часть из них, в зависимости от параметра max_log_size_action;
SIGUSR2 — попытаться возобновить ведение журналов auditd (необходимо после приостановки ведения журнала);
SIGCONT — выгрузить отчёт о внутреннем состоянии auditd в /var/run/auditd.state.
/etc/audit/auditd.conf — файл конфигурации службы аудита;
/etc/audit/audit.rules — правила аудита, загружаемые при запуске службы;
/etc/audit/audit-stop.rules — правила аудита, загружаемые при остановке службы;
/etc/audit/rules.d/ — каталог, содержащий отдельные наборы правил, которые будут скомпилированы в один файл утилитой augenrules;
/etc/audit/plugins.d/ — каталог, содержащий отдельные файлы конфигурации плагинов.
audit=1. В противном случае аудит некоторых процессов будет невозможен.
/etc/audit/auditd.conf определяются параметры службы аудита. Директива состоит из ключевого слова (названия параметра), знака равенства и соответствующих ему данных (значения параметра). На одной строке может быть не больше одной директивы. Все названия и значения параметров чувствительны к регистру. Допустимые ключевые слова перечислены и описаны ниже. Каждая строка должна быть ограничена 160 символами, иначе она будет пропущена. К файлу можно добавить комментарии, начав строку с символа «#».
Таблица 94.1. Описание ключевых слов файла конфигурации auditd.conf
|
Ключ
|
Значение
|
|---|---|
local_events
|
Ключевое слово yes/no указывающее, следует ли включать запись локальных событий (значение по умолчанию — yes). В случае если необходимо записывать только сообщения из сети, следует установить значение — no. Этот параметр полезен, если демон аудита работает в контейнере. Данный параметр может быть установлен только один раз при запуске аудита. Перезагрузка файла конфигурации никак на него не влияет
|
log_file
|
Полное имя файла, в который следует записывать журнал
|
write_logs
|
Ключевое слово yes/no, указывающее следует ли записывать журналы (значение по умолчанию — yes)
|
log_format
|
Оформление данных в журнале. Допустимы два значения: raw и enriched. При указании RAW, данные будут записываться в том виде, в котором они получаются от ядра. Значение ENRICHED разрешает информацию (вместо идентификатора, будет указано значение): идентификатор пользователя (uid), идентификатор группы (gid), системный вызов (syscall), архитектуру и адрес сокета перед записью события на диск. Это помогает осмыслить события, созданные в одной системе, но сообщенные/проанализированные в другой системе. Значение NOLOG устарело, вместо него следует установить параметр
write_logs в значение no
|
log_group
|
Указывает группу, на которую распространяются права на файлы журнала (по умолчанию — root). Можно использовать либо идентификатор, либо имя группы
|
priority_boost
|
Неотрицательное число, определяющее повышение приоритета выполнения службы аудита. Значение по умолчанию — 4. Для того чтобы не изменять приоритет, следует указать — 0
|
flush
|
Стратегия работы с дисковым буфером. Допустимые значения:
|
freq
|
Максимальное число записей журнала, которые могут храниться в буфере. При достижении этого числа производится запись буферизованных данных на диск. Данный параметр допустим только в том случае, когда
flush имеет значение incremental или incremental_async
|
num_logs
|
Максимальное количество файлов журналов. Используется в том случае, если параметр
max_log_file_action имеет значение rotate. Если указано число меньше двух, при достижении ограничения на размер файла он обнуляется. Значение параметра не должно превышать 999. Значение по умолчанию — 0 (то есть ротация фалов не происходит). При указании большого числа может потребоваться увеличить ограничение на количество ожидающих запросов (в файле /etc/audit/audit.rules). Если настроена ротация журналов, демон проверяет наличие лишних журналов и удаляет их, чтобы освободить место на диске. Проверка выполняется только при запуске и при проверке изменения конфигурации
|
name_format
|
Контролирует, как имена узлов компьютеров вставляются в поток событий аудита. Допустимые значения:
|
name
|
Строка, определенная администратором, которая идентифицирует компьютер, если в параметре
name_format указано значение user
|
max_log_file
|
Ограничение на размер файла журнала в мегабайтах. Действие, выполняемое при достижении размера файла указанного значения, можно настроить с помощью параметра
max_log_file_action
|
max_log_file_action
|
Действие, предпринимаемое при достижении размером файла журнала максимального значения. Допустимые значения:
|
verify_email
|
Определяет, проверяется ли адрес электронной почты, указанный в параметре
action_mail_acct, на предмет возможности разрешения доменного имени. Этот параметр должен быть указан до параметра action_mail_acct, иначе будет использовано значение по молчанию — yes
|
action_mail_acct
|
Адрес электронной почты. Значение по умолчанию — root. Если адрес не локальный по отношению к данной системе, необходимо чтобы в ней был настроен механизм отправки почты. В частности, требуется наличие программы
/usr/lib/sendmail
|
space_left
|
Минимум свободного пространства в мегабайтах, при достижении которого должно выполняться действие, определяемое параметром
space_left_action
|
space_left_action
|
Действие, предпринимаемое при достижении объемом свободного пространства на диске указанного минимума. Допустимые значения:
|
admin_space_left
|
Критический минимум свободного пространства в мегабайтах, при достижении которого должно выполняться действие, определяемое параметром
admin_space_left_action. Данное действие следует рассматривать как последнюю меру, предпринимаемую перед тем, как закончится место на диске. Значение настоящего параметра должно быть меньше значения space_left
|
admin_space_left_action
|
Действие, предпринимаемое при достижении объёмом свободного пространства на диске указанного критического минимума. Допустимые значения — ignore, syslog, rotate, email, exec, suspend, single и halt. Описание данных значений см. в описании параметра
space_left_action
|
disk_full_action
|
Действие, предпринимаемое при обнаружении отсутствия свободного пространства на диске. Допустимые значения — ignore, syslog, rotate, exec, suspend, single и halt. Описание данных значений см. в описании параметра
space_left_action
|
disk_error_action
|
Действие, предпринимаемое при возникновении ошибки в работе с диском. Допустимые значения — ignore, syslog, exec, suspend, single и halt. Описание данных значений см. в описании параметра
space_left_action
|
tcp_listen_port
|
Числовое значение в диапазоне 1..65535, при указании которого служба аудита будет прослушивать соответствующий TCP-порт для аудита удаленных систем. Демон аудита может быть связан с tcp_wrappers, чтобы контролировать, какие машины могут подключаться. В этом случае можно добавить запись в hosts.allow и отказать в соединении. Если решение развернуто в ОС на основе systemd может потребоваться изменить параметр After
|
tcp_listen_queue
|
Количество разрешенных ожидающих подключений (запрошенных, но не принятых). Значение по умолчанию — 5. Установка слишком маленького значения может привести к отклонению соединений при одновременном запуске нескольких хостов (например, после сбоя питания)
|
tcp_max_per_addr
|
Количество одновременных подключений с одного IP-адреса. Значение по умолчанию — 1, максимальное значение — 1024. Установка слишком большого значения может привести к атаке типа «отказ в обслуживании» при ведении журнала сервером. Значение по умолчанию подходит в большинстве случаев
|
use_libwrap
|
Следует ли использовать tcp_wrappers для распознавания попыток подключения с разрешенных компьютеров. Допустимые значения yes или no. Значение по умолчанию — yes
|
tcp_client_ports
|
Порты, с которых можно принимать соединение. Значением параметра может быть либо число, либо два числа, разделенные тире (пробелы не допускаются). Если порт не указан, соединения принимаются с любого порта. Допустимые значения 1..65535. Например, для указания клиенту использовать привилегированный порт, следует указать значение 1-1023 для этого параметра, а также установить опцию
local_port в файле audisp-remote.conf. Проверка того, что клиенты отправляют сообщения с привилегированного порта, это функция безопасности, предотвращающая атаки с использованием инъекций
|
tcp_client_max_idle
|
Количество секунд, в течение которых клиент может бездействовать (то есть, какое время от него нет никаких данных). Используется для закрытия неактивных соединений, если на компьютере клиенте возникла проблема, из-за которой он не может завершить соединение корректно. Это глобальный параметр, его значение должно быть больше (желательно, в два раза), чем любой параметр клиента heartbeat_timeout. Значение по умолчанию — 0, что отключает эту проверку
|
transport
|
Если установлено значение TCP, будут использоваться только TCP-соединения в виде открытого текста. Если установлено значение KRB5, для аутентификации и шифрования будет использоваться Kerberos 5. Значение по умолчанию — TCP
|
enable_krb5
|
При значении yes — использовать Kerberos 5 для аутентификации и шифрования. Значение по умолчанию — no
|
krb5_principal
|
Принципал для этого сервера. Значение по умолчанию — auditd. При значении по умолчанию, сервер будет искать ключ с именем типа auditd/hostname@EXAMPLE.COM в
/etc/audit/audit.key для аутентификации себя, где hostname — имя сервера, возвращаемое запросом DNS-имени по его IP-адресу
|
krb5_key_file
|
Расположение ключа для принципала этого клиента. Файл ключа должен принадлежать пользователю root и иметь права 0400. По умолчанию — файл
/etc/audit/audit.key
|
distribute_network
|
При значении yes, события, поступающие из сети, будут передаваться диспетчеру аудита для обработки. Значение по умолчанию — no
|
q_depth
|
Числовое значение, указывающее, насколько большой должна быть внутренняя очередь диспетчера событий аудита. Очередь большего размера позволяет лучше обрабатывать поток событий, но может содержать события, которые не обрабатываются при завершении работы демона. Если вы получаете сообщения в системном журнале об удалении событий, увеличьте это значение. Значение по умолчанию — 2000
|
overflow_action
|
Определяет, как демон должен реагировать на переполнение своей внутренней очереди. Когда это происходит, это означает, что принимается больше событий, чем можно передать дочерним процессам. Эта ошибка означает, что текущее событие, которое он пытается отправить, будет потеряно. Допустимые значения:
|
max_restarts
|
Неотрицательное число, которое сообщает диспетчеру событий аудита, сколько раз он может попытаться перезапустить вышедший из строя плагин. По умолчанию — 10
|
plugin_dir
|
Место, где auditd будет искать файлы конфигурации своего плагина
|
end_of_event_timeout
|
Неотрицательное количество секунд, используемое библиотечными процедурами пользовательского пространства auparse() и утилитами
aureport(8), ausearch(8) для того, чтобы считать событие завершенным при анализе потока журнала событий. Если для обрабатываемого потока событий время текущего события превышает end_of_event_timeout секунд по сравнению с совмещенными событиями, то событие считается завершенным
|
Примечание
/var/log/audit рекомендуется выделять специальный раздел. Кроме того, параметру flush необходимо присвоить значение sync или data.
max_log_file и num_logs необходимо настроить так, чтобы была возможность полностью использовать раздел. Следует учитывать, что чем больше файлов необходимо ротировать, тем больше времени потребуется, чтобы вернуться к получению событий аудита. Параметру max_log_file_action рекомендуется присвоить значение keep_logs.
space_left должно быть установлено такое значение, которое даст администратору достаточно времени, чтобы отреагировать на предупреждение и освободить дисковое пространство. Обычно это предполагает запуск команды aureport –t и архивирование самых старых журналов. Значение параметра space_left зависит от системы, в частности от частоты поступления сообщений о событиях. Параметр space_left_action рекомендуется установить в значение email. Если требуется отправка сообщения snmp trap, нужно указать вариант exec.
admin_space_left должно быть установлено такое значение, чтобы хватило свободного места для хранения записей о действиях администратора. Значение параметра admin_space_left_action следует установить в single, ограничив, таким образом, способ взаимодействия с системой консолью.
disk_full_action, выполняется, когда в разделе уже не осталось свободного места. Доступ к ресурсам машины должен быть полностью прекращен, так как больше нет возможности контролировать работу системы. Это можно сделать, указав значение single или halt.
disk_error_action следует установить в syslog, single, либо halt в зависимости от соглашения относительно обработки сбоев аппаратного обеспечения.
auditctl используется для настройки параметров ядра, связанных с аудитом, получения состояния и добавления/удаления правил аудита.
auditctl [опции]
Таблица 94.2. Опции конфигурации команды auditctl
|
Опция
|
Описание
|
|---|---|
-b <количество>
|
Установить максимальное количество доступных для аудита буферов, ожидающих обработки (значение в ядре по умолчанию — 64). В случае если все буферы заняты, то ядром будет выставлен флаг сбоя
|
--backlog_wait_time <время_ожидания>
|
Установить время ожидания для ядра достижения значения backlog_limit (значение в ядре по умолчанию — 60*HZ), прежде, чем ставить в очередь дополнительные события аудита для их передачи аудиту. Число должно быть больше или равно нулю, но меньше, чем десятикратное значение по умолчанию
|
--reset_backlog_wait_time_actual
|
Сбросить счетчик фактического времени ожидания невыполненной работы, показанный командой состояния
|
-с
|
Продолжать загружать правила, несмотря на ошибку. Суммирует результат загрузки правил. Код завершения будет ошибочным, если какое-либо правило не будет загружено
|
-D
|
Удалить все правила и точки наблюдения. Может также принимать параметр
-k
|
-e [0..2]
|
Установить флаг блокировки: 0 — отключить аудит, 1 — включить аудит, 2 — защитить конфигурацию аудита от изменений. Для использования данной возможности необходимо внести данную команду последней строкой в файл
audit.rules. После её выполнения все попытки изменить конфигурацию будут отвергнуты с уведомлением в журналах аудита (чтобы задействовать новую конфигурацию аудита, необходимо перезагрузить систему)
|
-f [0..2]
|
Установить способ обработки для флага сбоя: 0=silent, 1=printk, 2=panic. Позволяет определить, каким образом ядро будет обрабатывать критические ошибки. Например, флаг сбоя выставляется при следующих условиях: ошибки передачи в пространство службы аудита, превышение лимита буферов, ожидающих обработки, выход за пределы памяти ядра, превышение лимита скорости выдачи сообщений (значение, установленное по умолчанию — 1, для систем с повышенными требованиями к безопасности, значение 2 может быть более предпочтительно)
|
-h
|
Краткая помощь по аргументам командной строки
|
-i
|
Если опция задана сама по себе, ошибки при чтении правил из файла будут игнорироваться. Если опция передана как аргумент
-s, то значения полей будут интерпретироваться в понятные человеку слова, если это возможно
|
--loginuid-immutable
|
Сделать login UID неизменяемым сразу после его установки. Для изменения login UID требуется CAP_AUDIT_CONTROL, поэтому непривилегированный пользователь не может его изменить. Установка этого параметра может вызвать проблемы в некоторых контейнерах
|
-q точка-<монтирования,поддерево>
|
При наличии точки наблюдения за каталогом и объединении или перемещении монтирования другого поддерева в наблюдаемое поддерево, необходимо указать ядру, сделать монтируемое поддерево эквивалентным просматриваемому каталогу. Если поддерево уже смонтировано во время создания точки наблюдения за каталогом, поддерево автоматически помечается для просмотра. Эти два значения разделяет запятая, отсутствие запятой приведет к ошибке
|
-r <частота>
|
Установить ограничение скорости выдачи сообщений в секунду (0 — нет ограничения). В случае если эта частота не нулевая, и она превышается в ходе аудита, флаг сбоя выставляется ядром для выполнения соответствующего действия. Значение, установленное по умолчанию — 0
|
--reset-lost
|
Сбросить счетчик потерянных записей, отображаемых командой статуса
|
-R <файл>
|
Читать правила из файла. Правила должны быть организованы следующим образом: располагаться по одному в строке и в том порядке, в каком должны исполняться. Накладываются следующие ограничения: владельцем файла должен быть root, и доступ на чтение должен быть только у него. Файл может содержать комментарии, начинающиеся с символа «#». Правила, расположенные в файле, идентичны тем, что набираются в командной строке, без указания слова auditctl
|
--signal <сигнал>
|
Отправить сигнал демону аудита. Поддерживаемые сигналы: TERM, HUP, USR1, USR2, CONT и удобные для пользователей версии stop, reload, rotate, resume, state
|
-t
|
Обрезать поддеревья после команды монтирования
|
Таблица 94.3. Опции состояния команды auditctl
|
Опция
|
Описание
|
|---|---|
-l
|
Вывести список всех правил по одному правилу в строке. Этой команде могут быть предоставлены две опции: ключ фильтрации (
-k), чтобы вывести список правил, соответствующих ключу, либо опция (-i) интерпретирующая значения полей от a0 до a3, для корректного определения значений аргументов системных вызовов
|
-m <текст>
|
Послать в систему аудита пользовательское сообщение. Команда может быть выполнена только под учетной записью root
|
-s
|
Получить статус аудита. Будут показаны значения, которые можно установить с помощью опций
-e, -f, -r и -b. Значение pid — это номер процесса службы аудита. Значение pid 0 указывает, что служба аудита не работает. Поле lost сообщает, сколько записей событий аудита было отброшено из-за переполнения буфера аудита. Поле backlog сообщает, сколько записей событий аудита находится в очереди, ожидая, когда auditd прочитает их. С этим параметром можно использовать опцию -i для интерпретации значений некоторых полей
|
-v
|
Вывести версию auditctl
|
Таблица 94.4. Опции правил команды auditctl
|
Опция
|
Описание
|
|---|---|
-a <список,действие| действие,список>
|
Добавить правило с указанным действием к концу списка. Необходимо учитывать, что значения «список» и «действия» разделены запятой, и её отсутствие вызовет ошибку. Поля могут быть указаны в любом порядке
|
-A <список,действие>
|
Добавить правило с указанным действием в начало списка
|
-C <f=f | f!=f>
|
Создать правило сравнения между полями. Можно передавать несколько сравнений в одной командной строке. Каждое из них должно начинаться с
-C. Каждое правило сравнения добавляется друг к другу, а также к правилам, начинающимся с -F для инициирования записи аудита. Поддерживаются два оператора — равно и не равно. Допустимые поля: auid, uid, euid, suid, fsuid, obj_uid; и gid, egid, sgid, fsgid, obj_gid. Две группы uid и gid не могут быть смешаны. Внутри группы может быть сделано любое сравнение
|
-d <список,действие>
|
Удалить правило с указанным действием из списка. Правило удаляется только в том случае, если полностью совпали и имя системного вызова и поля сравнения
|
-D
|
Удалить все правила и точки наблюдения. Может также принимать параметр
-k
|
-F <n=v | n!=v | n<v | n>v | n<=v | n>=v | n&v | n&=v>
|
Задать поле сравнения для правила. Атрибуты поля следующие: объект, операция, значение. В одной команде допускается задавать до шестидесяти четырех полей сравнения. Каждое новое поле должно начинаться с
-F. Аудит будет генерировать запись, если произошло совпадение по всем полям сравнения. Допустимо использование одного из следующих восьми операторов: равно, не равно, меньше, больше, меньше либо равно, больше либо равно, битовая маска (n&v) и битовая проверка (n&=v). Битовая проверка выполняет операцию «and» над значениями и проверяет, равны ли они. Битовая маска просто выполняет операцию «and». Поля, оперирующие с идентификатором пользователя, могут также работать с именем пользователя — программа автоматически получит идентификатор пользователя из его имени. То же самое можно сказать и про имя группы
|
-k <ключ>
|
Установить на правило ключ фильтрации. Ключ фильтрации — это произвольная текстовая строка длиной не больше 31 символа. Ключ помогает уникально идентифицировать записи, генерируемые в ходе аудита за точкой наблюдения. Поиск значения ключа можно выполнить с помощью команды
ausearch. Ключ также можно использовать для удаления всех правил (-D), или правил с определенным ключом (-l). В правиле можно использовать несколько ключей
|
-p <r|w|x|a>
|
Установить фильтр прав доступа для точки наблюдения: r=чтение, w=запись, x=исполнение, a=изменение атрибута. Эти разрешения не являются стандартными разрешениями для файлов, а представляют собой своего рода системный вызов, который может делать подобные вещи (системные вызовы «read» и «write» не включены в этот набор, поскольку логи аудита были бы перегружены информацией о работе этих вызовов)
|
-S <имя или номер системного вызова|all>
|
В случае если какой-либо процесс выполняет указанный системный вызов, то аудит генерирует соответствующую запись. В случае если значения полей сравнения заданы, а системный вызов не указан, правило будет применяться ко всем системным вызовам. В одном правиле может быть задано несколько системных вызовов — это положительно сказывается на производительности, поскольку заменяет обработку нескольких правил. Следует указывать по два правила: одно для 32-битной архитектуры, другое для 64-битной, чтобы убедиться, что ядро находит все ожидаемые события
|
-w <путь>
|
Добавить точку наблюдения за файловым объектом, находящимся по указанному пути. Добавление точки наблюдения к каталогу верхнего уровня запрещено ядром. Групповые символы (wildcards) также не могут быть использованы, попытки их использования будут генерировать предупреждающее сообщение. Внутренне точки наблюдения реализованы как слежение за inode. Установка точки наблюдения за файлом аналогична использованию параметра path в правиле системного вызова
-F. Установка точки наблюдения за каталогом аналогична использованию параметра dir в правиле системного вызова -F. Единственными допустимыми параметрами при использовании точек наблюдения являются -p и -k. Не рекомендуется использовать эту опцию, т.к. она устарела
|
-W <путь>
|
Удалить точку наблюдения за файловым объектом. Правило должно точно совпадать
|
Таблица 94.5. Объекты поля сравнения
|
Объект
|
Описание
|
|---|---|
a0, a1, a2, a3
|
Четыре первых аргумента, переданных системному вызову. Строковые аргументы не поддерживаются. Это связано с тем, что ядро должно получать указатель на строку, а проверка поля по значению адреса указателя не желательна. Таким образом, необходимо использовать только цифровые значения
|
arch
|
Архитектура процессора, на котором выполняется системный вызов. Для определения архитектуры необходимо использовать команду
uname -m. Можно написать правила, которые в некоторой степени не зависят от архитектуры, потому что тип будет определяться автоматически. Однако системные вызовы могут зависеть от архитектуры, и то, что доступно на x86_64, может быть недоступно на PPC. Опция arch должна предшествовать опции -S, чтобы auditctl знал, какую внутреннюю таблицу использовать для поиска номеров системных вызовов
|
auid
|
Идентификатор пользователя, использованный для входа в систему. Можно использовать либо имя пользователя, либо идентификатор пользователя
|
devmajor
|
Главный номер устройства (Device Major Number)
|
devminor
|
Вспомогательный номер устройства (Device Minor Number)
|
dir
|
Полный путь к каталогу для создания точки наблюдения. Помещает точку наблюдения в каталог и рекурсивно во всё его поддерево. Можно использовать только в списке
exit
|
egid
|
Действительный идентификатор группы
|
euid
|
Действительный идентификатор пользователя
|
exe
|
Абсолютный путь к приложению, к которому будет применяться это правило. Можно использовать только в списке
exit
|
exit
|
Значение, возвращаемое системным вызовом при выходе
|
fsgid
|
Идентификатор группы, применяемый к файловой системе
|
fsuid
|
Идентификатор пользователя, применяемый к файловой системе
|
filetype
|
Тип целевого файла: файл, каталог, сокет, ссылка, символ, блок или FIFO
|
gid
|
Идентификатор группы
|
inode
|
Номер inode
|
key
|
Альтернативный способ установить ключ фильтрации
|
msgtype
|
Используется для проверки совпадения с числом, описывающим тип сообщения. Может использоваться только в списках
exclude и user
|
obj_uid
|
UID объекта
|
obj_gid
|
GID объекта
|
path
|
Полный путь к файлу для точки наблюдения. Может использоваться только в списке
exit
|
perm
|
Фильтр прав доступа для файловых операций. Может использоваться только в списке
exit. Можно использовать без указания системного вызова, при этом ядро выберет системные вызовы, которые удовлетворяют запрашиваемым разрешениям
|
pers
|
Персональный номер операционной системы
|
pid
|
Идентификатор процесса
|
ppid
|
Идентификатор родительского процесса
|
sessionid
|
Идентификатор сеанса пользователя
|
sgid
|
Установленный идентификатор группы
|
success
|
Если значение, возвращаемое системным вызовом, больше либо равно 0, данный объект будет равен true/yes, иначе false/no. При создании правила нужно использовать 1 вместо true/yes и 0 вместо false/no
|
suid
|
Установленный идентификатор пользователя
|
uid
|
Идентификатор пользователя
|
aureport генерирует итоговые отчёты на основе логов службы аудита и может принимать данные со стандартного ввода (stdin) до тех пор, пока на входе будут необработанные данные логов. Все отчёты, кроме основного итогового отчёта, содержат номера событий аудита. Используя их, можно получить полные данные о событии с помощью команды ausearch -a <номер события>. В случае, если в отчёте слишком много данных, можно задать время начала и время окончания для уточнения временного промежутка.
aureport, могут быть использованы как исходный материал для получения развернутых отчётов.
aureport [опции]
Таблица 94.6. Опции команды aureport
|
Опция
|
Описание
|
|---|---|
-au, --auth
|
Отчёт о попытках аутентификации
|
-a, --avc
|
Отчёт о avc сообщениях
|
--comm
|
Отчёт о выполнении команд
|
-c, --config
|
Отчёт об изменениях конфигурации
|
-cr, --crypto
|
Отчёт о событиях, связанных с кодированием
|
--debug
|
Записывать некорректные события, которые пропускаются, в stderr
|
--eoe-timeout <секунды>
|
Установить тайм-аут окончания анализа событий (см.
end_of_event_timeout в auditd.conf). Установка этого значения переопределит любое настроенное значение, найденное в /etc/auditd/auditd.conf
|
-e, --event
|
Отчёт о событиях
|
--escape <опция>
|
Экранировать вывод. Возможные значения: raw, tty, shell и shell_quote. Каждый режим включает в себя символы предыдущего режима и экранирует больше символов. То есть shell включает все символы, экранируемые tty, и добавляет новые. Значение по умолчанию — tty
|
-f, --file
|
Отчёт о файлах и сокетах
|
--failed
|
Для обработки в отчётах выбирать только неудачные события. По умолчанию показываются как удачные, так и неудачные события
|
-h, --host
|
Отчёт о хостах
|
-i, --interpret
|
Транслировать числовые значения в текстовые. Например, идентификатор пользователя будет транслирован в имя пользователя. Трансляция выполняется с использованием данных с той машины, где запущена команда
aureport
|
-if, --input <файл>|<каталог>
|
Использовать указанный файл или каталог вместо логов аудита. Это может быть полезно при анализе логов с другой машины или при анализе частично сохраненных логов
|
--input-logs
|
Использовать местоположение файла журнала из auditd.conf как исходные данные для анализа. Применяется при использовании команды
aureport в задании cron
|
--integrity
|
Отчёт о событиях целостности
|
-k, --key
|
Отчёт о ключевых словах в правилах
|
-l, --login
|
Отчёт о попытках входа в систему
|
-m, --mods
|
Отчёт об изменениях пользовательских учетных записей
|
-ma, --mac
|
Отчет о событиях Mandatory Access Control (MAC)
|
-n, --anomaly
|
Отчёт об аномальных событиях. Эти события включают переход сетевой карты в беспорядочный режим и ошибки сегментации
|
--node <имя узла>
|
Отобразить в отчёте только события со строкой <имя узла>. По умолчанию включены все узлы. Допускается перечисление нескольких узлов
|
-nc, --no-config
|
Не включать событие CONFIG_CHANGE. Это особенно полезно для ключевого отчёта, поскольку правила аудита во многих случаях имеют ключевые метки. Использование этой опции избавляет от ложных срабатываний
|
-p, --pid
|
Отчёт о процессах
|
-r, --response
|
Отчёт о реакциях на аномальные события
|
-s, --syscall
|
Отчёты о системных вызовах
|
--success
|
Для обработки в отчётах выбирать только удачные события. По умолчанию показываются как удачные, так и неудачные события
|
--summary
|
Генерировать итоговый отчёт, который дает информацию только о количестве элементов в том или ином отчёте. Такой режим есть не у всех отчётов
|
-t, --log
|
Генерация отчётов о временных рамках каждого отчёта
|
--tty
|
Отчёты о нажатых клавишах
|
-te, --end <дата> <время>
|
Искать события, которые произошли раньше (или во время) указанной временной точки. Формат даты и времени зависит от региональных настроек. В случае если дата не указана, то подразумевается текущий день (today). В случае если не указано время, то подразумевается текущий момент (now)
|
-tm, --terminal <терминал>
|
Отчёт о терминалах
|
--ts, --start <дата> <время>
|
Искать события, которые произошли после (или во время) указанной временной точки
|
-u, --user
|
Отчёт о пользователях
|
-v, --version
|
Вывести версию программы и выйти
|
--virt
|
Отчет о событиях виртуализации
|
-x, --executable
|
Отчёт об исполняемых объектах
|
now — сейчас;
recent — десять минут назад;
boot — время за секунду до того, когда система загружалась в последний раз;
today — первая секунда после полуночи текущего дня;
yesterday — первая секунда после полуночи предыдущего дня;
this-week — первая секунда после полуночи первого дня текущей недели, первый день недели определяется из региональных настроек;
week-ago — первая секунда после полуночи ровно 7 дней назад;
this-month — первая секунда после полуночи первого числа текущего месяца;
this-year — первая секунда после полуночи первого числа первого месяца текущего года.
ausearch является инструментом поиска по журналу аудита. ausearch может также принимать данные со стандартного ввода (stdin) до тех пор, пока на входе будут необработанные данные логов. Все условия, указанные в параметрах, объединяются логическим «И».
ausearch выводит все записи события целиком. Это означает, что при поиске по определённому типу записи результат может включать и записи SYSCALL.
ausearch [опции]
Таблица 94.7. Опции команды ausearch
|
Опция
|
Описание
|
|---|---|
-a, --event <идентификатор события>
|
Искать события с заданным идентификатором события. В сообщении: msg=audit(1116360555.329:2401771), идентификатор события — число после «:». Все записи, относящиеся к одному системному вызову, имеют одинаковый идентификатор
|
--arch <CPU>
|
Искать события для указанной архитектуры процессора. Определить архитектуру можно командой
uname –m. Если архитектура неизвестна, необходимо b32 для 32-битных системных вызовов, если она поддерживается ПЭВМ, можно использовать b32 или b64 для 64-битных
|
-c, --comm <comm-name>
|
Искать события с заданным «comm name», именем исполняемого файла из структуры задачи
|
--debug
|
Записывать отладочные сообщения в stderr
|
--checkpoint <файл контрольной точки>
|
Контрольная точка — это вывод между последовательными вызовами ausearch, так что в последующих вызовах будут выводиться только события, не попавшие в предыдущий вывод.
Событие auditd состоит из одной или нескольких записей. При обработке события ausearch определяет события как завершенные и незавершенные. Завершенное событие — это одно событие записи или то, которое произошло раньше, чем за две секунды по сравнению с текущим обрабатываемым событием. Контрольная точка обеспечивается путем записи последнего завершенного события вывода вместе с номером устройства и индексом файла последнего завершившегося события в файл контрольной точки. При следующем вызове ausearch загрузит данные контрольной точки и при обработке файлов журнала, будет отбрасывать все завершенные события, пока они не соответствуют контрольной точке, в этот момент ausearch начнет выводить события
|
--eoe-timeout <секунды>
|
Установить тайм-аут для определения окончания события. Это значение переопределяет настройку из
/etc/auditd/auditd.conf
|
-e, --exit <код>
|
Искать события по коду возврата системного вызова exit или errno
|
--escape <режим>
|
Указать способ экранирования вывода. Возможные значения: raw, tty, shell и shell_quote. Каждый следующий режим включает правила предыдущего и добавляет дополнительное экранирование. Значение по умолчанию — tty
|
--extra-keys
|
Если параметр
format имеет значение csv, добавить столбец с дополнительной информацией.
Доступно только для записей SYSCALL, созданных по правилам аудита с указанием ключа (
-k)
|
--extra-labels
|
Если параметр
format имеет значение csv, добавить метки субъекта и объекта (если они присутствуют)
|
--extra-obj2
|
Если параметр
format имеет значение csv, добавить информацию о втором объекте (если он существует). Второй объект иногда является частью записи, например, при переименовании файла или монтировании устройства
|
--extra-time
|
Если параметр
format имеет значение csv, добавить информацию о времени простоя
|
-f, --file <файл>
|
Искать события, связанные с указанным именем файла
|
--format <режим>
|
Указать формат вывода. Поддерживаемые форматы: raw, default, interpret, csv и text. Значение raw описано в опции
raw. При значении default строки выводятся без форматирования, в выводе используется одна строка в качестве визуального разделителя, далее указывается метка времени, а затем следуют записи события. Значение interpret объясняется в описании опции -i. При значении csv результат поиска выводится в формате CSV. Значение text преобразует вывод к формату предложений, что упрощает понимание вывода, но происходит это за счет потери деталей
|
-ga, --gid-all <идентификатор группы>
|
Искать события по указанному идентификатору группы или имени группы, независимо от того, является ли он действительным (real) или эффективным (effective)
|
-ge, --gid-effective <эффективный идентификатор группы>
|
Искать события по указанному эффективному идентификатору группы
|
-gi, --gid <идентификатор группы>
|
Искать события по указанному идентификатору группы или имени группы
|
-h, --help
|
Справка
|
-hn, --host <имя узла>
|
Искать события с указанным именем узла. Поддерживаются: имя хоста, FQDN или IP-адрес
|
-i, --interpret
|
Преобразовать числовые значения в текстовые. Например, идентификатор пользователя будет преобразован в имя пользователя. Преобразование выполняется с использованием данных с той машины, где запущена команда
ausearch
|
-if, --input <файл>|<каталог>
|
Использовать указанный файл или каталог вместо стандартных журналов аудита. Это может быть полезно при анализе логов с другой машины или при анализе частично сохраненных логов
|
--input-logs
|
Использовать путь к логам из auditd.conf. Применяется при использовании команды
ausearch в задании cron
|
--just-one
|
Остановиться после после вывода первого найденного события
|
-k, --key <ключевое слово>
|
Искать события по заданному ключевому слову
|
-l, --line-buffered
|
Сбрасывать буфер вывода после каждой строки
|
-m, --message <тип>|<список типов>
|
Искать события по типу записи. Можно указать несколько типов через запятую. Допустимо использовать «ALL» для вывода всех типов. Тип может быть строкой или числом. Пробелы в списке не допускаются
|
-n , --node
|
Искать события с указанного узла. Можно указать несколько узлов (для вывода достаточно совпадение любого узла)
|
-p, --pid <идентификатор процесса>
|
Искать события по идентификатору процесса
|
-pp, --ppid <идентификатор процесса>
|
Искать события по идентификатору родительского процесса
|
-r, --raw
|
Выводить записи в необработанном виде. Подходит для дальнейшего анализа
|
-sc, --syscall <системный вызов>
|
Искать события по системному вызову. Можно указать имя или номер. Имена проверяются по таблице системных вызовов на машине, где запущена команда
ausearch
|
--session <идентификатор сеанса>
|
Искать события по идентификатору сеанса. Этот атрибут устанавливается при входе пользователя в систему и может связать любой процесс с определенным именем пользователя
|
-sv, --success <флаг>
|
Искать события по флагу успешности выполнения. Допустимые значения: yes (успешно) и no (неудачно)
|
-te, --end <дата> <время>
|
Искать события, которые произошли раньше (или во время) указанной временной точки. Формат даты и времени зависит от региональных настроек. Если дата не указана, используется текущий день (today). Если время не указано — текущий момент (now)
|
--ts, --start <дата> <время>
|
Искать события, которые произошли после (или во время) указанной временной точки
|
-tm, --terminal <терминал>
|
Искать события с заданным терминалом. Некоторые службы (например, cron и atd) используют имя службы как имя терминала
|
-ua, --uid-all <идентификатор пользователя>
|
Искать события, где любой из идентификатора пользователя, эффективного идентификатора пользователя или loginuid (auid) совпадает с заданным
|
-ue, --uid-effective <эффективный идентификатор пользователя>
|
Искать события по эффективному идентификатору пользователя (EUID)
|
-ui, --uid <идентификатор пользователя>
|
Искать события по идентификатору пользователя (UID)
|
-ul, --loginuid <идентификатор пользователя>
|
Искать события по идентификатору пользователя входа (loginuid). Все программы, которые его используют, должны использовать pam_loginuid
|
-uu, --uuid <идентификатор>
|
Искать события по идентификатору гостевой системы
|
-v, --version
|
Показать версию и выйти
|
--vm, --vm-name <имя>
|
Искать события по имени гостевой системы
|
-x, --executable <программа>
|
Искать события по имени исполняемого файла
|
now — текущий момент времени;
recent — десять минут назад;
boot — время за секунду до того, когда система загружалась в последний раз;
today — первая секунда после полуночи текущего дня;
yesterday — первая секунда после полуночи предыдущего дня;
this-week — первая секунда после полуночи первого дня текущей недели, первый день недели определяется из региональных настроек;
week-ago — первая секунда после полуночи ровно 7 дней назад;
this-month — первая секунда после полуночи первого числа текущего месяца;
this-year — первая секунда после полуночи первого числа первого месяца текущего года.
/etc/audit/auditd.conf.
/etc/audit/auditd.conf:
max_log_file = 8 space_left = 100 space_left_action = ROTATEгде:
max_log_file — максимальный размер файла журнала в Мбайт;
space_left — минимум свободного пространства в Мбайт;
space_left_action — действие (в данном случае старые файлы журналов будут удаляться, освобождая место для новых).
/etc/audit/auditd.conf, для того чтобы новые настройки вступили в силу, необходимо перечитать конфигурацию auditd:
# service auditd reload
auditctl (эти правила не сохраняются после перезагрузки системы);
/etc/audit/rules.d/*.rules.
Примечание
/usr/share/audit-rules. Чтобы использовать их, достаточно скопировать выбранные правила в /etc/auditd/rules.d.
auditctlauditctl позволяет управлять основными функциями системы аудита и определять правила, определяющие, какие события аудита регистрируются.
Примечание
# auditctl -b 256
# auditctl -f 2
в данной конфигурации в случае критической ошибки будет вызван kernel panic;
# auditctl -e 2
в результате все попытки изменить конфигурацию аудита будет отвергнуты:
Operation not permitted
# auditctl -s
# auditctl -l
# auditctl -D
Примечание
# auditctl -s
enabled 1
failure 1
pid 795
rate_limit 0
backlog_limit 8192
lost 0
backlog 0
backlog_wait_time 60000
backlog_wait_time_actual 0
loginuid_immutable 0 unlocked
#auditctl --signal state#cat /var/run/auditd.stateaudit version = 4.0.5 current time = 10/14/25 20:32:41 process priority = -4 writing to logs = yes current log size = 708 KB max log size = 5120 KB logs detected last rotate/shift = 0 space left on partition = yes Logging partition free space 35335 MB space_left setting 75 MB admin_space_left setting 50 MB logging suspended = no file system space action performed = no admin space action performed = no disk error detected = no Number of active plugins = 0 current plugin queue depth = 0 max plugin queue depth used = 0 plugin queue size = 0 plugin queue overflow detected = no plugin queueing suspended = no listening for network connections = no
# auditctl -a always,exit -F arch=b64 -F path=путь_к_файлу -F perm=разрешения -F key=имя_ключа
где:
/etc/shadow:
# auditctl -a always,exit -F arch=b64 -F path=/etc/shadow -F perm=wa -F key=shadow
/etc/httpd2/:
# auditctl -a always,exit -F arch=b64 -F dir=/etc/httpd2/ -F perm=wa -F key=apache
/sbin/modprobe:
# auditctl -a always,exit -F arch=b64 -F path=/sbin/modprobe -F perm=x -F key=modules
# auditctl -a список,действие -F arch=[b64|b32] -S имя_системного_вызова -F фильтры -k имя_ключа
task — добавить правило к списку, отвечающему за процессы. Этот список правил используется только во время создания процесса — когда родительский процесс вызывает fork() или clone(). При использовании этого списка можно использовать только те поля, которые известны во время создания процесса (uid, gid и так далее);
exit — добавить правило к списку, отвечающему за точки выхода из системных вызовов. Этот список применяется, когда необходимо создать событие для аудита, привязанное к точкам выхода из системных вызовов;
user — добавить правило, отвечающее за список фильтрации пользовательских сообщений. Этот список используется ядром, чтобы отфильтровать события, приходящие из пользовательского пространства, перед тем как они будут переданы службе аудита. Могут быть использованы только следующие поля: uid, auid, gid, pid, subj_user, subj_role, subj_type, subj_sen, subj_clr, и msgtype. Все остальные поля будут обработаны, как если бы они не совпали;
exclude — добавить правило к списку, отвечающего за фильтрацию событий определенного типа. Этот список используется, чтобы отфильтровывать ненужные события. События могут быть исключены по идентификатору процесса, идентификатору пользователя, идентификатору группы, идентификатору логина пользователя, типу сообщения или контексту предмета.
-a — это действие, которое должно произойти в ответ на возникшее событие:
never — аудит не будет генерировать никаких записей. Может использоваться для подавления генерации событий. Обычно необходимо подавлять генерацию сверху списка, а не снизу, поскольку событие инициируется на первом совпавшем правиле;
always — установить контекст аудита. Всегда заполнять его во время входа в системный вызов, и всегда генерировать запись во время выхода из системного вызова.
-S, задающая имя системного вызова, при обращении к которому должен срабатывать триггер (например, open, close, exit). Вместо имени может быть использовано числовое значение. Можно указать более одного системного вызова в правиле, указав еще одну опцию -S.
-F используются для указания дополнительных параметров фильтрации события.
/etc:
# auditctl -a always,exit -F arch=b64 -S open -F dir=/etc/
# auditctl -a always,exit -F arch=b64 -S open -F dir=/etc/ -F perm=aw
# auditctl -a always,exit -F arch=b64 -S all -F pid=1005
# auditctl -a always,exit -F arch=b64 -S openat -F auid=1000
openat:
# auditctl -a exit,always -F arch=b64 -S openat -F success!=0
/etc/shadow:
# auditctl -a always,exit -F path=/etc/shadow -F perm=wa
# auditctl -a список,действие [ -F arch=cpu -S имя_системного_вызова] -F exe=путь_к_файлу -k имя_ключа
/usr/bin/ping:
# auditctl -a always,exit -F exe=/usr/bin/ping -F arch=b64 -S execve -k execution_ping
*.rules в каталоге /etc/audit/rules.d/.
augenrules считывает правила, расположенные в каталоге /etc/audit/rules.d/, и компилирует их в файл /etc/audit/audit.rules. Этот скрипт обрабатывает файлы *.rules, в определенном порядке, основанном на их естественном порядке сортировки.
Примечание
/etc/audit/audit.rules вручную не рекомендуется, так как изменения могут быть перезаписаны.
*.rules должны содержать правила аудита в формате auditctl. Пустые строки и текст после знака решетки (#) игнорируются. В файл записываются правила без имени команды. Например:
-a always,exit -F arch=b64 -F path=/etc/passwd -F perm=wa -F key=passwd
auditctl также можно использовать для чтения правил из указанного файла с помощью опции -R, например:
# auditctl -R /home/user/audit/rules/30-net.rules
.rules может содержать только следующие правила контроля, изменяющие поведение системы аудита: -b, -D, -e, -f, -r, --loginuid-immutable и --backlog_wait_time. Например:
# Удалить все предыдущие правила -D # Установить размер буфера -b 8192 # Защитить конфигурацию аудита от изменений -e 2
.rules с использованием синтаксиса auditctl. Например:
-a always,exit -F arch=b64 -F path=/etc/shadow -F perm=wa -F key=shadow -a always,exit -F arch=b64 -F path=/sbin/modprobe -F perm=x -F key=modules -a always,exit -F arch=b64 -S openat -F auid=1000
/etc/audit/rules.d/ следует запустить службу audit-rules:
# systemctl start audit-rules.service
или выполнить команду augenrules с параметром --load:
# augenrules --load
# auditctl -l
/var/log/audit/audit.log.
/etc/autofs.conf:
# auditctl -a always,exit -F arch=b64 -F path=/etc/autofs.conf -F perm=warx -F key=autofs
auditd запущена, выполнение следующей команды создаст новое событие в файле журнала аудита:
$ cat /etc/autofs.conf
/var/log/audit/audit.log:
type=SYSCALL msg=audit(1742997845.965:860): arch=c000003e syscall=257 success=yes exit=3 a0=ffffff9c a1=7ffd62966448 a2=0 a3=0 items=1 ppid=16840 pid=22257 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts2 ses=90 comm="cat" exe="/usr/bin/cat" key="autofs"ARCH=x86_64 SYSCALL=openat AUID="user" UID="user" GID="user" EUID="user" SUID="user" FSUID="user" EGID="user" SGID="user" FSGID="user" type=CWD msg=audit(1742997845.965:860): cwd="/home/user" type=PATH msg=audit(1742997845.965:860): item=0 name="/etc/autofs.conf" inode=1051168 dev=08:02 mode=0100644 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0OUID="root" OGID="root" type=PROCTITLE msg=audit(1742997845.965:860): proctitle=636174002F6574632F6175746F66732E636F6E66Данное событие состоит из четырех записей, имеющих один серийный номер и одну и ту же отметку времени. Каждая запись состоит из нескольких пар
имя=значение, разделенных пробелом или запятой. Ниже каждая запись рассмотрена подробнее.
Примечание
ausearch можно использовать параметр -i для автоматического преобразования шестнадцатеричных значений в удобочитаемые эквиваленты.
type=SYSCALL — тип записи. Значение SYSCALL указывает, что запись была вызвана системным вызовом ядра;
msg=audit(1742997845.965:860) — в поле msg записывается:
имя=значение, зависящие от события, предоставляемые приложениями ядра или пользовательского пространства;
arch=c000003e — содержит информацию об архитектуре ЦП системы. Значение c000003e закодировано в шестнадцатеричном формате (c000003e интерпретируется как x86_64);
syscall=257 — тип системного вызова, отправленного ядру. Утилита ausyscall позволяет преобразовывать номера системных вызовов в их удобочитаемые эквиваленты. В данном примере 257 — системный вызов openat;
success=yes — указывает, был ли системный вызов, записанный в этом конкретном событии, успешным или неудачным. В данном примере вызов успешный;
exit=3 — значение, указывающее код выхода, возвращаемый системным вызовом. Это значение варьируется для разных системных вызовов;
a0=ffffff9c a1=7ffc39880600 a2=0 a3=0 — первые четыре аргумента системного вызова в этом событии, закодированные в шестнадцатеричной системе счисления;
items=1 — количество вспомогательных записей PATH, следующих за записью системного вызова;
ppid=16840 — идентификатор родительского процесса;
pid=22257 — идентификатор процесса (PID);
auid=1000 — идентификатор пользователя аудита, то есть логин. Этот идентификатор присваивается пользователю при входе в систему и наследуется каждым процессом, даже если личность пользователя меняется, например, при переключении учетных записей пользователей с помощью команды su -;
uid=1000 — идентификатор пользователя, запустившего анализируемый процесс. Идентификатор пользователя можно интерпретировать в имя пользователя с помощью команды ausearch -i --uid UID;
gid=1000 — идентификатор группы пользователя, запустившего анализируемый процесс;
euid=1000 — эффективный идентификатор пользователя, запустившего анализируемый процесс;
suid=1000 — установленный идентификатор пользователя, запустившего анализируемый процесс;
fsuid=1000 — идентификатор пользователя файловой системы, запустившего анализируемый процесс;
egid=1000 — эффективный идентификатор группы пользователя, запустившего анализируемый процесс;
sgid=1000 — заданный групповой идентификатор пользователя, запустившего анализируемый процесс;
fsgid=1000 — идентификатор группы файловой системы пользователя, запустившего анализируемый процесс;
tty=pts2 — терминал, с которого был вызван анализируемый процесс;
ses=90 — идентификатор сеанса, из которого был вызван анализируемый процесс;
comm="cat" — имя команды, которая использовалась для вызова анализируемого процесса;
exe="/usr/bin/cat" — путь к исполняемому файлу, который использовался для запуска анализируемого процесса;
key="autofs" — определенная администратором строка, связанная с правилом, создавшим это событие в журнале аудита;
type=CWD — тип записи. Значение CWD используется для записи рабочего каталога, из которого был выполнен процесс, вызвавший системный вызов, указанный в первой записи. Цель этой записи — записать местоположение текущего процесса на случай, если относительный путь будет зафиксирован в связанной записи PATH. Так можно восстановить абсолютный путь;
cwd="/home/user" — путь к каталогу, в котором был вызван системный вызов.
type=PATH — событие аудита содержит запись типа PATH для каждого пути, который передается системному вызову в качестве аргумента. В этом событии аудита в качестве аргумента использовался только один путь (/etc/autofs.conf);
item=0 — указывает, какой элемент из общего числа элементов, указанных в записи типа SYSCALL, является текущей записью. Это число начинается с нуля; значение 0 означает, что это первый элемент;
name="/etc/autofs.conf" — путь к файлу или каталогу, который был передан системному вызову в качестве аргумента;
inode=1051168 — номер индексного дескриптора, связанный с файлом или каталогом, записанным в этом событии. Отобразить файл или каталог, связанный с номером индексного дескриптора можно, выполнив команду:
# find / -inum 1051168 -print
/etc/autofs.conf
dev=08:02 — вспомогательный и основной идентификатор устройства, которое содержит файл или каталог, записанный в этом событии (в данном примере /dev/08/02);
mode=0100644 — права доступа к файлу или каталогу, закодированные в числовой форме, возвращаемые командой stat в поле st_mode (в данном примере -rw-r--r--);
ouid=0 — идентификатор пользователя владельца объекта;
ogid=0 — идентификатор группы владельца объекта;
rdev=00:00 — записанный идентификатор устройства только для специальных файлов. В данном случае он не используется, поскольку записанный файл является обычным файлом;
nametype=NORMAL — указывает на тип пути в контексте события. Возможные значения:
nametype=NORMAL здесь означает, что /etc/autofs.conf является целевым файлом операции;
cap_fp=0 — данные, относящиеся к настройке разрешенных возможностей файловой системы для объекта файла или каталога;
cap_fi=0 — данные, относящиеся к настройке унаследованных возможностей файловой системы для объекта файла или каталога;
cap_fe=0 — установка эффективного бита возможностей файловой системы объекта файла или каталога;
cap_fver=0 — версия возможностей файловой системы объекта файла или каталога.
cap_frootid=0OUID="root" OGID="root" — указывает, что файл /etc/autofs.conf принадлежит пользователю root и группе root.
type=PROCTITLE — тип записи. Значение PROCTITLE указывает, что эта запись содержит полную командную строку, которая инициировала это событие аудита, вызванное системным вызовом ядра;
proctitle — полная командная строка, которая использовалась для запуска анализируемого процесса. Поле закодировано в шестнадцатеричном формате. Текст декодируется в команду, которая вызвала это событие аудита. При поиске записей аудита с помощью команды ausearch следует использовать параметр -i для автоматического преобразования шестнадцатеричных значений в удобочитаемые эквиваленты. Значение 636174002F6574632F6175746F66732E636F6E66 интерпретируется в «cat /etc/autofs.conf».
ausearch -i:
# ausearch -i -k autofs
----
type=PROCTITLE msg=audit(14.10.2025 16:04:05.965:860) : proctitle=cat /etc/autofs.conf
type=PATH msg=audit(14.10.2025 16:04:05.965:860) : item=0 name=/etc/autofs.conf inode=1051168 dev=08:02 mode=file,644 ouid=root ogid=root rdev=00:00 nametype=NORMAL cap_fp=none cap_fi=none cap_fe=0 cap_fver=0 cap_frootid=0
type=CWD msg=audit(14.10.2025 16:04:05.965:860) : cwd=/home/user
type=SYSCALL msg=audit(14.10.2025 16:04:05.965:860) : arch=x86_64 syscall=openat success=yes exit=3 a0=AT_FDCWD a1=0x7ffd62966448 a2=O_RDONLY a3=0x0 items=1 ppid=16840 pid=22257 auid=user uid=user gid=user euid=user suid=user fsuid=user egid=user sgid=user fsgid=user tty=pts2 ses=90 comm=cat exe=/usr/bin/cat key=autofs
# ausearch -m DAEMON_START -m DAEMON_END
----
time->Tue Oct 14 15:12:53 2025
type=DAEMON_START msg=audit(1742988833.862:4634): op=start ver=4.0.5
format=enriched kernel=6.12.45-6.12-alt1 auid=4294967295 pid=5631 uid=0 ses=4294967295 res=success
----
time->Tue Oct 14 15:13:53 2025
type=DAEMON_END msg=audit(1742994773.359:4635): op=terminate auid=0 uid=0 ses=4294967295 pid=1 res=success
----
time->Tue Oct 14 15:16:53 2025
type=DAEMON_START msg=audit(1742995147.170:2639): op=start ver=4.0.5
format=enriched kernel=6.12.45-6.12-alt1 auid=4294967295 pid=16461 uid=0 ses=4294967295 res=success
/var/log/audit/audit.log.
# ausearch -m CONFIG_CHANGE
----
time->Tue Oct 14 15:24:01 2025
type=PROCTITLE msg=audit(1742995441.576:556): proctitle=617564697463746C002D660032
type=SOCKADDR msg=audit(1742995441.576:556): saddr=100000000000000000000000
type=SYSCALL msg=audit(1742995441.576:556): arch=c000003e syscall=44 success=yes exit=60 a0=3 a1=7ffccc6a5f50 a2=3c a3=0 items=0 ppid=2648 pid=16536 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=10 comm="auditctl" exe="/usr/sbin/auditctl" key=(null)
type=CONFIG_CHANGE msg=audit(1742995441.576:556): op=set audit_failure=2 old=1 auid=1000 ses=10 res=1
# auditctl -a always,exit -F arch=b64 -F path=/etc/audit -F perm=w -F key=audit_config
Найти такие записи аудита можно, выполнив команду:
# ausearch -k audit_config
----
time->Tue Oct 14 15:26:36 2025
type=PROCTITLE msg=audit(1742995596.829:558): proctitle=617564697463746C002D77002F6574632F6175646974002D700077002D6B0061756469745F636F6E666967
type=PATH msg=audit(1742995596.829:558): item=0 name="/etc/audit" inode=1050346 dev=08:02 mode=040700 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=CWD msg=audit(1742995596.829:558): cwd="/root"
type=SOCKADDR msg=audit(1742995596.829:558): saddr=100000000000000000000000
type=SYSCALL msg=audit(1742995596.829:558): arch=c000003e syscall=44 success=yes exit=1080 a0=4 a1=7ffd79dbf240 a2=438 a3=0 items=1 ppid=2648 pid=16559 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=10 comm="auditctl" exe="/usr/sbin/auditctl" key=(null)
type=CONFIG_CHANGE msg=audit(1742995596.829:558): auid=1000 ses=10 op=add_rule key="audit_config" list=4 res=1
#auditctl -a always,exit -F arch=b64 -S open -F exit=-EACCES -F key=open -k audit_log_EACCES#auditctl -a always,exit -F arch=b64 -S open -F exit=-EPERM -F key=open -k audit_log_EPERM
/var/log/audit/audit.log и с помощью команды ausearch от имени обычного пользователя:
$Будут созданы следующие записи, связанные с операцией чтения записей аудита:cat /var/log/audit/audit.logcat: /var/log/audit/audit.log: Отказано в доступе $/sbin/ausearch -i -k audit_logError opening config file (Отказано в доступе) NOTE - using built-in end_of_event_timeout: 2 NOTE - using built-in logs: /var/log/audit/audit.log Error opening /var/log/audit/audit.log (Отказано в доступе
# ausearch -i -k audit_log
----
type=PROCTITLE msg=audit(14.10.2025 15:56:57.706:818) : proctitle=auditctl -a always,exit -F arch b64 -S open -F exit -EACCES -F key=open -k audit_log_EACCES
type=SOCKADDR msg=audit(14.10.2025 15:56:57.706:818) : saddr={ saddr_fam=netlink nlnk-fam=16 nlnk-pid=0 }
type=SYSCALL msg=audit(14.10.2025 15:56:57.706:818) : arch=x86_64 syscall=sendto success=yes exit=1080 a0=0x4 a1=0x7ffdd2ea59c0 a2=0x438 a3=0x0 items=0 ppid=5446 pid=22054 auid=user uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts1 ses=56 comm=auditctl exe=/usr/sbin/auditctl key=(null)
type=CONFIG_CHANGE msg=audit(14.10.2025 15:56:57.706:818) : auid=user ses=56 op=add_rule key=open key=audit_log_EACCES list=exit res=yes
----
type=PROCTITLE msg=audit(14.10.2025 15:57:04.099:819) : proctitle=auditctl -a always,exit -F arch b64 -S open -F exit -EPERM -F key=open -k audit_log_EPERM
type=SOCKADDR msg=audit(14.10.2025 15:57:04.099:819) : saddr={ saddr_fam=netlink nlnk-fam=16 nlnk-pid=0 }
type=SYSCALL msg=audit(14.10.2025 15:57:04.099:819) : arch=x86_64 syscall=sendto success=yes exit=1076 a0=0x4 a1=0x7ffeceb891b0 a2=0x434 a3=0x0 items=0 ppid=5446 pid=22056 auid=user uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts1 ses=56 comm=auditctl exe=/usr/sbin/auditctl key=(null)
type=CONFIG_CHANGE msg=audit(14.10.2025 15:57:04.099:819) : auid=user ses=56 op=add_rule key=open key=audit_log_EPERM list=exit res=yes
DAEMON_ERR — служба аудита остановилась из-за внутренней ошибки;
DAEMON_RESUME — служба аудита возобновила ведение журнал;
DAEMON_ROTATE — произошла ротация файлов журнала аудита;
DAEMON_ABORT — служба аудита остановилась из-за ошибки.
# ausearch -m DAEMON_ROTATE
# auditctl -a always,exit -F arch=b64 -S open,openat
# ausearch -x /usr/bin/rsync | head
Примечание
/etc/pam.d/system-auth-local-only):
auth requisite pam_faillock.so preauth deny=4 unlock_time=300 auth sufficient pam_tcb.so shadow fork nullok auth [default=die] pam_faillock.so authfail deny=4 unlock_time=300 account required pam_faillock.so account required pam_tcb.so shadow fork password required pam_passwdqc.so config=/etc/passwdqc.conf password required pam_tcb.so use_authtok shadow fork nullok write_to=tcb session required pam_tcb.so
# ausearch -i -m RESP_ACCT_LOCK -m ANOM_LOGIN_FAILURES
----
type=ANOM_LOGIN_FAILURES msg=audit(14.10.2025 16:39:27.183:926) :
pid=22772 uid=root auid=unset ses=unset msg='op=pam_faillock suid=user
exe=/usr/bin/login hostname=node03 addr=? terminal=tty5 res=success'
----
type=RESP_ACCT_LOCK msg=audit(14.10.2025 16:39:27.183:927) :
pid=22772 uid=root auid=unset ses=unset msg='op=pam_faillock suid=user
exe=/usr/bin/login hostname=node03 addr=? terminal=tty5 res=success'
faillock --user <пользователь> --reset) попадает в аудит с типом USER_ACCT и msg=pam_faillock:
# ausearch -i -m USER_ACCT
# ausearch -m USER_AUTH
----
time->Tue Oct 14 15:44:59 2025
type=USER_AUTH msg=audit(1742996699.788:610):
pid=16404 uid=0 auid=4294967295 ses=4294967295 msg='op=PAM:authentication grantors=? acct="user"
exe="/usr/bin/login" hostname=node03 addr=? terminal=/dev/tty3 res=failed'
----
time->Tue Oct 14 15:45:23 2025
type=USER_AUTH msg=audit(1742996723.533:613):
pid=16825 uid=0 auid=4294967295 ses=4294967295 msg='op=PAM:authentication grantors=pam_userpass,pam_tcb acct="user"
exe="/usr/sbin/sshd" hostname=192.168.0.177 addr=192.168.0.177 terminal=ssh res=success'
# ausearch -m USER_LOGIN -i
----
type=USER_LOGIN msg=audit(14.10.2025 15:45:01.212:611) :
pid=16404 uid=root auid=unset ses=unset msg='op=login acct=user
exe=/usr/bin/login hostname=node03 addr=? terminal=/dev/tty3 res=failed'
----
type=USER_LOGIN msg=audit(14.10.2025 15:45:23.609:619) :
pid=16825 uid=root auid=user ses=90 msg='op=login id=user
exe=/usr/sbin/sshd hostname=192.168.0.177 addr=192.168.0.177 terminal=/dev/pts/2 res=success'
aureport позволяет вывести отчёт обо всех попытках входа в систему:
# aureport -l
Login Report
============================================
# date time auid host term exe success event
============================================
1. 14.10.2025 15:45:01 user node03 /dev/tty3 /usr/bin/login no 611
2. 14.10.2025 15:45:22 user 192.168.0.177 sshd /usr/sbin/sshd no 612
3. 14.10.2025 15:45:23 1000 192.168.0.177 /dev/pts/2 /usr/sbin/sshd yes 619
4. 14.10.2025 15:47:45 fgf node03 /dev/tty3 /usr/bin/login no 625
5. 14.10.2025 15:52:42 new node03 /dev/tty3 /usr/bin/login no 729
6. 14.10.2025 15:52:47 1000 node03 /dev/tty3 /usr/bin/login yes 735
# aureport -l --failed
# aureport -m
aureport предоставляет слишком много информации. В этом случае можно объединить команды ausearch и aureport, чтобы получить нужную информацию. Вывод ausearch при этом должен быть в «raw» формате. Например, получить список узлов, с которых пользователи входили в систему на этой неделе:
# ausearch --start this-week -m user_login --raw | aureport --host --summary
Host Summary Report
===========================
total host
===========================
9 node03
6 192.168.0.177
1 192.168.0.193
# auditctl -a exit,always -F arch=b64 -S clock_settime -S settimeofday -S adjtimex -k FPT_STM
date.
# ausearch -k FPT_STM
----
time->Tue Oct 14 16:43:15 2025
type=PROCTITLE msg=audit(1743000195.375:1043): proctitle=64617465002D2D7365743D323032352D30332D32352031363A34333A3134
type=TIME_INJOFFSET msg=audit(1743000195.375:1043): sec=-86402 nsec=623885248
type=SYSCALL msg=audit(1743000195.375:1043): arch=c000003e syscall=227 success=yes exit=0 a0=0 a1=7fffa4d5ca30 a2=0 a3=0 items=0 ppid=23512 pid=24273 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts6 ses=4294967295 comm="date" exe="/usr/bin/date" key="FPT_STM"
# auditctl -d exit,always -F arch=b64 -S clock_settime -S settimeofday -S adjtimex -k FPT_STM
/etc/audit/rules.d/20-account_changes.rules со следующим содержимым:
# audit_account_changes -a always,exit -F arch=b64 -F path=/etc/group -F perm=wa -F key=audit_account_changes -a always,exit -F arch=b64 -F path=/etc/passwd -F perm=wa -F key=audit_accout_changes -a always,exit -F arch=b64 -F path=/etc/gshadow -F perm=wa -F key=audit_account_changes -a always,exit -F arch=b64 -F path=/etc/shadow -F perm=wa -F key=audit_account_changes -a always,exit -F arch=b64 -F path=/etc/security/opasswd -F perm=wa -F key=audit_account_changes
# ausearch -k audit_account_changes
/etc/audit/rules.d/50-execprog.rules с правилами в зависимости от архитектуры, в примере 64 бит (AMD, Intel):
-a always,exit -F arch=b64 -S open,openat,execve -F exit=-EACCES -F key="AVC" -a always,exit -F arch=b64 -S open,openat,execve -F exit=-EPERM -F key="AVC"
# ausearch -k AVC