Редакция ноябрь, 2024
Аннотация
apt-get
и её графическая оболочка synaptic позволяют пользователям легко обновлять свои системы и быть в курсе актуальных новостей мира свободных программ.
Содержание
SCDWriter.exe
;
Предупреждение
Предупреждение
Предупреждение
Предупреждение
#где <файл-образа.iso> — образ диска ISO, аdd
oflag=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 7,4G 0 disk
flash-диск имеет имя устройства sdc.
# dd oflag=direct if=/home/iso/alt-server-10.4-x86_64.iso of=/dev/sdc bs=1M status=progress; sync
# pv /home/iso/alt-server-10.4-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-10.4-x86_64.iso
of=/dev/rdiskX bs=10Msync
alt-server-10.4-x86_64.iso
— образ диска ISO, а /dev/rdiskX — flash-диск.
diskutil list
Предупреждение
$ du -b alt-server-10.4-x86_64.iso | cut -f1
5278818304
$ md5sum alt-server-10.4-x86_64.iso
e103dc0cfee41a73956dbcfe9a3547c8 alt-server-10.4-x86_64.iso
# head -c 5278818304 /dev/sdd | md5sum
e103dc0cfee41a73956dbcfe9a3547c8
где размер после -c — вывод в п.1, а /dev/sdd — устройство DVD или USB Flash, на которое производилась запись.
Предупреждение
Примечание
[root@localhost /]#
Примечание
Примечание
Примечание
Примечание
Примечание
/var
.
Примечание
Предупреждение
/home
) или с другими операционными системами. С другой стороны, отформатировать можно любой раздел, который вы хотите «очистить» (удалить все данные).
Предупреждение
/boot/efi
, в которую нужно смонтировать vfat раздел с загрузочными записями. Если такого раздела нет, то его надо создать вручную. При разбивке жёсткого диска в автоматическом режиме такой раздел создаёт сам установщик. Особенности разбиения диска в UEFI-режиме:
/boot/efi
);
Примечание
Важно
Важно
Примечание
Примечание
Примечание
/boot/efi
).
Важно
Важно
Примечание
Примечание
Предупреждение
/
и /home
создаются подтома с именами @ и @home. Это означает, что для монтирования подтомов необходимы определенные параметры вместо корня системы BtrFS по умолчанию:
/
с помощью опции subvol=@;
/home
с помощью параметра монтирования subvol=@home.
Примечание
Примечание
Примечание
Примечание
# builder-useradd <имя_пользователя>
и перелогиниться.
/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
:
; установка языка операционной системы (ru_RU) ("/sysconfig-base/language" action "write" lang ("ru_RU")) ; установка переключателя раскладки клавиатуры на Ctrl+Shift ("/sysconfig-base/kbd" language ("ru_RU") action "write" layout "ctrl_shift_toggle") ; установка часового пояса в Europe/Moscow, время в BIOS будет храниться в UTC ("/datetime-installer" action "write" commit #t name "RU" zone "Europe/Moscow" utc #t) ; автоматическая разбивка жёсткого диска в профиле server_lvm ("/evms/control" action "write" control open installer #t) ("/evms/control" action "write" control update) ("/evms/profiles/server_lvm" action apply commit #f clearall #t exclude ()) ("/evms/control" action "write" control commit) ("/evms/control" action "write" control close) ; перемонтирование ("/remount-destination" action "write") ; установка пакетов операционной системы ("pkg-init" action "write") ; установка только базовой системы (дополнительные группы пакетов из pkg-groups.tar указываются по именам через пробел) ("/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" gecos "user" allow_su #t auto #f passwd_1 "123" passwd_2 "123" autologin #f) ;("/postinstall/firsttime" script "ftp://192.168.0.123/metadata/update.sh")
("/pkg-install" action "write" lists "centaurus/mate" auto #t)
("/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
— скрипт скачивается с сервера и выполняется;
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
или выполнять команды через 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 — в каталог postinstall.d
. Упаковать архив можно, например, выполнив команду:
$ tar cf install-scripts.tar preinstall.d postinstall.d
Примечание
$destdir
или выполнять команды через run_chroot:
#!/bin/sh a= . install2-init-functions run_chroot sh -c "date > /root/STAMP_1" date > $destdir/root/STAMP_2
ai
(без значения) и параметр curl
с указанием каталога с установочными файлами. Формат адреса в curl
должен быть представлен в виде URL:
ai curl=ftp://<IP-адрес>/metadata/
/Metadata/
.
/usr/share/install2/metadata/
.
Важно
Важно
nomodeset
— не использовать modeset-драйверы для видеокарты;
vga=normal
— отключить графический экран загрузки установщика;
xdriver=vesa
— явно использовать видеодрайвер vesa. Данным параметром можно явно указать нужный вариант драйвера;
acpi=off noapic
— отключение ACPI (управление питанием), если система не поддерживает ACPI полностью.
apm=off acpi=off mce=off barrier=off vga=normal
). В безопасном режиме отключаются все параметры ядра, которые могут вызвать проблемы при загрузке. В этом режиме установка будет произведена без поддержки APIC. Возможно, у вас какое-то новое или нестандартное оборудование, но может оказаться, что оно отлично настраивается со старыми драйверами.
[root@localhost /]#
. Начиная с этого момента, система готова к вводу команд.
fixmbr
без параметров. Программа попытается переустановить загрузчик в автоматическом режиме.
Важно
/home
, то для того, чтобы войти в систему под своим именем пользователя, вам потребуется ввести пароль этого раздела и затем нажать Enter.
Важно
Примечание
Важно
Содержание
/home/<имя пользователя>
. В этой папке по умолчанию хранятся пользовательские файлы (например, аудиозаписи, видеозаписи, документы). Домашняя папка есть у каждого пользователя системы, и по умолчанию содержащиеся в ней файлы недоступны для других пользователей (даже для чтения);
Примечание
Примечание
Примечание
Примечание
Предупреждение
acc
.
https://ip-адрес:8080/
.
192.168.0.122
. В таком случае:
https://192.168.0.122:8080/
;
https://192.168.0.122/
.
Примечание
$
ip
addr
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
.
Примечание
startx
, предварительно войдя в консоль сервера, используя имя и пароль созданного при установке непривилегированного пользователя.
Предупреждение
Примечание
Примечание
Примечание
Примечание
Предупреждение
Предупреждение
Важно
Примечание
apt-get dist-upgrade
.
Важно
Содержание
Примечание
Примечание
/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.
Примечание
/tmp/alt-workstation-10.2-x86_64.iso
). Можно также использовать URL вида http://ftp.altlinux.org/pub/distributions/ALTLinux/images/p10/workstation/x86_64/alt-workstation-10.2-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
и нажать кнопку :
$ 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
Примечание
Примечание
Примечание
Примечание
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/p10/branch
# apt-repo
rpm http://192.168.0.185/mirror p10/branch/x86_64 classic
rpm http://192.168.0.185/mirror p10/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/p10/branch
#apt-repo
rpm ftp://192.168.0.185/mirror p10/branch/x86_64 classic rpm ftp://192.168.0.185/mirror p10/branch/noarch classic
Примечание
Примечание
usrquota
, grpquota
. Для этого следует выбрать нужный раздел в списке Файловая система и установить отметку в поле Включено:
Примечание
# apt-get install state-change-notify-postfix
Thu Sep 14 11:46:59 EET 2023: The server.test.alt is about to start.При выключении:
Thu Sep 14 12:27:02 EET 2023: The server.test.alt is about to shutdown.
rpm -qa | grep alterator*
Прочие пакеты для ЦУС можно найти, выполнив команду:
apt-cache search alterator*
#apt-get install alterator-net-openvpn
#apt-get remove alterator-net-openvpn
# systemctl restart ahttpd
Содержание
Предупреждение
# 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
Предупреждение
/etc/samba/smb.conf
перед созданием домена: rm -f
/etc/samba/smb.conf
/etc/sysconfig/network
# hostnamectl set-hostname dc1.test.alt
# domainname 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
More than one IPv4 address found. Using 192.168.0.122
Looking up IPv6 addresses
No IPv6 address will be assigned
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
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
Adding DNS accounts
Creating CN=MicrosoftDNS,CN=System,DC=test,DC=alt
Creating DomainDnsZones and ForestDnsZones partitions
Populating DomainDnsZones and ForestDnsZones partitions
Setting up sam.ldb rootDSE marking as synchronized
Fixing provision GUIDs
A Kerberos configuration suitable for Samba 4 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 Samba4 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-80639820-2350372464-3293631772
Примечание
/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.19.7-alt4)
SMB1 disabled -- no workgroup available
Общие ресурсы netlogon и sysvol создаваемые по умолчанию нужны для функционирования сервера AD и создаются в smb.conf
в процессе развертывания/модернизации.
/etc/resolv.conf
:
#cat /etc/resolv.conf
# Generated by resolvconf # Do not edit manually, use # /etc/net/ifaces/<interface>/resolv.conf instead. search test.alt nameserver 127.0.0.1 #host test.alt
test.alt has address 192.168.0.122
#Если имена не находятся, проверьте выключение службы 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.122
# 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
18.10.2024 11:23:18 18.10.2024 21:23:14 krbtgt/TEST.ALT@TEST.ALT
renew until 25.10.2024 11:23:10
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 имя
# 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
# systemctl status bind
И, если она была включена, выключить службу bind и перезапустить службу samba:
#systemctl stop bind
#systemctl restart samba
Предупреждение
# samba-tool dns add 192.168.0.122 test.alt DC2 A 192.168.0.106 -Uadministrator
Password for [TEST\administrator]:
Record added successfully
/etc/krb5.conf
):
[libdefaults] default_realm = TEST.ALT dns_lookup_realm = false dns_lookup_kdc = true
Примечание
/etc/resolv.conf
обязательно должен быть добавлен PDC как nameserver:
#echo "name_servers=192.168.0.122" >> /etc/resolvconf.conf
#echo "search_domains=test.alt" >> /etc/resolvconf.conf
#resolvconf -u
#cat /etc/resolv.conf
search test.alt nameserver 192.168.0.122 nameserver 8.8.8.8
# 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
18.10.2024 11:28:35 18.10.2024 21:28:35 krbtgt/TEST.ALT@TEST.ALT
renew until 25.10.2024 11:28:32
# 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-80639820-2350372464-3293631772) as a DCДля получения дополнительной информации можно воспользоваться командой:
# samba-tool domain join --help
# systemctl enable --now samba
Предупреждение
Предупреждение
# samba-tool drs replicate dc2.test.alt dc1.test.alt dc=test,dc=alt -Uadministrator
Сначала указывается приемник, затем источник, после этого реплицируемая ветка в LDAP.
# samba-tool drs replicate dc1.test.alt dc2.test.alt dc=test,dc=alt -Uadministrator
Сначала указывается приемник, затем источник, после этого реплицируемая ветка в LDAP.
Примечание
# samba-tool drs showrepl
Примечание
# apt-get install task-auth-ad-sssd
# hostnamectl set-hostname host-15.test.alt
/etc/net/ifaces/enp0s3/resolv.conf
со следующим содержимым:
nameserver 192.168.0.122где 192.168.0.122 — IP-адрес DNS-сервера домена.
/etc/resolvconf.conf
добавить/отредактировать следующие параметры:
interface_order='lo lo[0-9]* lo.* enp0s3' search_domains=test.altгде enp0s3 — интерфейс, на котором доступен контроллер домена, test.alt — домен.
# resolvconf -u
Примечание
/etc/resolv.conf
должны появиться строки:
search test.alt nameserver 192.168.0.122
# system-auth write ad test.alt host-15 test 'administrator' 'Pa$$word'
Joined 'HOST-15' to dns domain 'test.alt'
Важно
# apt-get install admx-basealt admx-chromium admx-firefox admx-yandex-browser 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-msi-setup
#admx-msi-setup
\\<DOMAIN>\SYSVOL\<DOMAIN>\Policies\PolicyDefinitions
.
ping
только суперпользователю (root).
$ kinit administrator
Password for administrator@TEST.ALT:
admc
:
$ admc
ping
сможет только администратор:
$ping localhost
bash: ping: команда не найдена $/usr/bin/ping localhost
bash: /usr/bin/ping: Отказано в доступе #control ping
restricted
Важно
# 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 Server Version 4.19.7-alt4)
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
Предупреждение
# apt-get install task-sogo
# /etc/init.d/postgresql initdb
# systemctl start postgresql
#su - postgres -s /bin/sh -c 'createuser --no-superuser --no-createdb --no-createrole 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@/sogo/sogo_user_profile"; OCSFolderInfoURL = "postgresql://sogo@/sogo/sogo_folder_info"; OCSSessionsFolderURL = "postgresql://sogo@/sogo/sogo_sessions_folder"; OCSEMailAlarmsFolderURL = "postgresql://sogo@/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 = sAMAccountName; 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 = (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; }
# for service in samba postgresql memcached sogo httpd2; do systemctl enable $service; systemctl restart $service; done
/var/log/sogo/sogo.log
#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-address
. Указать атрибут 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, per-mit_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 Sales
Added group Sales #samba-tool group addmembers Sales ivanov,petrov
Added members to group Sales #postmap -q sales@test.alt ldap:/etc/postfix/ad_mail_groups.cf
sales@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
#mailq
Mail queue is empty
#где dc1.test.alt — имя узла сервера SOGo.openssl s_client -crlf -connect dc1.test.alt:993
...tag login petrov@test.alt Pa$$word
tag 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
и %u
указывают на имя домена и имя учетной записи.
/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
#systemctl stop ahttpd
#a2dissite 000-default_https
#a2disport https
#systemctl condreload httpd2
# apt-get install freeipa-server freeipa-server-dns
# hostnamectl set-hostname ipa.example.test
Примечание
# 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, или отключить автоматическое определение обратных зон.
Предупреждение
--mkhomedir
):
# 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 --mkhomedir
# 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 3, offset 0.000018, delay 0.02568
27 Nov 10:27:00 ntpdate[29854]: adjust time server 127.0.0.1 offset 0.000018 sec
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где 192.168.0.113 — IP-адрес FreeIPA сервера.
/etc/resolvconf.conf
добавить/отредактировать следующие параметры:
interface_order='lo lo[0-9]* lo.* eth0' search_domains=example.testгде eth0 — интерфейс, на котором доступен 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
# 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
сначала регистрирует систему в качестве клиента, а затем устанавливает компоненты реплики. В примере, описанном ниже, для авторизации регистрации используется случайный пароль, действительный только для одной регистрации этого клиента.
$ 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.9.11
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
# apt-get install libvirt-kvm virt-install
# systemctl enable --now libvirtd.service
# virsh net-list --all
Имя Статус Автозапуск Persistent
----------------------------------------------
default активен yes yes
Примечание
# virsh net-define /etc/libvirt/qemu/networks/default.xml
# virsh net-autostart default
# virsh net-start default
Примечание
# control sshd-permit-root-login enabled
и перезагрузить ssh-сервер:
# systemctl restart sshd.service
После того как ключ будет скопирован, рекомендуется отключить парольную аутентификацию:
#control sshd-permit-root-login disabled
#systemctl restart sshd.service
# virt-install
--name alt \
--ram 4096 --cpu kvm64 --vcpus 2 \
--disk pool=default,size=20,bus=virtio,format=qcow2 \
--network network=default --graphics spice,listen=127.0.0.1,password=test \
--cdrom /var/lib/libvirt/images/alt-workstation-10.0-x86_64.iso --os-variant=alt10.0
$ virt-viewer --connect qemu+ssh://user@192.168.0.190/system
# apt-get install fleet-commander-logger
Примечание
--mkhomedir
).
# apt-get install freeipa-desktop-profile
...
Perform the IPA upgrade. This may take a while.
The IPA upgrade was successful.
Завершено.
Примечание
#kinit admin
Password for admin@EXAMPLE.TEST: #ipa deskprofileconfig-show
Priority of profile application: 1
Примечание
ipa deskprofileconfig-show
появляется ошибка:
ipa: ERROR: неизвестная команда "deskprofileconfig-show"необходимо почистить кэш текущему пользователю и повторить команду:
#rm -rf ~/.cache/ipa
#ipa deskprofileconfig-show
Priority of profile application: 1
# apt-get install fleet-commander-admin
Примечание
# systemctl enable --now cockpit.socket
https://адрес-сервера:9090/
:
Вход осуществляется по логину указанному при установке FreeIPA сервера.
Примечание
User-Group-Host-Hostgroup
.
.ssh/authorized_keys
для соответствующего пользователя на libvirt-хосте. Это можно сделать, нажав кнопку ( ), при этом будет необходимо ввести пароль пользователя. Пароль используется только для установки ключа и нигде не хранится.
Примечание
# apt-get install fleet-commander-client
https://адрес-сервера:9090/fleet-commander-admin
и запустить live-сессию ( → ). Появится окно со списком доступных ВМ, которые можно использовать в качестве шаблона для загрузки в live-сессии:
Предупреждение
log_level = debug
в /etc/xdg/fleet-commander-admin.conf
. Возникшие ошибки можно отследить, используя journalctl
.
fping
:
# apt-get install postgresql15-server zabbix-server-pgsql fping
# /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'
#su - postgres -s /bin/sh -c 'psql -U zabbix -f /usr/share/doc/zabbix-common-database-pgsql-*/images.sql zabbix'
#su - postgres -s /bin/sh -c 'psql -U zabbix -f /usr/share/doc/zabbix-common-database-pgsql-*/data.sql zabbix'
# apt-get install apache2 apache2-mod_php8.2
# systemctl enable --now httpd2
Примечание
php<мажорная>.<минорная версии>-<имя модуля>
# apt-get install php8.2 php8.2-mbstring php8.2-sockets php8.2-gd php8.2-xmlreader php8.2-pgsql php8.2-ldap php8.2-openssl
/etc/php/8.2/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
# systemctl restart httpd2
/etc/zabbix/zabbix_server.conf
:
DBHost=localhost DBName=zabbix DBUser=zabbix DBPassword=Пароль от базы
# systemctl enable --now zabbix_pgsql
# apt-get install zabbix-phpfrontend-apache2 zabbix-phpfrontend-php8.2
# ln -s /etc/httpd2/conf/addon.d/A.zabbix.conf /etc/httpd2/conf/extra-enabled/
# systemctl restart httpd2
# chown apache2:apache2 /var/www/webapps/zabbix/ui/conf
http://<ip-сервера>/zabbix
Примечание
/etc/httpd2/conf/sites-available/default.conf
в секцию <Directory> добавить запись:
Require all grantedи перезапустить apache2:
# systemctl restart httpd2
Примечание
Логин: Admin Пароль: zabbix
Примечание
# apt-get install zabbix-agent
/etc/zabbix/zabbix_agentd.conf
нужно задать следующие параметры:
Server=<ip-сервера> ServerActive=<ip-сервера> Hostname=comp01.example.testcomp01.example.test — имя узла мониторинга, которое будет указано на сервере Zabbix.
Примечание
# systemctl enable --now zabbix_agentd.service
Примечание
Примечание
/etc/zabbix/zabbix_agentd.conf
) в поле Hostname.
Примечание
Hostname
— уникальное имя;
ServerActive
— IP-адрес сервера;
HostMetadata
— значение, которое было указано в настройках сервера (HostMetadata=alt.autoreg).
#apt-get install deploy
#deploy nextcloud
Примечание
# deploy nextcloud
# deploy nextcloud password=5Z4SAq2U28rWyVz
https://<сервер>/nextcloud/
. Где «сервер» — localhost или имя, заданное компьютеру при установке системы на этапе Настройка сети.
Примечание
$ hostname
Важно
/var/www/webapps/nextcloud/config/config.php
в параметре version
изменить старую версию на новую;
/var/www/webapps/nextcloud/config/config.php
— файл конфигурации Nextcloud.
Важно
# systemctl restart httpd2
'memcache.local' => '\OC\Memcache\Memcached', 'memcache.distributed' => '\OC\Memcache\Memcached', 'memcached_servers' => array( array('localhost', 11211), ),
Примечание
# apt-get install memcached php8.2-memcached
Служба memcached должна быть добавлена в автозагрузку:
# systemctl enable --now memcached
'trusted_domains' => array ( 0 => 'localhost', 1 => 'host-15', 2 => 'nextcloud.test.alt', ),
https://localhost/nextcloud/
или по имени сервера https://nextcloud.test.alt/nextcloud/
.
Примечание
Примечание
Примечание
# apt-get install prosody jitsi-meet-prosody jitsi-meet-web jitsi-meet-web-config jicofo jitsi-videobridge
Примечание
Примечание
# hostnamectl set-hostname jitsi2
/etc/hosts
строку:
127.0.0.1 jitsi2.test.alt jitsi2
Примечание
#hostname
jitsi2 #hostname -f
jitsi2.test.alt $ping "$(hostname)"
PING jitsi2.test.alt (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.053 ms [...]
/etc/prosody/conf.d
для хранения пользовательских конфигураций:
# mkdir -p /etc/prosody/conf.d
/etc/prosody/prosody.cfg.lua
дописать строку:
Include "conf.d/*.cfg.lua"
/etc/prosody/conf.d/jitsi2.test.alt.cfg.lua
) со следующим содержимым:
plugin_paths = { "/usr/share/jitsi-meet/prosody-plugins/" } -- domain mapper options, must at least have domain base set to use the mapper muc_mapper_domain_base = "jitsi2.test.alt"; cross_domain_bosh = false; consider_bosh_secure = true; ----------- Virtual hosts ----------- VirtualHost "jitsi2.test.alt" authentication = "anonymous" ssl = { key = "/var/lib/prosody/jitsi2.test.alt.key"; certificate = "/var/lib/prosody/jitsi2.test.alt.crt"; } speakerstats_component = "speakerstats.jitsi2.test.alt" conference_duration_component = "conferenceduration.jitsi2.test.alt" -- we need bosh modules_enabled = { "bosh"; "pubsub"; "ping"; -- Enable mod_ping "speakerstats"; "turncredentials"; "conference_duration"; } c2s_require_encryption = false Component "conference.jitsi2.test.alt" "muc" storage = "memory" modules_enabled = { "muc_meeting_id"; "muc_domain_mapper"; -- "token_verification"; } admins = { "focus@auth.jitsi2.test.alt" } muc_room_locking = false muc_room_default_public_jids = true VirtualHost "auth.jitsi2.test.alt" ssl = { key = "/var/lib/prosody/auth.jitsi2.test.alt.key"; certificate = "/var/lib/prosody/auth.jitsi2.test.alt.crt"; } authentication = "internal_plain" -- internal muc component, meant to enable pools of jibri and jigasi clients Component "internal.auth.jitsi2.test.alt" "muc" storage = "memory" modules_enabled = { "ping"; } admins = { "focus@auth.jitsi2.test.alt", "jvb@auth.jitsi2.test.alt" } muc_room_locking = false muc_room_default_public_jids = true Component "focus.jitsi2.test.alt" component_secret = "secret1" -- достаточно длинный пароль, он же JICOFO_SECRET Component "speakerstats.jitsi2.test.alt" "speakerstats_component" muc_component = "conference.jitsi2.test.alt" Component "conferenceduration.jitsi2.test.alt" "conference_duration_component" muc_component = "conference.jitsi2.test.alt"
#В ответах можно принять значения по умолчанию (можно просто нажать Enter) или ввести свои ответы. Важно в ответе на запрос commonName (jitsi2.test.alt): указать доменное имя сервера Prosody.prosodyctl cert generate jitsi2.test.alt
Choose key size (2048): countryName (GB): RU localityName (The Internet): organizationName (Your Organisation): organizationalUnitName (XMPP Department): commonName (jitsi2.test.alt): emailAddress (xmpp@jitsi2.test.alt): Config written to /var/lib/prosody/jitsi2.test.alt.cnf Certificate written to /var/lib/prosody/jitsi2.test.alt.crt #prosodyctl cert generate auth.jitsi2.test.alt
Choose key size (2048): countryName (GB): RU localityName (The Internet): organizationName (Your Organisation): organizationalUnitName (XMPP Department): commonName (auth.jitsi2.test.alt): emailAddress (xmpp@auth.jitsi2.test.alt): Config written to /var/lib/prosody/auth.jitsi2.test.alt.cnf Certificate written to /var/lib/prosody/auth.jitsi2.test.alt.crt
#ln -s /var/lib/prosody/jitsi2.test.alt.crt /etc/pki/ca-trust/source/anchors/
#ln -s /var/lib/prosody/auth.jitsi2.test.alt.crt /etc/pki/ca-trust/source/anchors/
#update-ca-trust
# prosodyctl register focus auth.jitsi2.test.alt secret2
где secret2 — достаточно длинный пароль.
# prosodyctl start
/etc/jitsi/jicofo/config
следует указать:
# Jitsi Conference Focus settings # sets the host name of the XMPP server JICOFO_HOST=localhost # sets the XMPP domain (default: none) JICOFO_HOSTNAME=jitsi2.test.alt # sets the secret used to authenticate as an XMPP component JICOFO_SECRET=secret1 # overrides the prefix for the XMPP component domain. Default: "focus" #JICOFO_FOCUS_SUBDOMAIN=focus # sets the port to use for the XMPP component connection JICOFO_PORT=5347 # sets the XMPP domain name to use for XMPP user logins JICOFO_AUTH_DOMAIN=auth.jitsi2.test.alt # sets the username to use for XMPP user logins JICOFO_AUTH_USER=focus # sets the password to use for XMPP user logins JICOFO_AUTH_PASSWORD=secret2 # extra options to pass to the jicofo daemon JICOFO_OPTS="${JICOFO_FOCUS_SUBDOMAIN:+ --subdomain=$JICOFO_FOCUS_SUBDOMAIN}" # adds java system props that are passed to jicofo (default are for home and logging config file) JAVA_SYS_PROPS="-Dnet.java.sip.communicator.SC_HOME_DIR_LOCATION=/etc/jitsi -Dnet.java.sip.communicator.SC_HOME_DIR_NAME=jicofo -Dnet.java.sip.communicator.SC_LOG_DIR_LOCATION=/var/log/jitsi -Djava.util.logging.config.file=/etc/jitsi/jicofo/logging.properties"
Важно
JICOFO_SECRET=secret1должен быть указан пароль, установленный в файле
/etc/prosody/conf.d/jitsi2.test.alt.cfg.lua
.
JICOFO_AUTH_PASSWORD=secret2должен быть указан пароль пользователя focus.
/etc/jitsi/jicofo/sip-communicator.properties
следует указать:
org.jitsi.jicofo.health.ENABLE_HEALTH_CHECKS=true org.jitsi.jicofo.BRIDGE_MUC=JvbBrewery@internal.auth.jitsi2.test.alt
# systemctl start jicofo
# curl -i localhost:8888/about/health
HTTP/1.1 500 Internal Server Error
Date: Wed, 27 Sep 2023 09:32:05 GMT
Content-Type: application/json
Content-Length: 56
Server: Jetty(9.4.15.v20190215)
No operational bridges available (total bridge count: 0)
Так как пока ни одного Jitsi Videobridge к серверу не подключено, jicofo ответит кодом ответа 500 и сообщением No operational bridges available. Если в ответе сообщение об ошибке иного рода — следует проверить настройки и связь между prosody и jicofo.
# prosodyctl register jvb auth.jitsi2.test.alt secret3
/etc/jitsi/videobridge/config
на следующее:
# Jitsi Videobridge settings # extra options to pass to the JVB daemon JVB_OPTS="--apis=," # adds java system props that are passed to jvb (default are for home and logging config file) JAVA_SYS_PROPS="-Dnet.java.sip.communicator.SC_HOME_DIR_LOCATION=/etc/jitsi -Dnet.java.sip.communicator.SC_HOME_DIR_NAME=videobridge -Dnet.java.sip.communicator.SC_LOG_DIR_LOCATION=/var/log/jitsi -Djava.util.logging.config.file=/etc/jitsi/videobridge/logging.properties -Dconfig.file=/etc/jitsi/videobridge/application.conf"
/etc/jitsi/videobridge/application.conf
и /etc/jitsi/videobridge/sip-communicator.properties
.
/etc/jitsi/videobridge/application.conf
необходимо указать:
videobridge { stats { enabled = true transports = [ { type = "muc" } ] } apis { xmpp-client { configs { shard { hostname = "localhost" domain = "auth.jitsi2.test.alt" username = "jvb" password = "secret3" muc_jids = "JvbBrewery@internal.auth.jitsi2.test.alt" # The muc_nickname must be unique across all instances muc_nickname = "jvb-mid-123" } } } } }
Важно
password = "secret3"должен быть указан пароль пользователя jvb.
/etc/jitsi/videobridge/sip-communicator.properties
:
org.ice4j.ice.harvest.DISABLE_AWS_HARVESTER=true org.ice4j.ice.harvest.STUN_MAPPING_HARVESTER_ADDRESSES=meet-jit-si-turnrelay.jitsi.net:443 org.jitsi.videobridge.ENABLE_STATISTICS=true org.jitsi.videobridge.STATISTICS_TRANSPORT=muc org.jitsi.videobridge.xmpp.user.shard.HOSTNAME=localhost org.jitsi.videobridge.xmpp.user.shard.DOMAIN=auth.jitsi2.test.alt org.jitsi.videobridge.xmpp.user.shard.USERNAME=jvb org.jitsi.videobridge.xmpp.user.shard.PASSWORD=secret3 org.jitsi.videobridge.xmpp.user.shard.MUC_JIDS=JvbBrewery@internal.auth.jitsi2.test.alt org.jitsi.videobridge.xmpp.user.shard.MUC_NICKNAME=6d8b40cb-fe32-49f5-a5f6-13d2c3f95bba
Примечание
# systemctl start jitsi-videobridge
# curl -i localhost:8888/about/health
HTTP/1.1 200 OK
Date: Wed, 27 Sep 2023 09:39:28 GMT
Content-Length: 0
Server: Jetty(9.4.15.v20190215)
Если всё сделано правильно, jicofo на healthcheck-запрос будет отдавать HTTP-код 200.
Примечание
# openssl genrsa -out rootCA.key 2048
# openssl req -x509 -new -key rootCA.key -days 10000 -out rootCA.crt -subj "/C=RU/ST=Russia/L=Moscow/CN=SuperPlat CA Root"
# openssl genrsa -out jitsi2.test.alt.key 2048
# openssl req -new -key jitsi2.test.alt.key -out jitsi2.test.alt.csr -subj "/C=RU/L=Moscow/CN=jitsi2.test.alt"
# openssl x509 -req -in jitsi2.test.alt.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out jitsi2.test.alt.crt -days 5000
Signature ok
subject=C = RU, CN = jitsi2.test.alt
Getting CA Private Key
/etc/jitsi/meet/
:
#cp jitsi2.test.alt.crt /etc/jitsi/meet/
#cp jitsi2.test.alt.key /etc/jitsi/meet/
/etc/jitsi/meet/jitsi2.test.alt-config.js
на основе /usr/share/jitsi-meet-web-config/config.js
:
# cp /usr/share/jitsi-meet-web-config/config.js /etc/jitsi/meet/jitsi2.test.alt-config.js
Внести изменения в файл /etc/jitsi/meet/jitsi2.test.alt-config.js
в соответствии с настройками серверной части:
var config = { // Connection // hosts: { // XMPP domain. domain: 'jitsi2.test.alt', muc: 'conference.jitsi2.test.alt' }, // BOSH URL. FIXME: use XEP-0156 to discover it. bosh: '//jitsi2.test.alt/http-bind', // Websocket URL // websocket: 'wss://jitsi-meet.example.com/xmpp-websocket', // The name of client node advertised in XEP-0115 'c' stanza clientNode: 'http://jitsi.org/jitsimeet', [...] }
/usr/share/doc/jitsi-meet-web-config-4109/jitsi-meet/jitsi-meet.example-apache
/etc/httpd2/conf/sites-available/jitsi2.test.alt.conf
на основе /usr/share/doc/jitsi-meet-web-config-4109/jitsi-meet/jitsi-meet.example-apache
:
# cp /usr/share/doc/jitsi-meet-web-config-4109/jitsi-meet/jitsi-meet.example-apache /etc/httpd2/conf/sites-available/jitsi2.test.alt.conf
/etc/httpd2/conf/sites-available/jitsi2.test.alt.conf
(изменить имя, указать сертификат):
<VirtualHost *:80> ServerName jitsi2.test.alt Redirect permanent / https://jitsi2.test.alt/ RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </VirtualHost> <VirtualHost *:443> ServerName jitsi2.test.alt SSLProtocol TLSv1 TLSv1.1 TLSv1.2 SSLEngine on SSLProxyEngine on SSLCertificateFile /etc/jitsi/meet/jitsi2.test.alt.crt SSLCertificateKeyFile /etc/jitsi/meet/jitsi2.test.alt.key SSLCipherSuite "EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA256:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EDH+aRSA+AESGCM:EDH+aRSA+SHA256:EDH+aRSA:EECDH:!aNULL:!eNULL:!MEDIUM:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED" SSLHonorCipherOrder on Header set Strict-Transport-Security "max-age=31536000" DocumentRoot "/usr/share/jitsi-meet" <Directory "/usr/share/jitsi-meet"> Options Indexes MultiViews Includes FollowSymLinks AddOutputFilter Includes html AllowOverride All Order allow,deny Allow from all </Directory> ErrorDocument 404 /static/404.html Alias "/config.js" "/etc/jitsi/meet/jitsi2.test.alt-config.js" <Location /config.js> Require all granted </Location> Alias "/external_api.js" "/usr/share/jitsi-meet/libs/external_api.min.js" <Location /external_api.js> Require all granted </Location> ProxyPreserveHost on ProxyPass /http-bind http://localhost:5280/http-bind/ ProxyPassReverse /http-bind http://localhost:5280/http-bind/ RewriteEngine on RewriteRule ^/([a-zA-Z0-9]+)$ /index.html </VirtualHost>
# apt-get install apache2-mod_ssl
#for mod in rewrite ssl headers proxy proxy_http; do a2enmod $mod; done
#a2enport https
#a2dissite 000-default
#a2dissite 000-default_https
# a2ensite jitsi2.test.alt
# systemctl enable --now httpd2
https://jitsi2.test.alt
:
Примечание
Примечание
/etc/prosody/conf.d/jitsi2.test.alt.cfg.lua
, изменив в нем запись:
VirtualHost "jitsi2.test.alt" authentication = "anonymous"на:
VirtualHost "jitsi2.test.alt" authentication = "internal_hashed"
/etc/prosody/conf.d/jitsi2.test.alt.cfg.lua
строки:
VirtualHost "guest.jitsi2.test.alt" authentication = "anonymous" c2s_require_encryption = falseЭти настройки позволят анонимным пользователям присоединяться к конференциям, созданным пользователем, прошедшим аутентификацию. При этом у гостя должен иметься уникальный адрес и пароль конференции (если этот пароль задан);
/etc/jitsi/meet/jitsi2.test.alt-config.js
указать параметры анонимного домена:
domain: 'jitsi2.test.alt', anonymousdomain: 'guest.jitsi2.test.alt',
/etc/jitsi/jicofo/sip-communicator.properties
добавить строку:
org.jitsi.jicofo.auth.URL=XMPP:jitsi2.test.alt
#prosodyctl restart
#systemctl restart jicofo
#systemctl restart jitsi-videobridge
prosodyctl register <ПОЛЬЗОВАТЕЛЬ> jitsi2.test.alt <ПАРОЛЬ>
Изменить пароль пользователя:
prosodyctl passwd <ПОЛЬЗОВАТЕЛЬ>
Удалить пользователя:
prosodyctl deluser <ПОЛЬЗОВАТЕЛЬ>
# prosodyctl register admin jitsi2.test.alt secret4
Примечание
Примечание
hostnamctl
:
# 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 node01
PING 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 node02
PING 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
/etc/openssh/sshd_config
директиву:
AllowGroups sshusersсоздать группу sshusers:
# groupadd sshusers
и добавить туда пользователей, которым разрешено подключаться по ssh:
# gpasswd -a <username> sshusers
Примечание
/etc/openssh/sshd_config
следует перезапустить службу sshd:
# systemctl restart sshd
-N
):
# ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N ""
Важно
#В результате получаем возможность работы с домашними каталогами пользователя user удалённого узла — копировать к себе и от себя, удалять, редактировать и т.д.ssh-copy-id -i ~/.ssh/id_ed25519.pub user@node02
#ssh-copy-id -i ~/.ssh/id_ed25519.pub user@node03
#ssh user@node02
user@node02 $su -
node02 #cat /home/user/.ssh/authorized_keys >> /root/.ssh/authorized_keys
node02 #exit
user@node02 $exit
Важно
/root/.ssh
при этом должен существовать.
# ssh node02 -- uname -n
node02
pcs
или crm
(пакет crmsh).
# apt-get install corosync resource-agents pacemaker pcs
Примечание
Примечание
$ 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:
Status of pacemakerd: 'Pacemaker is running' (last updated 2023-09-27 16:59:12 +02:00)
Cluster Summary:
* Stack: corosync
* Current DC: node01 (version 2.1.5-alt1-a3f44794f) - partition with quorum
* Last updated: Wed Sep 27 16:59:13 2023
* Last change: Wed Sep 27 16:59:09 2023 by hacluster via crmd on node01
* 3 nodes configured
* 0 resource instances configured
Node List:
* Online: [ node01 node02 node03 ]
PCSD Status:
node02: Online
node01: Online
node03: 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:
cluster-infrastructure: corosync
cluster-name: newcluster
dc-version: 2.1.5-alt1-a3f44794f
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
Status of pacemakerd: 'Pacemaker is running' (last updated 2023-09-27 17:14:58 +02:00)
Cluster Summary:
* Stack: corosync
* Current DC: node01 (version 2.1.5-alt1-a3f44794f) - partition with quorum
* Last updated: Wed Sep 27 17:14:58 2023
* Last change: Wed Sep 27 17:14:46 2023 by root via cibadmin 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
Status of pacemakerd: 'Pacemaker is running' (last updated 2023-09-27 17:16:30 +02:00)
Cluster Summary:
* Stack: corosync
* Current DC: node02 (version 2.1.5-alt1-a3f44794f) - partition with quorum
* Last updated: Wed Sep 27 17:16:30 2023
* Last change: Wed Sep 27 17:14:46 2023 by root via cibadmin 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
Таблица 55.1. Системные требования
Компонент
|
ОЗУ
|
ЦП
|
Диск
|
---|---|---|---|
OpenUDS Server
|
2 ГБ
|
2 vCPUs
|
8 ГБ
|
SQL Server
|
1 ГБ
|
2 vCPUs
|
10 ГБ
|
OpenUDS Tunnel
|
2 ГБ
|
2 vCPUs
|
13 ГБ
|
Примечание
# apt-get install mariadb
Запустить сервер mariadb и добавить его в автозагрузку:
# systemctl enable --now mariadb.service
Задать пароль root для mysql и настройки безопасности:
# mysql_secure_installation
$mysql -u root -p
Enter 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;
Примечание
# apt-get install openuds-server-nginx
/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
$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
Примечание
Примечание
Примечание
# 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где 192.168.0.53 — адрес OpenUDS сервера (брокера);
# systemctl enable --now openuds-tunnel.service
# openuds_tunnel_register.py -H 192.168.0.88 -n Tunnel -t 5ba9d52bb381196c2a22e495ff1c9ba4bdc03440b726aa8b
Tunnel token register success. (With token: 5ba9d52bb381196c2a22e495ff1c9ba4bdc03440b726aa8b)
где:
-H
— задаёт IP-адрес туннельного сервера;
-n
— задаёт название туннеля;
-t
— позволяет указать токен туннельного сервера (из файла udstunnel.conf
).
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
либо изменить в файле /etc/tomcat/server.xml
порт 8080 на другой допустимый номер порта, например, 8081:
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
/etc/tomcat/server.xml
добавить новый Connector, в котором указать порт (в примере 10443), сертификат (файл .crt, .pem и т.д.), закрытый ключ (.key, .pem и т.д.):
<Connector port="10443" protocol="org.apache.coyote.http11.Http11AprProtocol" SSLEnabled="true" ciphers="A-CHACHA20-POLY1305,ECDHE-RSA-CHACHA20-POLY1305, ECDHE-ECDSA-AES128-GCM-SHA256,ECDHE-RSA-AES128-GCM-SHA256, ECDHE-ECDSA-AES256-GCM-SHA384,ECDHE-RSA-AES256-GCM-SHA384, DHE-RSA-AES128-GCM-SHA256,DHE-RSA-AES256-GCM-SHA384, ECDHE-ECDSA-AES128-SHA256,ECDHE-RSA-AES128-SHA256, ECDHE-ECDSA-AES128-SHA,ECDHE-RSA-AES256-SHA384, ECDHE-RSA-AES128-SHA,ECDHE-ECDSA-AES256-SHA384, ECDHE-ECDSA-AES256-SHA,ECDHE-RSA-AES256-SHA, DHE-RSA-AES128-SHA256,DHE-RSA-AES128-SHA, DHE-RSA-AES256-SHA256,DHE-RSA-AES256-SHA, ECDHE-ECDSA-DES-CBC3-SHA,ECDHE-RSA-DES-CBC3-SHA, EDH-RSA-DES-CBC3-SHA,AES128-GCM-SHA256,AES256-GCM-SHA384, AES128-SHA256,AES256-SHA256,AES128-SHA,AES256-SHA,DES-CBC3-SHA" 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+TLSv1.1+TLSv1.2" />
# 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
# su -s /bin/bash - openuds -c "cd /usr/share/openuds; python3 manage.py migrate"
/run/openuds/socket
.
Примечание
Примечание
Примечание
Примечание
Примечание
https://192.168.0.53/uds/page/login/AD
).
Важно
Примечание
Примечание
userPrincipalName
, то пользователь при входе должен указать логин в формате имя_пользователя@домен, если указано sAMAccountName
, то в качестве логина используется имя_пользователя без указания домена.
Примечание
Примечание
Примечание
Примечание
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}
— количество машин, доступных в пуле для подключения пользователей;
Примечание
Примечание
Примечание
Важно
Примечание
# 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
#UDSActorRegister
Username: root Password: Pre connect: Run once: Registration with UDS completed.
/path/to/script
, который будет запущен непосредственно перед тем, как пользователь подключится к виртуальному рабочему столу (OPENUDS_ACTOR_PRE_CONNECT);
/path/to/script
, который будет запущен только один раз перед настройкой UDS Actor (OPENUDS_ACTOR_RUN_ONCE);
/path/to/script
, который будет запущен после того, как UDS Actor завершит настройку (OPENUDS_ACTOR_POST_CONFIG);
Примечание
Примечание
Примечание
Важно
Примечание
Примечание
# apt-get install openuds-client
Примечание
Примечание
Примечание
Примечание
Таблица 55.2. Системные требования
Компонент
|
Количество
|
ОЗУ
|
ЦП
|
Диск
|
---|---|---|---|---|
SQL Server
|
2
|
1 ГБ
|
2 vCPUs
|
10 ГБ
|
HAProxy
|
2
|
1 ГБ
|
2 vCPUs
|
10 ГБ
|
OpenUDS Server
|
2
|
2 ГБ
|
2 vCPUs
|
8 ГБ
|
OpenUDS Tunnel
|
2
|
2 ГБ
|
2 vCPUs
|
13 ГБ
|
Примечание
# apt-get install mariadb
Запустить сервер MySQL и добавить его в автозагрузку:
# systemctl enable --now mariadb.service
Задать пароль root и настройки безопасности для MySQL:
# mysql_secure_installation
/etc/my.cnf.d/server.cnf
:
skip-networking
;
server-id
и log-bin
;
server-id
установлено значение 1;
bind-address
и указать IP-адрес сервера (главного):
bind-address 192.168.0.128
# 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'@'%' IDENTIFIED BY 'uds';
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)
/etc/my.cnf.d/server.cnf
:
skip-networking
;
server-id
и log-bin
;
server-id
установить значение 2;
bind-address
и указать IP-адрес сервера (вторичного):
bind-address 192.168.0.129
# 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)
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
и 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 -p
Enter 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;
/var/server/server/settings.py
указать параметры новой БД (это необходимо сделать на всех серверах OpenUDS-Server).
Примечание
# 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
/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 # Default SSL material locations # ca-base /etc/openssl/certs # crt-base /etc/openssl/private # Default ciphers to use on SSL-enabled listening sockets. # For more information, see ciphers(1SSL). This list is from: # https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/ ssl-default-bind-options ssl-min-ver TLSv1.2 prefer-client-ciphers # ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA267:TLS_AES_267_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA267 ssl-default-bind-ciphers ECDH+AESGCM:ECDH+CHACHA20:ECDH+AES267:ECDH+AES128:!aNULL:!SHA1:!AESCCM # ssl-default-server-options ssl-min-ver TLSv1.2 # ssl-default-server-ciphersuites TLS_AES_128_GCM_SHA267:TLS_AES_267_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA267 # ssl-default-server-ciphers ECDH+AESGCM:ECDH+CHACHA20:ECDH+AES267: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
. Содержимое файла зависит от узла, который настраивается:
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 (узнать имя сетевого интерфейса можно, выполнив команду
ip a
).
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 SLAVE 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', # Or path to database file if using sqlite3. 'USER': 'dbuds', # Not used with sqlite3. 'PASSWORD': 'password', # Not used with sqlite3. 'HOST': '192.168.0.128', # Set to empty string for localhost. Not used with sqlite3. 'PORT': '3306', # Set to empty string for default. Not used with sqlite3. } }
#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
к виду:
uds-base-url=http://192.168.0.49/uds/guacamole/auth/5ba9d52bb381196c2a22e495ff1c9ba4bdc03440b726aa8bгде 192.168.0.49 — виртуальный IP-адрес;
/etc/tomcat/server.xml
добавить новый Connector, в котором указать порт (в примере 10443), сертификат (файл .crt, .pem и т.д.), закрытый ключ (.key, .pem и т.д.):
<Connector port="10443" protocol="org.apache.coyote.http11.Http11AprProtocol" SSLEnabled="true" ciphers="A-CHACHA20-POLY1305,ECDHE-RSA-CHACHA20-POLY1305, ECDHE-ECDSA-AES128-GCM-SHA256,ECDHE-RSA-AES128-GCM-SHA256, DHE-RSA-AES128-GCM-SHA256,DHE-RSA-AES256-GCM-SHA384, ECDHE-ECDSA-AES128-SHA256,ECDHE-RSA-AES128-SHA256, ECDHE-ECDSA-AES128-SHA,ECDHE-RSA-AES256-SHA384, ECDHE-RSA-AES128-SHA,ECDHE-ECDSA-AES256-SHA384, ECDHE-ECDSA-AES256-SHA,ECDHE-RSA-AES256-SHA, DHE-RSA-AES128-SHA256,DHE-RSA-AES128-SHA, DHE-RSA-AES256-SHA256,DHE-RSA-AES256-SHA, ECDHE-ECDSA-DES-CBC3-SHA,ECDHE-RSA-DES-CBC3-SHA, EDH-RSA-DES-CBC3-SHA,AES128-GCM-SHA256,AES256-GCM-SHA384, AES128-SHA256,AES256-SHA256,AES128-SHA,AES256-SHA,DES-CBC3-SHA" 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+TLSv1.1+TLSv1.2" />
# systemctl enable --now guacd tomcat
INSERT INTO `uds_tunneltoken` VALUES (ID,'автор добавления','IP-адрес туннеля','IP-адрес туннеля' 'название туннеля','Токен из файла udstunnel.conf','дата добавления');Например:
#mysql -u root -p
MariaDB>USE dbuds;
MariaDB>INSERT INTO `uds_tunneltoken` VALUES (ID,'admin','192.168.0.87','192.168.0.87','Tunnel','5ba9d52bb381196c2a22e495ff1c9ba4bdc03440b726aa8b','2022-11-15');
MariaDB>INSERT INTO `uds_tunneltoken` VALUES (ID,'admin','192.168.0.88','192.168.0.88','Tunnel','9ba4bdc03440b726aa8b5ba9d52bb381196c2a22e495ff1c','2022-11-15');
MariaDB>exit;
Примечание
frontend tunnel-in
файла /etc/haproxy/haproxy.cfg
(в данном примере: 1443):
frontend tunnel-in-guacamole
файла /etc/haproxy/haproxy.cfg
(в данном примере: 10443):
proxmox-backup-client
можно создавать резервные копии и восстанавливать данные (в PVE клиент встроен).
# apt-get install proxmox-backup-server
Примечание
# systemctl enable --now proxmox-backup-proxy.service
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
665243 -rw-r--r-- 1 backup backup 0 мар 31 14:05 .lock
665242 drwxr-x--- 1 backup backup 1,1M мар 31 14:05 .chunks
665240 drwxr-xr-x 3 root root 4,0K мар 31 13:56 ..
665241 drwxr-xr-x 3 backup backup 4,0K мар 31 14:05
где:
.lock
— пустой файл, используемый для блокировки процесса;
.chunks
— содержит подкаталоги, с именами от 0000 до ffff. В этих каталогах будут храниться фрагментированные данные, полученные после выполнения операции резервного копирования.
# 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
). Пароль шифруется с использованием метода хеширования SHA-256.
# 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
. Файл содержит 5 полей, разделенных двоеточием (':'):
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
/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
Примечание
# proxmox-backup-manager
sync-job create test_job --remote pbs2 \
--remote-store remotestore --store zfs_st --schedule 'Sat 18:15'
# proxmox-backup-manager sync-job list
# proxmox-backup-manager sync-job update test_job --comment 'offsite'
# proxmox-backup-manager remote remove pbs2
[[пользователь@]сервер[:порт]:]datastoreЗначение по умолчанию для пользователя — root@pam. Если сервер не указан, используется — localhost.
--repository
, или установив переменную окружения PBS_REPOSITORY, например:
# export PBS_REPOSITORY=pbs.test.alt:store1
Таблица 56.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
Starting backup: host/host-01/2024-11-08T10:27:26Z
Client name: host-01
Starting backup protocol: Fri Nov 8 12:27:28 2024
fingerprint: 5b:ed:9e:af:a5:ac:48:5b:4a:64:5d:05:10:b0:fb:02:75:0f:f3:fe:e8:6b:82:51:a0:aa:5f:aa:68:90:3d:f1
Are you sure you want to continue connecting? (y/n): y
No previous manifest available.
Upload directory '/home/user/' to 'pbs.test.alt:store1' as user.pxar.didx
user.pxar: had to backup 667.04 MiB of 667.04 MiB (compressed 190.182 MiB) in 26.22s
user.pxar: average backup speed: 25.436 MiB/s
Uploaded backup catalog (109.948 KiB)
Duration: 9.59s
End Time: Fri Nov 8 12:27:38 2024
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
Starting backup: host/host-01/2024-11-08T12:48:58Z
Client name: host-01
Starting backup protocol: Fri Nov 8 14:49:00 2024
storing login ticket failed: $XDG_RUNTIME_DIR must be set
No previous manifest available.
Upload image '/dev/mylvm/mydata' to 'pbs.test.alt:zfs_st' as mydata.img.fidx
mydata.img: had to backup 4.355 GiB of 20.43 GiB (compressed 2.018 GiB) in 77.94s
mydata.img: average backup speed: 57.226 MiB/s
mydata.img: backup was done incrementally, reused 16.074 GiB (78.7%)
Duration: 81.86s
End Time: Fri Nov 8 14:50:22 2024
Примечание
'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_s.pxar:/home/user/ --repository pbs.test.alt:store1 --keyfile ./my-backup.key
Password for "root@pam": ***
Starting backup: host/host-01/2024-11-08T10:29:25Z
Client name: host-01
Starting backup protocol: Fri Nov 8 12:29:25 2024
Using encryption key from './my-backup.key'..
Encryption Key Password: ********
Encryption key fingerprint: 31:96:7f:6f:80:1f:0c:b4
Downloading previous manifest (Fri Nov 8 12:27:26 2024)
Upload directory '/home/user/' to '192.168.0.123:store1' as user_s.pxar.didx
user_s.pxar: had to backup 667.04 MiB of 667.04 MiB (compressed 190.028 MiB) in 21.16s
user_s.pxar: average backup speed: 31.518 MiB/s
Uploaded backup catalog (109.971 KiB)
Duration: 5.77s
End Time: Fri Nov 8 12:29:31 2024
$ proxmox-backup-client snapshot list --repository pbs.test.alt:store1
Password for "root@pam": ******
┌─────────────────────────────────────┬────────────┬─────────────────────────────────────┐
│ snapshot │ size │ files │
╞═════════════════════════════════════╪════════════╪═════════════════════════════════════╡
│ host/host-01/2024-11-08T10:27:26Z │ 25.359 KiB │ catalog.pcat1 index.json user.pxar │
├─────────────────────────────────────┼────────────┼─────────────────────────────────────┤
│ host/host-01/2024-11-08T10:23:34Z │ 25.989 KiB │ catalog.pcat1 index.json user_s.pxar│
└─────────────────────────────────────┴────────────┴─────────────────────────────────────┘
$ proxmox-backup-client catalog dump host/host-01/2024-11-08T10:27:26Z --repository pbs.test.alt:store1
proxmox-backup-client restore <снимок> <имя-архива> <целевой-путь> [ОПЦИИ]Восстановить архив user.pxar в каталог
/home/user/restore
:
$ proxmox-backup-client restore host/host-01/2024-11-08T10:27:26Z user.pxar /home/user/restore --repository pbs.test.alt:store1
index.json
в репозитории по целевому пути «-»:
$ proxmox-backup-client restore host/host-01/2024-11-08T10:27:26Z index.json - --repository pbs.test.alt:store1
При этом содержимое архива будет выведено на стандартный вывод.
$ proxmox-backup-client catalog shell host/host-01/2024-11-08T10:27:26Z 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/
— восстановить все файлы в архиве, соответствующие шаблонам в /home/user/restore/
на локальном хосте;
restore /home/user/conf/ --pattern *.conf
— восстановить все файлы с расширением .conf в /home/user/conf/
на локальном хосте.
proxmox-backup-client
, потребуется ввести пароль пользователя. Сервер проверяет учётные данные и отправляет билет, действительный в течение двух часов. Клиент использует этот билет для последующих запросов к этому серверу.
$ 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
), будет отформатирован только первый раздел.
# lsmod | grep sg
Если команда не вывела результата, необходимо загрузить модуль sg:
# modprobe sg
Чтобы модуль sg загружался при загрузке системы, необходимо создать файл /etc/modules-load.d/sg.conf
, в который добавить имя модуля sg:
# 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
Возможные команды:
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 — произвольное имя.
Примечание
# 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 │ │ │
└───────────────┴──────────┴────────────┴─────────────┘
--eject-before-unload
(необходим для некоторых устройств, которым требуется извлечение ленты перед выгрузкой из привода):
# 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 TAPELIB1 --path /dev/tape/by-id/scsi-<цифры>-sg
Примечание
# proxmox-tape drive update TAPELIB1 --changer CHGR1 --changer-drivenum 0
Параметр --changer-drivenum
необходим только в том случае, если ленточная библиотека включает более одного привода (команда proxmox-tape changer status
выводит список всех номеров накопителей).
# proxmox-tape drive config mydrive
┌─────────┬────────────────────────────────┐
│ Name │ Value │
╞═════════╪════════════════════════════════╡
│ name │ mydrive │
├─────────┼────────────────────────────────┤
│ path │ /dev/tape/by-id/scsi-12345-sg │
├─────────┼────────────────────────────────┤
│ changer │ CHGR1 │
└─────────┴────────────────────────────────┘
Примечание
--changer-drivenum
, не сохраняется в конфигурации, поскольку используется по умолчанию.
# 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
.
Примечание
Примечание
Примечание
Примечание
# 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
myjob --store pve-backup \
--pool mypool --drive mydrive --schedule daily
--latest-only
:
# 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
извлекает ленту, гарантируя, что следующая резервная копия не сможет использовать ленту (если только кто-то вручную не загрузит ленту). Для ленточных библиотек этот параметр выгружает ленту в свободный слот.
Примечание
--export-media-set
перемещает все ленты из набора носителей в слот экспорта, гарантируя, что следующая резервная копия не сможет использовать эти ленты:
# proxmox-tape backup-job update job2 --export-media-set
Примечание
--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
можно опустить, чтобы разрешить использование ленты любым пулом.
Примечание
# 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
можно передавать несколько раз, чтобы восстановить несколько снимков одним действием восстановления.
Примечание
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 2024"
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 2024 │
└───────────────────────────────────────────────────┴───────────────┘
# proxmox-tape key show aa:8e:53:82:9f:b0:37:9b: ... :2f:22:db:2e:89
┌─────────────┬───────────────────────────────────────────────┐
│ Name │ Value │
╞═════════════╪═══════════════════════════════════════════════╡
│ kdf │ scrypt │
├─────────────┼───────────────────────────────────────────────┤
│ created │ Wed Jul 24 09:03:45 2024 │
├─────────────┼───────────────────────────────────────────────┤
│ modified │ Wed Jul 24 09:03:45 2024 │
├─────────────┼───────────────────────────────────────────────┤
│ fingerprint │ aa:8e:53:82:9f:b0:37:9b: ... :2f:22:db:2e:89 │
├─────────────┼───────────────────────────────────────────────┤
│ hint │ tape pw 2024 │
└─────────────┴───────────────────────────────────────────────┘
# 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
Эта команда делает следующее:
Примечание
# 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": 1709304813,
"disable_delete": true,
"id": 3,
"incremental": 0,
"size_bytes": 49182025
}
,{
"archived": 0,
"backuptime": 1709304721,
"id": 2,
"incremental": 0,
"size_bytes": 684214036
}
]
$ urbackupclientctl start -f
Waiting for server to start backup... done
Preparing... -
Completed successfully.
# urbackupclientctl restore-start -b 2
Starting restore. Waiting for backup server... done
[=============================================================> ] 97% 2.33831 GB/2.41119 GB at 76.024 KBit/s
Restore completed successfully.
Содержание
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 all
apt-repo
add p10
# apt-repo set p10
sources.list
репозитория на сменном диске в APT предусмотрена специальная утилита — apt-cdrom
.
Acquire::CDROM::mount
в файле конфигурации APT (/etc/apt/apt.conf
), по умолчанию это /media/ALTLinux
:
# mkdir /media/ALTLinux
# mount /dev/носитель /media/ALTLinux
где /dev/носитель
— соответствующее блочное устройство (например, /dev/dvd
— для CD/DVD-диска).
# apt-cdrom -m add
sources.list
появится запись о подключённом носителе:
rpm cdrom:[ALT Server 10.4 x86_64 build 2024-10-16]/ ALTLinux main
Примечание
mount /dev/носитель /media/ALTLinux
необходимо выполнять перед каждой командой apt-get install имя_пакета
.
/etc/apt/sources.list.d/
.
Примечание
alt.list
может содержаться такая информация:
# ftp.altlinux.org (ALT Linux, Moscow) # ALT Linux Platform 10 #rpm [p10] ftp://ftp.altlinux.org/pub/distributions/ALTLinux/p10/branch x86_64 classic #rpm [p10] ftp://ftp.altlinux.org/pub/distributions/ALTLinux/p10/branch x86_64-i586 classic #rpm [p10] ftp://ftp.altlinux.org/pub/distributions/ALTLinux/p10/branch noarch classic rpm [p10] http://ftp.altlinux.org/pub/distributions/ALTLinux/p10/branch x86_64 classic rpm [p10] http://ftp.altlinux.org/pub/distributions/ALTLinux/p10/branch x86_64-i586 classic rpm [p10] http://ftp.altlinux.org/pub/distributions/ALTLinux/p10/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
&&update
apt-get
dist-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
epm
упрощает процедуру управления пакетами, может использоваться в скриптах и установщиках, сервисных программах, в повседневном администрировании различных систем. В epm
добавлены типовые операции, которые в случае использования apt потребовали бы ввода более одной команды.
Примечание
epm
, если она еще не установлена, выполняется командой:
# apt-get install eepm
epm
и её опциях можно получить, выполнив команду:
$ epm --help
Ниже описаны лишь некоторые возможности утилиты epm
.
# epm install <имя_пакета>
Важно
epm install
не будут выполнены установочные скрипты из пакета. Это предохраняет систему от повреждения, но может привести к тому, что пакет не заработает. Вернуть стандартное поведение можно добавлением --scripts
:
# epm install --scripts <имя_пакета>
# epm play <имя_программы>
Список программ, которые можно установить данной командой, можно просмотреть, выполнив команду:
$ epm play
Run with a name of a play script to run:
anydesk - Install AnyDesk from the official site
assistant - Install Assistant (Ассистент) from the official site
…
yandex-browser - Install Yandex browser from the official site
yandex-disk - Install Yandex Disk from the official site
zoom - Install Zoom client from the official site
Команда epm play
требует наличия доступа в сеть Интернет.
Примечание
# epm install --repack <имя_пакета>
Для deb-пакетов ключ --repack
применяется автоматически.
# epm remove <имя_пакета>
# epm search <текст>
$ epm list
# epm autoremove
# epm full-upgrade
Содержание
/
.
/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
$
guguile
gunzip
gupnp-binding-tool
gunzip
— это единственное имя, третьей буквой которого является «n»), а затем нажать клавишу Tab, то оболочка самостоятельно дополнит имя. Чтобы запустить команду нужно нажать Enter.
$PATH
. По умолчанию в этот перечень каталогов не входит текущий каталог, обозначаемый ./
(точка слеш) (если только не выбран один из двух самых слабых уровней защиты). Поэтому, для запуска программы из текущего каталога, необходимо использовать команду (в примере запускается команда prog
):
./prog
cal
, выводящая календарь на текущий месяц.
$
cal
Сентябрь 2023 Пн Вт Ср Чт Пт Сб Вс 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
Команда$
cal
1 2024
Январь 2024 Пн Вт Ср Чт Пт Сб Вс 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 2024
состоит из двух частей — собственно команды cal
и «остального». То, что следует за командой называется параметрами (или аргументами) и они вводятся для изменения поведения команды. В большинстве случаев, первое слово считается именем команды, а остальные — её параметрами.
date
, только для работы по Гринвичу ей нужен дополнительный параметр -u
(он же --universal
).
$date
Ср 27 сен 2023 18:58:50 EET
$date
-u
Ср 27 сен 2023 16:59:09 UTC
--help
. К примеру, получить подсказку о том, что делает команда rm
, можно, набрав в терминале rm
--help
.
man
. Пример:
$man
ls
Примечание
ls
-l
-F
можно ввести команду ls
-lF
Учетные записи пользователей
su
su
позволяет изменить «владельца» текущего сеанса (сессии) без необходимости завершать сеанс и открывать новый.
su
[ОПЦИИ...] [ПОЛЬЗОВАТЕЛЬ]
su -
будет запрошен пароль суперпользователя (root), и, в случае ввода корректного пароля, пользователь получит права администратора. Чтобы вернуться к правам пользователя, необходимо ввести команду:
exit
id
id
выводит информацию о пользователе и группах, в которых он состоит, для заданного пользователя или о текущем пользователе (если ничего не указано).
id
[ОПЦИИ...] [ПОЛЬЗОВАТЕЛЬ]
passwd
passwd
меняет (или устанавливает) пароль, связанный с входным_именем пользователя.
Основные операции с файлами и каталогами
ls
ls
(list) печатает в стандартный вывод содержимое каталогов.
ls
[ОПЦИИ...] [ФАЙЛ...]
-a
— просмотр всех файлов, включая скрытые;
-l
— отображение более подробной информации;
-R
— выводить рекурсивно информацию о подкаталогах.
cd
cd
предназначена для смены каталога. Команда работает как с абсолютными, так и с относительными путями. Если каталог не указан, используется значение переменной окружения $HOME
(домашний каталог пользователя). Если каталог задан полным маршрутным именем, он становится текущим. По отношению к новому каталогу нужно иметь право на выполнение, которое в данном случае трактуется как разрешение на поиск.
cd
[-L|-P] [КАТАЛОГ]
$OLDPWD
. Если переход был осуществлен по переменной окружения $CDPATH
или в качестве аргумента был задан «-» и смена каталога была успешной, то абсолютный путь нового рабочего каталога будет выведен на стандартный вывод.
docs/
(относительный путь):
cd
docs/
/usr/bin
(абсолютный путь):
cd
/usr/bin/
cd
..
cd
-
cd
pwd
pwd
выводит абсолютный путь текущего (рабочего) каталога.
pwd
[-L|-P]
-P
— не выводить символические ссылки;
-L
— выводить символические ссылки.
rm
rm
служит для удаления записей о файлах. Если заданное имя было последней ссылкой на файл, то файл уничтожается.
Предупреждение
rm
[ОПЦИИ...]
<ФАЙЛ>
-f
— никогда не запрашивать подтверждения;
-i
— всегда запрашивать подтверждение;
-r, -R
— рекурсивно удалять содержимое указанных каталогов.
html
в каталоге ~/html
:
rm
-i
~/html/*.html
mkdir
mkdir
— команда для создания новых каталогов.
mkdir
[-p] [-m права] <КАТАЛОГ...>
rmdir
rmdir
удаляет каталоги из файловой системы. Каталог должен быть пуст перед удалением.
rmdir
[ОПЦИИ...] <КАТАЛОГ...>
-p
— удалить каталог и его потомки.
rmdir
часто заменяется командой rm -rf
, которая позволяет удалять каталоги, даже если они не пусты.
cp
cp
предназначена для копирования файлов из одного в другие каталоги.
cp
[-fip] [ИСХ_ФАЙЛ...] [ЦЕЛ_ФАЙЛ...]
cp
[-fip] [ИСХ_ФАЙЛ...] [КАТАЛОГ]
cp
[-R] [[-H] | [-L] | [-P]] [-fip] [ИСХ_ФАЙЛ...] [КАТАЛОГ]
-p
— сохранять по возможности времена изменения и доступа к файлу, владельца и группу, права доступа;
-i
— запрашивать подтверждение перед копированием в существующие файлы;
-r, -R
— рекурсивно копировать содержимое каталогов.
mv
mv
предназначена для перемещения файлов.
mv
[-fi] [ИСХ_ФАЙЛ...] [ЦЕЛ_ФАЙЛ...]
mv
[-fi] [ИСХ_ФАЙЛ...] [КАТАЛОГ]
mv
перемещает исх_файл в цел_файл (происходит переименование файла).
mv
перемещает исходные файлы в указанный каталог под именами, совпадающими с краткими именами исходных файлов.
-f
— не запрашивать подтверждения перезаписи существующих файлов;
-i
— запрашивать подтверждение перезаписи существующих файлов.
cat
cat
последовательно выводит содержимое файлов.
cat
[ОПЦИИ...] [ФАЙЛ...]
-n, --number
— нумеровать все строки при выводе;
-E, --show-ends
— показывать $ в конце каждой строки.
head
head
выводит первые 10 строк каждого файла на стандартный вывод.
head
[ОПЦИИ] [ФАЙЛ...]
-n, --lines=[-]K
— вывести первые К строк каждого файла, а не первые 10;
-q, --quiet
— не печатать заголовки с именами файлов.
less
less
позволяет постранично просматривать текст (для выхода необходимо нажать q).
less
<ФАЙЛ>
grep
grep
имеет много опций и предоставляет возможности поиска символьной строки в файле.
grep
[шаблон_поиска] <ФАЙЛ>
Поиск файлов
find
find
предназначена для поиска всех файлов, начиная с корневого каталога. Поиск может осуществляться по имени, типу или владельцу файла.
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 {} \;
whereis
whereis
сообщает путь к исполняемому файлу программы, ее исходным файлам (если есть) и соответствующим страницам справочного руководства.
whereis
[ОПЦИИ...] <ФАЙЛ>
-b
— вывод информации только об исполняемых файлах;
-m
— вывод информации только о страницах справочного руководства;
-s
— вывод информации только об исходных файлах.
Мониторинг и управление процессами
ps
ps
отображает список текущих процессов.
ps
[ОПЦИИ...]
-a
— вывести информацию о процессах, ассоциированных с терминалами;
-f
— вывести «полный» список;
-l
— вывести «длинный» список;
-p список
— вывести информацию о процессах с перечисленными в списке PID;
-u список
— вывести информацию о процессах с перечисленными идентификаторами или именами пользователей.
kill
kill
позволяет прекратить исполнение процесса или передать ему сигнал.
kill
[-s] [сигнал] [идентификатор] [...]
kill
[-l] [статус_завершения]
kill
[-номер_сигнала] [идентификатор] [...]
-l
— вывести список поддерживаемых сигналов;
-s сигнал, -сигнал
— послать сигнал с указанным именем.
kill
не дает желательного эффекта, необходимо использовать команду kill
с параметром -9
(kill
-9
PID_номер).
df
df
показывает количество доступного дискового пространства в файловой системе, в которой содержится файл, переданный как аргумент. Если ни один файл не указан, показывается доступное место на всех смонтированных файловых системах. Размеры по умолчанию указаны в блоках по 1КБ.
df
[ОПЦИИ] [ФАЙЛ...]
--total
— подсчитать общий объем в конце;
-h, --human-readable
— печатать размеры в удобочитаемом формате (например, 1K, 234M, 2G).
du
du
подсчитывает использование диска каждым файлом, для каталогов подсчет происходит рекурсивно.
du
[ОПЦИИ] [ФАЙЛ...]
-a, --all
— выводить общую сумму для каждого заданного файла, а не только для каталогов;
-c, --total
— подсчитать общий объем в конце. Может быть использовано для выяснения суммарного использования дискового пространства для всего списка заданных файлов;
-d, --max-depth=N
— выводить объем для каталога (или файлов, если указано --all
) только если она на N или менее уровней ниже аргументов командной строки;
-S, --separate-dirs
— выдавать отдельно размер каждого каталога, не включая размеры подкаталогов;
-s, --summarize
— отобразить только сумму для каждого аргумента.
which
which
отображает полный путь к указанным командам или сценариям.
which
[ОПЦИИ] <ФАЙЛ...>
-a, --all
— выводит все совпавшие исполняемые файлы по содержимому в переменной окружения $PATH
, а не только первый из них;
-c, --total
— подсчитать общий объем в конце. Может быть использовано для выяснения суммарного использования дискового пространства для всего списка заданных файлов;
-d, --max-depth=N
— выводить объем для каталога (или файлов, если указано --all
) только если она на N или менее уровней ниже аргументов командной строки;
-S, --separate-dirs
— выдавать отдельно размер каждого каталога, не включая размеры подкаталогов;
--skip-dot
— пропускает все каталоги из переменной окружения $PATH
, которые начинаются с точки.
Использование многозадачности
bg
bg
позволяет перевести задание на задний план.
bg
[ИДЕНТИФИКАТОР ...]
fg
fg
позволяет перевести задание на передний план.
fg
[ИДЕНТИФИКАТОР ...]
Сжатие и упаковка файлов
tar
tar
, которая преобразует файл или группу файлов в архив без сжатия (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
, а членам группы и прочим пользователям только читать. Команду можно записать двумя способами:
$chmod
644 f1 $chmod
u=rw,go=r f1
f2
:
$ chmod
+x f2
f3
:
$ chmod
+t f3
f4
:
$chmod
=rwx,g+s f4 $chmod
2777 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
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=500(test) gid=500(test) группы=500(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
:
#useradd
test1 #passwd
test1 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=40) — максимально допустимая длина пароля. Эта опция может быть использована для того, чтобы запретить пользователям устанавливать пароли, которые могут быть слишком длинными для некоторых системных служб. Значение 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=42) — размер случайно сгенерированных парольных фраз в битах (от 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
Последний раз пароль был изменён : дек 27, 2023
Срок действия пароля истекает : янв 01, 2024
Пароль будет деактивирован через : янв 11, 2024
Срок действия учётной записи истекает : никогда
Минимальное количество дней между сменой пароля : -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.
Таблица 68.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
|
Используется, когда вы создаете новую службу или модифицируете любую конфигурацию
|
journalctl
. По умолчанию, больше не требуется запуск службы syslog.
journalctl
с разными ключами:
journalctl
-b
— покажет сообщения только с текущей загрузки;
journalctl
-f
— покажет только последние сообщения.
journalctl
_PID
=1 — покажет сообщения первого процесса (init).
journalctl
. Для этого используйте команду man journalctl
.
man
(сокращение от manual). Каждая страница руководства посвящена одному объекту системы. Для того чтобы прочесть страницу руководства по программе, необходимо набрать man
название_программы. К примеру, если вы хотите узнать, какие опции есть у команды date
, вы можете ввести команду:
$
man
date
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.44 находится в /usr/share/doc/file-5.44
. Для получения полного списка файлов документации, относящихся к пакету, воспользуйтесь командой rpm
-qd
имя_установленного_пакета.
README
, FAQ
, TODO
, СhangeLog
и другие. В файле README
содержится основная информация о программе — имя и контактные данные авторов, назначение, полезные советы и пр. FAQ
содержит ответы на часто задаваемые вопросы; этот файл стоит прочитать в первую очередь, если у вас возникли проблемы или вопросы по использованию программы, поскольку большинство проблем и сложностей типичны, вполне вероятно, что в FAQ
вы тут же найдёте готовое решение. В файле TODO
записаны планы разработчиков на реализацию той или иной функциональности. В файле СhangeLog
записана история изменений в программе от версии к версии.
rpm
-qi
имя_установленного_пакета. В информационном заголовке соответствующего пакета, среди прочей информации, будет выведена искомая ссылка.
Содержание
Примечание
cryptsetup
. Ниже описаны лишь некоторые возможности утилиты cryptsetup
. Для получения более подробной информации используйте команду man cryptsetup
.
# cryptsetup luksDump /dev/sdb1 | grep Slot
Key Slot 0: DISABLED
Key Slot 1: ENABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
где /dev/sdb1
— шифрованный раздел.
Примечание
# cryptsetup isLuks -v /dev/sdb1
Команда выполнена успешно.
Определить какой раздел является шифруемым можно, выполнив команду:
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 18G 0 disk
├─sda1 8:1 0 1023M 0 part [SWAP]
└─sda2 8:2 0 17G 0 part /
sdb 8:16 0 18G 0 disk
└─sdb1 8:17 0 18G 0 part
└─luks-7853363d-e7e2-1a42-b5b9-0af119e19920 253:0 0 18G 0 crypt /home
sr0 11:0 1 1024M 0 rom
--key-file
):
# cryptsetup luksAddKey /dev/sdb1
Введите любую существующую парольную фразу:
Введите новую парольную фразу для слота ключа:
Парольная фраза повторно:
Пароль будет назначен в первый свободный слот:
# cryptsetup luksDump /dev/sdb1 | grep Slot
Key Slot 0: ENABLED
Key Slot 1: ENABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
Можно указать номер определенного слота с помощью опции --key-slot
, например:
# cryptsetup luksAddKey /dev/sdb1 --key-slot 5
Примечание
Важно
--key-file
):
# cryptsetup luksChangeKey /dev/sdb1
Введите изменяемую парольную фразу:
Введите новую парольную фразу:
Парольная фраза повторно:
Если задан номер слота (опцией --key-slot
), нужно ввести старый пароль именно для заданного слота, и замена пароля произойдёт тоже в этом слоте. Если номер слота не задан и есть свободный слот, то сначала новый пароль будет записан в свободный слот, а потом будет затёрт слот, содержащий старый пароль. Если свободных слотов не окажется, то новый пароль будет записан прямо в слот, ранее содержащий старый пароль.
# cryptsetup luksRemoveKey /dev/sdb1
Введите удаляемую парольную фразу:
Важно
-q
) удаление даже последнего пароля будет выполнено без каких-либо предупреждений. Если ни одного пароля не останется (то есть все слоты ключей будут пусты), дешифровать LUKS-раздел станет невозможно.
# dmsetup table --showkey
luks-7853363d-e7e2-1a42-b5b9-0af119e19920: 0 37730304 crypt aes-cbc-essiv:sha256 b15c22e8d60a37bcd27fb438637a8221fbec66c83be46d33a8331a4002cf3144 0 8:17 4096
Часть поля после «aes-cbc-essiv:sha256» является зашифрованным паролем.
# echo "b15c22e8d60a37bcd27fb438637a8221fbec66c83be46d33a8331a4002cf3144" > lukskey.txt
# xxd -r -p lukskey.txt lukskey.bin
luks-7853363d-e7e2-1a42-b5b9-0af119e19920: 0 37730304 crypt aes-cbc-essiv:sha256 b15c22e8d60a37bcd27fb438637a8221fbec66c83be46d33a8331a4002cf3144 0 8:17 4096
# cryptsetup luksAddKey /dev/sdb1 --master-key-file <(cat lukskey.bin)
Введите новую парольную фразу для слота ключа:
Парольная фраза повторно:
Важно
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
# 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.socket
# netstat -ant | grep 21
tcp 0 0 :::21 :::* 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.131
Hello, World
Происходит обращение к серверу и получение данных по протоколу http.
auditctl
— программа, управляющая поведением системы аудита и позволяющая контролировать текущее состояние системы, создавать или удалять правила;
aureport
— программа, генерирующая суммарные отчёты о работе системы аудита;
ausearch
— программа, позволяющая производить поиск событий в журнальных файлах;
autrace
— программа, выполняющая аудит событий, порождаемых указанным процессом.
/etc/audit/auditd.conf
, правила аудита, загружаемые при запуске службы, хранятся в файле /etc/audit/audit.rules
.
ausearch
и aureport
. Команда auditctl
позволяет настраивать правила аудита. Кроме того, при загрузке загружаются правила из файла /etc/audit.rules
. Некоторые параметры самой службы можно изменить в файле auditd.conf
.
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/rules.d/
— каталог, содержащий отдельные наборы правил, которые будут скомпилированы в один файл утилитой augenrules
.
audit=1
. В противном случае аудит некоторых процессов будет невозможен.
/etc/audit/auditd.conf
определяются параметры службы аудита. Директива состоит из ключевого слова (названия параметра), знака равенства и соответствующих ему данных (значения параметра). На одной строке может быть не больше одной директивы. Все названия и значения параметров чувствительны к регистру. Допустимые ключевые слова перечислены и описаны ниже. Каждая строка должна быть ограничена 160 символами, иначе она будет пропущена. К файлу можно добавить комментарии, начав строку с символа «#».
Таблица 73.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 [опции]
Таблица 73.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
|
Игнорировать ошибки при чтении правил из файла.
|
--loginuid-immutable
|
Сделать login UID неизменяемым сразу после его установки. Для изменения login UID требуется CAP_AUDIT_CONTROL, поэтому непривилегированный пользователь не может его изменить. Установка этого параметра может вызвать проблемы в некоторых контейнерах.
|
-q точка-<монтирования,поддерево>
|
При наличии точки наблюдения за каталогом и объединении или перемещении монтирования другого поддерева в наблюдаемое поддерево, необходимо указать ядру, сделать монтируемое поддерево эквивалентным просматриваемому каталогу. Если поддерево уже смонтировано во время создания точки наблюдения за каталогом, поддерево автоматически помечается для просмотра. Эти два значения разделяет запятая, отсутствие запятой приведет к ошибке.
|
-r <частота>
|
Установить ограничение скорости выдачи сообщений в секунду (0 — нет ограничения). В случае если эта частота не нулевая, и она превышается в ходе аудита, флаг сбоя выставляется ядром для выполнения соответствующего действия. Значение, установленное по умолчанию — 0.
|
--reset-lost
|
Сбросить счетчик потерянных записей, отображаемых командой статуса.
|
-R <файл>
|
Читать правила из файла. Правила должны быть организованы следующим образом: располагаться по одному в строке и в том порядке, в каком должны исполняться. Накладываются следующие ограничения: владельцем файла должен быть root, и доступ на чтение должен быть только у него. Файл может содержать комментарии, начинающиеся с символа «#». Правила, расположенные в файле, идентичны тем, что набираются в командной строке, без указания слова auditctl.
|
-t
|
Обрезать поддеревья после команды монтирования.
|
Таблица 73.3. Опции состояния команды auditctl
Опция
|
Описание
|
---|---|
-l
|
Вывести список всех правил по одному правилу в строке. Этой команде могут быть предоставлены две опции: ключ фильтрации (
-k ), чтобы вывести список правил, соответствующих ключу, либо опция (-i ) интерпретирующая значения полей от a0 до a3, для корректного определения значений аргументов системных вызовов.
|
-m <текст>
|
Послать в систему аудита пользовательское сообщение. Команда может быть выполнена только из-под учетной записи root.
|
-s
|
Получить статус аудита. Будут показаны значения, которые можно установить с помощью опций
-e , -f , -r и -b . Значение pid — это номер процесса службы аудита. Значение pid 0 указывает, что служба аудита не работает. Поле lost сообщает, сколько записей событий аудита было отброшено из-за переполнения буфера аудита. Поле backlog сообщает, сколько записей событий аудита находится в очереди, ожидая, когда auditd прочитает их. С этим параметром можно использовать опцию -i для интерпретации значений некоторых полей.
|
-v
|
Вывести версию auditctl.
|
Таблица 73.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 <путь>
|
Удалить точку наблюдения за файловым объектом.
|
Таблица 73.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 [опции]
Таблица 73.6. Опции команды aureport
Опция
|
Описание
|
---|---|
-au, --auth
|
Отчёт о попытках аутентификации.
|
-a, --avc
|
Отчёт о avc сообщениях.
|
--comm
|
Отчёт о выполнении команд.
|
-c, --config
|
Отчёт об изменениях конфигурации.
|
-cr, --crypto
|
Отчёт о событиях, связанных с кодированием.
|
-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
|
Отчёт об изменениях пользовательских учетных записей.
|
-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, --verbose
|
Вывести версию программы и выйти.
|
-x, --executable
|
Отчёт об исполняемых объектах.
|
now
— сейчас;
recent
— десять минут назад;
boot
— время за секунду до того, когда система загружалась в последний раз;
today
— первая секунда после полуночи текущего дня;
yesterday
— первая секунда после полуночи предыдущего дня;
this-week
— первая секунда после полуночи первого дня текущей недели, первый день недели определяется из региональных настроек;
week-ago
— первая секунда после полуночи ровно 7 дней назад;
this-month
— первая секунда после полуночи первого числа текущего месяца;
this-year
— первая секунда после полуночи первого числа первого месяца текущего года.
ausearch
является инструментом поиска по журналу аудита. ausearch
может также принимать данные со стандартного ввода (stdin) до тех пор, пока на входе будут необработанные данные логов. Все условия, указанные в параметрах, объединяются логическим «И».
ausearch
показывает все записи события вместе. Это означает, что при запросе определенных записей результат может содержать записи SYSCALL.
ausearch [опции]
Таблица 73.7. Опции команды ausearch
Опция
|
Описание
|
---|---|
-a, --event <идентификатор события>
|
Искать события с заданным идентификатором события. В сообщении: msg=audit(1116360555.329:2401771), идентификатор события — число после «:». Все события аудита, связанные с одним системным вызовом, имеют одинаковый идентификатор.
|
--arch <CPU>
|
Искать события на основе определенной архитектуры процессора. Для определения архитектуры необходимо использовать команду
uname –m . В случае, если архитектура ПЭВМ неизвестна, необходимо использовать таблицу 32-х битных системных вызовов, если она поддерживается ПЭВМ, можно использовать b32. Аналогичным образом применяется таблица системных вызовов b64.
|
-c, --comm <comm-name>
|
Искать события с заданным «comm name», именем исполняемого файла из структуры задачи.
|
--debug
|
Вывести сообщения, пропущенные stderr.
|
--checkpoint <файл контрольной точки>
|
Контрольная точка — это вывод между последовательными вызовами ausearch, так что в последующих вызовах будут выводиться только события, не попавшие в предыдущий вывод.
Событие auditd состоит из одной или нескольких записей. При обработке события ausearch определяет события как завершенные и незавершенные. Завершенное событие — это одно событие записи или то, которое произошло раньше, чем за две секунды по сравнению с текущим обрабатываемым событием. Контрольная точка обеспечивается путем записи последнего завершенного события вывода вместе с номером устройства и индексом файла последнего завершившегося события в файл контрольной точки. При следующем вызове ausearch загрузит данные контрольной точки и при обработке файлов журнала, будет отбрасывать все завершенные события, пока они не соответствуют контрольной точке, в этот момент ausearch начнет выводить события.
|
-e, --exit <код>
|
Искать события на основе кода системного вызова exit или errno.
|
--escape <опция>
|
Экранировать вывод. Возможные значения: raw, tty, shell и shell_quote. Каждый режим включает в себя символы предыдущего режима и экранирует больше символов. То есть shell включает все символы, экранируемые tty, и добавляет новые. Значение по умолчанию — tty.
|
--extra-keys
|
Если параметр
format имеет значение csv, вывести столбец с дополнительной информацией.
Работает только с записями SYSCALL, которые были записаны в результате запуска правила аудита, определенного ключом.
|
--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 all-<идентификатор группы>
|
Искать события с заданным эффективным или обычным идентификатором группы.
|
-ge, --gid-effective <эффективный идентификатор группы>
|
Искать события с заданным эффективным идентификатором группы или именем группы.
|
-gi, --gid <группа>
|
Искать события с заданным идентификатором группы или именем группы.
|
-h, --help
|
Справка
|
-hn, --host <имя узла>
|
Искать события с заданным именем узла. Имя узла может быть именем узла, полным доменным именем или цифровым сетевым адресом.
|
-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 <эффективный идентификатор пользователя>
|
Искать события с заданным эффективным идентификатором пользователя.
|
-ui, --uid <идентификатор пользователя>
|
Искать события с заданным идентификатором пользователя.
|
-ul, --loginuid <идентификатор пользователя>
|
Искать события с заданным идентификатором пользователя. Все программы, которые его используют, должны использовать pam_loginuid.
|
-uu, --uuid <идентификатор гостя>
|
Искать события с заданным идентификатором гостя.
|
-v, --verbose
|
Показать версию и выйти.
|
--vm, --vm-name <имя гостя>
|
Искать события с заданным именем гостя.
|
-x, --executable <программа>
|
Искать события с заданным именем исполняемой программы.
|
now
— сейчас;
recent
— десять минут назад;
boot
— время за секунду до того, когда система загружалась в последний раз;
today
— первая секунда после полуночи текущего дня;
yesterday
— первая секунда после полуночи предыдущего дня;
this-week
— первая секунда после полуночи первого дня текущей недели, первый день недели определяется из региональных настроек;
week-ago
— первая секунда после полуночи ровно 7 дней назад;
this-month
— первая секунда после полуночи первого числа текущего месяца;
this-year
— первая секунда после полуночи первого числа первого месяца текущего года.
autrace
добавляет правила аудита для того, чтобы следить за использованием системных вызовов в указанном процессе подобно тому, как это делает strace.
autrace
запускает процесс с указанными аргументами. Результаты аудита будут находиться либо в логах аудита (если служба аудита запущена), либо в системных логах. Команда autrace
устроена так, что удаляет все предыдущие правила аудита, перед тем как запустить указанный процесс и после его завершения. Поэтому, в качестве дополнительной меры предосторожности, программа не запустится, если перед её использованием правила не будут удалены с помощью команды audtictl
— об этом известит предупреждающее сообщение.
autrace [-r] процесс [аргументы]
-r
позволяет ограничить сбор информации о системных вызовах только теми, которые необходимы для анализа использования ресурсов. Это может быть полезно при моделировании внештатных ситуаций, и позволяет уменьшить нагрузку на журналы.
#autrace /bin/ls /tmp
#ausearch --start recent -p 2442 -i
#autrace -r /bin/ls
#ausearch --start recent -p 2450 --raw | aureport --file --summary
#ausearch --start recent -p 2450 --raw | aureport --host –summary
/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:
# /etc/init.d/auditd restart
auditctl
(эти правила не сохраняются после перезагрузки системы);
/etc/audit/audit.rules
.
auditctl
auditctl
позволяет управлять основными функциями системы аудита и определять правила, определяющие, какие события аудита регистрируются.
Примечание
# auditctl -b 256
# auditctl -f 2
в данной конфигурации в случае критической ошибки будет вызван kernel panic;
# auditctl -e 2
в результате все попытки изменить конфигурацию аудита будет отвергнуты:
The audit system is in immutable mode, no rule changes allowed
# auditctl -s
# auditctl -l
# auditctl -D
# auditctl -w путь_к_файлу -p разрешения -k имя_ключа
где:
/etc/shadow
:
# auditctl -w /etc/shadow -p wa
/etc/httpd2/
:
# auditctl -w /etc/httpd2/ -p wa -k apache
/sbin/modprobe
:
# auditctl -w /sbin/modprobe -p x -k modules
# auditctl -a список,действие -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). Вместо имени может быть использовано числовое значение.
-F
используется для указания дополнительных параметров фильтрации события.
/etc
:
# auditctl -a always,exit -S open -F path=/etc/
# auditctl -a always,exit -S open -F path=/etc/ -F perm=aw
# auditctl -a always,exit -S all -F pid=1005
# auditctl -a always,exit -S openat -F auid=510
openat
:
# auditctl -a exit,always -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
/etc/audit/audit.rules
, либо использовать программу augenrules
, которая считывает правила, расположенные в каталоге /etc/audit/rules.d/
.
augenrules
считывает правила, расположенные в каталоге /etc/audit/rules.d/
, и компилирует их в файл /etc/audit/audit.rules
. Этот скрипт обрабатывает файлы *.rules
, в определенном порядке, основанном на их естественном порядке сортировки.
auditd
читает файл /etc/audit/audit.rules
, который содержит правила аудита в формате auditctl
. Пустые строки и текст после знака решетки (#) игнорируются. В файл записываются правила без имени команды. Например:
-w /etc/passwd -p wa
auditctl
также можно использовать для чтения правил из указанного файла с помощью опции -R
, например:
# auditctl -R /home/user/audit/rules/30-net.rules
/etc/audit/audit.rules
может содержать только следующие правила контроля, изменяющие поведение системы аудита: -b
, -D
, -e
, -f
, -r
, --loginuid-immutable
и --backlog_wait_time
. Например:
# Удалить все предыдущие правила -D # Установить размер буфера -b 8192 # Защитить конфигурацию аудита от изменений -e 2
/etc/audit/audit.rules
с использованием синтаксиса auditctl
. Например:
-w /etc/shadow -p wa -w /sbin/modprobe -p x -k modules -a always,exit -S openat -F auid=510
/etc/audit/rules.d/
следует запустить команду augenrules
с параметром --load
:
# augenrules --load
Эти правила также будут загружены при запуске службы auditd
.
/var/log/audit/audit.log
.
/etc/autofs.conf
:
# auditctl -w /etc/autofs.conf -p warx -k autofs
auditd
запущена, выполнение следующей команды создаст новое событие в файле журнала аудита:
$ cat /etc/autofs.conf
/var/log/audit/audit.log
:
type=SYSCALL msg=audit(1699990009.349:368): arch=c000003e syscall=257 success=yes exit=3 a0=ffffff9c a1=7ffc39880600 a2=0 a3=0 items=1 ppid=5701 pid=8223 auid=501 uid=501 gid=501 euid=501 suid=501 fsuid=501 egid=501 sgid=501 fsgid=501 tty=pts1 ses=11 comm="cat" exe="/bin/cat" key="autofs"ARCH=x86_64 SYSCALL=openat AUID="test" UID="test" GID="test" EUID="test" SUID="test" FSUID="test" EGID="test" SGID="test" FSGID="test" type=CWD msg=audit(1699990009.349:368): cwd="/home/test" type=PATH msg=audit(1699990009.349:368): item=0 name="/etc/autofs.conf" inode=1354087 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(1699990009.349:368): proctitle=636174002F6574632F6175746F66732E636F6E66Данное событие состоит из четырех записей, имеющих один серийный номер и одну и ту же отметку времени. Каждая запись состоит из нескольких пар
имя=значение
, разделенных пробелом или запятой. Ниже каждая запись рассмотрена подробнее.
Примечание
ausearch
можно использовать параметр -i
для автоматического преобразования шестнадцатеричных значений в удобочитаемые эквиваленты.
type=SYSCALL
— тип записи. Значение SYSCALL указывает, что запись была вызвана системным вызовом ядра;
msg=audit(1699990009.349:368)
— в поле 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=5701
— идентификатор родительского процесса;
pid=8223
— идентификатор процесса (PID);
auid=501
— идентификатор пользователя аудита, то есть логин. Этот идентификатор присваивается пользователю при входе в систему и наследуется каждым процессом, даже если личность пользователя меняется, например, при переключении учетных записей пользователей с помощью команды su -
;
uid=501
— идентификатор пользователя, запустившего анализируемый процесс. Идентификатор пользователя можно интерпретировать в имя пользователя с помощью команды ausearch -i --uid UID
;
gid=501
— идентификатор группы пользователя, запустившего анализируемый процесс;
euid=501
— эффективный идентификатор пользователя, запустившего анализируемый процесс;
suid=501
— установленный идентификатор пользователя, запустившего анализируемый процесс;
fsuid=501
— идентификатор пользователя файловой системы, запустившего анализируемый процесс;
egid=501
— эффективный идентификатор группы пользователя, запустившего анализируемый процесс;
sgid=501
— заданный групповой идентификатор пользователя, запустившего анализируемый процесс;
fsgid=501
— идентификатор группы файловой системы пользователя, запустившего анализируемый процесс;
tty=pts1
— терминал, с которого был вызван анализируемый процесс;
ses=11
— идентификатор сеанса, из которого был вызван анализируемый процесс;
comm="cat"
— имя команды, которая использовалась для вызова анализируемого процесса;
exe="/bin/cat"
— путь к исполняемому файлу, который использовался для запуска анализируемого процесса;
key="autofs"
— определенная администратором строка, связанная с правилом, создавшим это событие в журнале аудита;
type=CWD
— тип записи. Значение CWD используется для записи рабочего каталога, из которого был выполнен процесс, вызвавший системный вызов, указанный в первой записи. Цель этой записи — записать местоположение текущего процесса на случай, если относительный путь будет зафиксирован в связанной записи PATH. Так можно восстановить абсолютный путь;
cwd="/home/test"
— путь к каталогу, в котором был вызван системный вызов.
type=PATH
— событие аудита содержит запись типа PATH для каждого пути, который передается системному вызову в качестве аргумента. В этом событии аудита в качестве аргумента использовался только один путь (/etc/autofs.conf);
item=0
— указывает, какой элемент из общего числа элементов, указанных в записи типа SYSCALL, является текущей записью. Это число начинается с нуля; значение 0 означает, что это первый элемент;
name="/etc/autofs.conf"
— путь к файлу или каталогу, который был передан системному вызову в качестве аргумента;
inode=1354087
— номер индексного дескриптора, связанный с файлом или каталогом, записанным в этом событии. Отобразить файл или каталог, связанный с номером индексного дескриптора можно, выполнив команду:
# find / -inum 1354087 -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
— записанный идентификатор устройства только для специальных файлов. В данном случае он не используется, поскольку записанный файл является обычным файлом;
cap_fp=0
— данные, относящиеся к настройке разрешенных возможностей файловой системы для объекта файла или каталога;
cap_fi=0
— данные, относящиеся к настройке унаследованных возможностей файловой системы для объекта файла или каталога;
cap_fe=0
— установка эффективного бита возможностей файловой системы объекта файла или каталога;
cap_fver=0
— версия возможностей файловой системы объекта файла или каталога.
type=PROCTITLE
— тип записи. Значение PROCTITLE указывает, что эта запись содержит полную командную строку, которая инициировала это событие аудита, вызванное системным вызовом ядра;
proctitle
— полная командная строка, которая использовалась для запуска анализируемого процесса. Поле закодировано в шестнадцатеричном формате. Текст декодируется в команду, которая вызвала это событие аудита. При поиске записей аудита с помощью команды ausearch
следует использовать параметр -i
для автоматического преобразования шестнадцатеричных значений в удобочитаемые эквиваленты. Значение 636174002F6574632F6175746F66732E636F6E66 интерпретируется в «cat /etc/autofs.conf».
ausearch -i
:
# ausearch -i -k autofs
----
type=PROCTITLE msg=audit(14.11.2023 21:26:49.349:368) : proctitle=cat /etc/autofs.conf
type=PATH msg=audit(14.11.2023 21:26:49.349:368) : item=0 name=/etc/autofs.conf inode=1354087 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.11.2023 21:26:49.349:368) : cwd=/home/test
type=SYSCALL msg=audit(14.11.2023 21:26:49.349:368) : arch=x86_64 syscall=openat success=yes exit=3 a0=AT_FDCWD a1=0x7ffc39880600 a2=O_RDONLY a3=0x0 items=1 ppid=5701 pid=8223 auid=test uid=test gid=test euid=test suid=test fsuid=test egid=test sgid=test fsgid=test tty=pts1 ses=11 comm=cat exe=/bin/cat key=autofs
# ausearch -m DAEMON_START -m DAEMON_END
----
time->Mon Nov 13 08:46:48 2023
type=DAEMON_START msg=audit(1699858008.579:1767): op=start ver=3.1.2
format=enriched kernel=5.10.194-std-def-alt1 auid=4294967295 pid=2524 uid=0 ses=4294967295 res=success
----
time->Mon Nov 13 09:47:31 2023
type=DAEMON_END msg=audit(1699861651.992:1768): op=terminate
auid=0 uid=0 ses=4294967295 pid=1 res=success
----
time->Tue Nov 14 09:38:26 2023
type=DAEMON_START msg=audit(1699947506.800:4888): op=start ver=3.1.2
format=enriched kernel=5.10.194-std-def-alt1 auid=4294967295 pid=2525 uid=0 ses=4294967295 res=success
/var/log/audit/audit.log
.
# ausearch -m CONFIG_CHANGE
----
time->Tue Nov 14 09:38:26 2023
type=CONFIG_CHANGE msg=audit(1699947506.822:5): op=set
audit_backlog_wait_time=60000 old=60000 auid=4294967295 ses=4294967295 res=1
----
time->Tue Nov 14 16:43:14 2023
type=CONFIG_CHANGE msg=audit(1699972994.820:1207):
auid=500 ses=3 op=add_rule key="audit_config" list=4 res=1
# auditctl -w /etc/audit -p w -k audit_config
Найти такие записи аудита можно, выполнив команду:
# ausearch -k audit_config
----
time->Tue Nov 14 16:43:14 2023
type=CONFIG_CHANGE msg=audit(1699972994.820:1207): auid=500 ses=3 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.log
cat: /var/log/audit/audit.log: Отказано в доступе $/sbin/ausearch -i -k audit_log
Error opening config file (Отказано в доступе) 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(24.05.2018 18:13:11.849:216) :
proctitle=auditctl -a always,exit -F arch b64 -S open -F exit -EPERM -F key=open -k audit_log_EPERM
type=SOCKADDR msg=audit(24.05.2018 18:13:11.849:216) :
saddr={ saddr_fam=netlink nlnk-fam=16 nlnk-pid=0 }
type=SYSCALL msg=audit(24.05.2018 18:13:11.849:216) :
arch=x86_64 syscall=sendto success=yes exit=1076 a0=0x4 a1=0x7ffd13ee81e0 a2=0x434 a3=0x0 items=0 ppid=5423 pid=5919 auid=user uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts0 ses=3 comm=auditctl exe=/sbin/auditctl key=(null)
type=CONFIG_CHANGE msg=audit(24.05.2018 18:13:11.849:216) :
auid=user ses=3 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.11.2023 17:36:01.837:123232) :
pid=26656 uid=root auid=unset ses=unset msg='pam_faillock uid=root exe=/bin/login hostname=pbs addr=? terminal=tty2 res=success'
----
type=RESP_ACCT_LOCK msg=audit(14.11.2023 17:36:01.837:123233) :
pid=26656 uid=root auid=unset ses=unset msg='pam_faillock uid=root exe=/bin/login hostname=pbs addr=? terminal=tty2 res=success'
faillock --user test --reset
) попадает в аудит с типом USER_ACCT и msg=pam_faillock:
# ausearch -i -m USER_ACCT
# ausearch -m USER_AUTH
----
time->Tue Nov 14 17:37:28 2023
type=USER_AUTH msg=audit(1699976248.331:123242):
pid=27368 uid=0 auid=4294967295 ses=4294967295 msg='op=PAM:authentication grantors=?
acct="?" exe="/bin/login" hostname=pbs addr=? terminal=/dev/tty2 res=failed'
----
time->Tue Nov 14 17:56:28 2023
type=USER_AUTH msg=audit(1699977388.507:123325):
pid=27621 uid=0 auid=4294967295 ses=4294967295 msg='op=PAM:authentication
grantors=pam_userpass,pam_tcb acct="test" 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.11.2023 17:36:10.321:123241) :
pid=27368 uid=root auid=unset ses=unset msg='op=login acct=test
exe=/bin/login hostname=pbs addr=? terminal=/dev/tty2 res=failed'
----
type=USER_LOGIN msg=audit(14.11.2023 17:56:28.569:123331) :
pid=27621 uid=root auid=test ses=145 msg='op=login id=test
exe=/usr/sbin/sshd hostname=192.168.0.177 addr=192.168.0.177 terminal=/dev/pts/7 res=success
aureport
позволяет вывести отчёт обо всех попытках входа в систему:
# aureport -l
Login Report
============================================
# date time auid host term exe success event
============================================
1. 24.10.2023 21:58:15 user 192.168.0.177 sshd /usr/sbin/sshd no 394615
…
43. 14.11.2023 17:49:59 test 192.168.0.177 sshd /usr/sbin/sshd no 123267
44. 14.11.2023 17:50:01 501 192.168.0.177 /dev/pts/6 /usr/sbin/sshd yes 123280
45. 14.11.2023 17:56:22 test 192.168.0.177 sshd /usr/sbin/sshd no 123322
46. 14.11.2023 17:56:24 test 192.168.0.177 sshd /usr/sbin/sshd no 123324
47. 14.11.2023 17:56:28 501 192.168.0.177 /dev/pts/7 /usr/sbin/sshd yes 123331
# aureport -l --failed
# aureport -m
# auditctl -a exit,always -F arch=b64 -S clock_settime -S settimeofday -S adjtimex -k FPT_STM
date
.
# ausearch -k FPT_STM
----
time->Tue Nov 14 18:07:27 2023
type=PROCTITLE msg=audit(1699978047.591:188): proctitle=6461746500303532343138303832303138
type=TIME_INJOFFSET msg=audit(1699978047.591:188): sec=-172799968 nsec=406875048
type=SYSCALL msg=audit(1699978047.591:188): arch=c000003e syscall=227 success=yes exit=0 a0=0 a1=7ffc85a10900 a2=0 a3=0 items=0 ppid=5423 pid=5879 auid=500 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=3 comm="date" exe="/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 -w /etc/group -p wa -k audit_account_changes -w /etc/passwd -p wa -k audit_account_changes -w /etc/gshadow -p wa -k audit_account_changes -w /etc/shadow -p wa -k audit_account_changes -w /etc/security/opasswd -p wa -k 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