Записки Linux Администратора
45 subscribers
4 photos
5 files
16 links
Канал создан в поддержку. всем специалистам в области администрирования системного ПО и ОС. FAQ, MANUALS, Decisions
Download Telegram
Как установить Linux на M1 или M2 Mac OS
1. Скачайте с официального сайта https://www.vmware.com/products/fusion.html dmg пакет VMware Fusion 13. Выполните установку.
2. Скачайте с официального сайта вендора iso дистрибутив Linux с архитектурой ARM64 (aarch64). На пример: centos.org
3. Подготовительные работы:
VMware -> Create a custom virtual machine -> Red Hat Enterprise Linux 64-bit Arm (при использовании centos || rhel). Остальное выбираем по желаемым характеристикам.
Перейти в настройки ВМ ->CD/DVD->Выбрать ISO диск с архитектурой arm -> Установить галочку «подключить компакт-диск или DVD-диск»
Приступайте к установке ОС
Копирование файлов
~]# cp dir/file1 /home/dir
Приведенная выше комманда - распространенный метод копирования файла.
А что, если у Вас каталог содержит 1000 файлов, а вам необходимо на пример скопровать только 300.
Внесите путь и наименование файлов в file.txt
Пример:
~]# cat file.txt
/home/dir/file1
/home/dir/file2
...
/home/dir/file300

И выполните:
~]# for i in `cat file.txt`; do cp $i /home/dir2; done
Как включить поддержку RC4 в RHEL?

На каждом хосте RHEL, где происходит аутентификация на контроллерах домена AD:
Используйте:

~]# update-crypto-policies --set DEFAULT:AD-SUPPORT

чтобы включить криптографическую подполитику AD-SUPPORT в дополнение к криптографической политике DEFAULT.
ext4 acl record (s) cannot be restored into xfs filesystem on linux

При регистрации этой ошибки, можно подумать о применении fsck файловой системы.
На самом деле, система Вас информирует о не возможности восстановления ACL EXT4 в файловую систему XFS.
ACL (Access Control List) - позволяет задавать права доступа к объектам на диске для пользователей и групп
Самым верным решением найти объекты имеющие ACL, возможно:
~]# getfacl -R -s -p /dir | sed -n 's/^# file: //p'
Если вы знаете место положение объекта, проверить назначение ACL можно:
~]# ls -l
rwx-rw----+ 1 root file.conf
Символ + (плюс) после прав доступа указывает на использование ACL
Предположим, пользователю devops необходимо выдать права на изменение на запись в определённые файлы/каталоги, выполните:
~]# setfacl -dm "u: devops:rwx" /opt/project
AlIAS. Маленькая но очень удобная.

Alias используется для определения псевдонима. Предположим, у вас есть длинная команда, которую сложнее запомнить. Псевдоним (alias) заменит указанную команду, но будет действовать точно так же.
Синтаксис:
alias [alias-name[=string]…]
Для создания псевдонима проверки открытых портов, достаточно:
~]#
alias ports='netstat -tulanp'
Здесь после слова alias мы помещаем слово, которое хотим использовать в качестве псевдонима. После создания, достаточно в командной строке выполнить:
~]# ports
и у вас выполниться:
netstat -tulanp
Доступные псевдонимы:
~]# alias
или
~]# alias -p
Они предоставят вам список существующих псевдонимов, созданные вами и системой.
Файл ~/.bashrc
Имейте в виду, примененные alias из командной строки после перезапуска системы будут удалены. Созданные системой alias будут по-прежнему доступны.
Для того, чтобы команда была в вашей системе, вам нужно отредактировать файл ~/.bashrc и внести свой alias или рас комментируйте в нем:
# if [ -f ~/.bash_aliases ]; then
#. ~/.bash_aliases
# fi

Это означает, что вы соглашаетесь поместить alias в файл ~/bash_aliases
INODES. Файловые дескрипторы.
Количество inode каждой файловой системы определяется при разворачивании ОС. Чаще всего во время установки ОС создаётся 1 inode на каждые 2 Кбайт пространства по умолчанию. Если у вас закончились inode, вы не сможете создать новый файл.
Проверить наличие свободных inode:
~]# df -i
Если процент inodes составляет 100% или близко к этому значению, необходимо найти директорию(ии) в которых создано большое количество файлов:
~]# find / -type d -size +4096 -exec sh -c " ls -d {} && ls {} | wc -l" \;
Если вы нашли ту директорию с большим объемом мелких файлов, стоит их ужалить для высвобождения занятых inodes:
~]# find /dir/files/ -type f -delete
Порой складываются ситуации, когда файл удален а ссылка на него сохранилась, при этом inodes не высвободился. В таком случае стоит прибегнуть к радикальным методам:
Определяем номер индекса:
~]# ls -il
148524 drwx------ 3 root root 4096 2023-01-27 15:45 file
148524 - номер inodes
Выполните find и удалите связующие элементы по номеру inodes:
~]# find . -inum 148524 -exec rm -i {} \;
Защита от «дурака»

Предположим, у Вас важные конфигурационные файлы, которые не стоит модифицировать особенно удалять. В борьбу с человеком который руководствуется только «давай поправим и посмотрим что будет», вам на помощь придет chattr.
chattr (Change Attribute) — это утилита используемая для установки/снятия специальных атрибутов файлов для предотвращения случайной модификации и удаления файлов или директорий, даже если вы авторизованы как root.
Синтаксис chattr:
chattr [operator] [flags] [filename]
Как защитить файл от удаления
Для установки атрибута мы используем оператор +, для снятия — оператор
~]# chattr +i dir/
~]# chattr +i file.conf
П
роверить установленные атрибуты:
~]# lsattr
Проверяем:
[root@ ~]#
rm -rf dir/
rm: cannot remove dir/: Operation not permitted
Как защитить файлы /etc/passwd и /etc/shadow
~]# chattr +i /etc/passwd
~]# chattr +i /etc/shadow
Проверяем:
~]# useradd test
useradd: cannot open /etc/passwd
systemd-logind: Failed to start user slice user-0.slice, ignoring: Connection timed out ((null))

Сообщения в journal
crond[111309]: pam_systemd(crond:session): Failed to create session: Connection timed out
systemd-logind[10714]: Failed to start user slice user-0.slice, ignoring: Connection timed out ((null))
systemd-logind[10714]: Failed to start session scope session-13692.scope: Connection timed out
systemd[1]: Failed to propagate agent release message: Operation not supported

Данная ошибка сообщает о том что systemd-logind не может создать user-0.slice. В версии systemd 219-42.el7
~]# rpm -qa | grep systemd
присутствует баг, в следствии чего systemd не может обрабатывать большое количество сессий в ввиду полной утилизации ресурсов RAM и сбоя модуля systemd-logind.
Для решения проблемы рекомендуется произвести обновления модуля до версии systemd-219-62.el7_6.9 или более поздней.
Обновление systemd лучше совместить с установкой более новой версии ядра.
Решение:
~]# /bin/rm $(join -v 1 <(find /run/systemd/system -maxdepth 1 -type f -name "*.scope" | sort) <(find /run/systemd/system -maxdepth 1 -type d -name "*.scope.d" | sed "s/\.d\$//" | sort))
Для реклярного исполненияя, стоит добавить в crontab
~]# vi /etc/crontab
* * * * * root {приведенная выше команда}
Free Identity, Policy and Audit
 
FreeIPA — открытый проект для создания централизованной системы по управлению идентификацией пользователей, задания политик доступа и аудита для сетей на базе Linux и Unix. FreeIPA можно сравнить с диспетчером Identity Manager компании Novell или Active Directory от Microsoft в том, что используемые цели и механизмы похожи.

Для Вас подобраны материалы, вы можете воспользоваться им:
- Контроллер ЕПП FreeIPA в Astra Linux
- Установка FreeIPA с опцией изолированной сети
- Ошибки установки FreeIPA
Как поставить на постоянный контроль доступность хостов?

~]# cat ping.sh

#!/bin/bash
time=$(date "+%a %d.%m.%Y %H:%M:%S")
cpuUsage=$(top -bn1 | awk '/Cpu/ { print $2}')
memUsage=$(free -m | awk '/Mem/{print $3}')

cat /opt/serverlist |while read i
do
ping -c 1 -n -i 0.2 -W1 "$i" > /dev/null
if [ $? -eq 0 ]; then
echo "ok, ping up" > /dev/null
else
echo "$time $i is down. Server not avalible to ping. CPU Usage: $cpuUsage% Memory Usage: $memUsage MB" >> /var/log/checkping.log

fi
done

где, /opt/serverlist - список ip/hostname серверов

/var/log/checkping.log - События зарегиструются если хост не доступен

Для регулярной проверки достпности, необходимо добавить скрипт в crontab
* * * * *. root. /opt/ping.sh
Как захватить сбои ядра Linux?

kdump – это продвинутый механизм сброса аварий.
Когда включен, система загружается из контекста другого ядра.Это второе ядро резервирует небольшой объем памяти, и его единственной целью является захват изображения дампа ядра в случае сбоя системы.
Пакеты к установке:
~]# yum install kexec-tools

Настройка GRUB
~]# grubby --update-kernel=ALL --args="crashkernel = auto"
Перезапустите систему, что бы изменения вступили в силу:
-]# shutdown -r
Чтобы настроить kdump, нам нужно отредактировать файл конфигурации /etc/kdump.conf.
Приведите строку
#core_collector -c -message-level 1 -d 31
к виду:
core_collector makedumpfile -c
Укажите действие по умолчанию, срабатывает если dump не может сформироваться в указанном месте. Если действие не указано “reboot”, то параметр по умолчанию:
default halt
Управление демоном:
~]# systemctl enable kdump.service
~]# systemctl start kdump.service
Проверить статус:
~]# systemctl is-active kdump
Вызовем crash kernel:
~]# echo 1 > /proc/sys/kernel/sysrq
~]#
echo c > /proc/sysrq-trigger
По default, сбой ядра сохраниться в / var / crash /
SSSD + DNSMASQ

System Security Services Daemon – это пакет приложений для управления аутентификацией и авторизацией в операционных системах.
Для исправления любых проблем с SSSD является настройка отладочный логов, которые сохраняются в /var/log/sssd. Они включаются одной простой командой:
~]# sss_debuglevel 7
Локальный DNS кэш
Аутентификация с использованием SSSD может некорректно работать или не работать вовсе, если из поля видимости хоста пропадает первый DNS сервер, указанный в /etc/resolv.conf. SSSD использует системный резолвер (resolver) для разрешения DNS имен. Любое разрешение DNS имени производится через запрос к DNS серверу. Cледует учесть, что системный резолвер опрашивает DNS сервера, указанные в /etc/resolv.conf в том порядке, в котором они там перечислены с таймаутом запроса в 5 секунд. Такие задержки в разрешении DNS имен могут оказывать крайне негативное влияние на работу SSSD.Частично проблема решается с помощью указания нескольких опций в /etc/resolv.conf:

options timeout:1 #опускает таймаут ожидания ответа от DNS сервера с 5 до 1 секунды

Это изменения позволят SSSD не уходить в оффлайн режим.
DNSMASQ - локальный кэш DNS
В конфигурации dnsmasq следует обратить внимание на параметр all-servers, который заставляет dnsmasq в случае промаха кэша отправлять DNS запросы сразу ко всем DNS серверам одновременно. При этом адреса "настоящих" DNS серверов удобно выносить из общей конфигурации в отдельный файл, расположенный рядом с системным /etc/resolv.conf.
Автообнаружение в SSSD
~]# vi /etc/sssd/sssd.conf
ad_server = dc01.example.com, dc02.example.com, _srv_
Автообнаружение в Kerberos
~]# vi /etc/krb5.conf
[realms]
EXAMPLE.COM = {
kdc =
dc01.example.com
kdc =
dc02.example.com
}
Расширить корневой раздел (ext4, не LVM)

Выключаем swap (файл подкачки)
~]# swapoff -a
Начинаем удалять разделы (данные не потеряются). Смотрим разметку:
~]# fdisk /dev/sda
Command (m for help): p
/dev/sda1 - / ФС
/dev/sda2 - не размеченная область
/dev/sda5 - Файл подкачки SWAP


Для начала удалим не размеченную область /dev/sda2

Command (m for help): d
Partition number (1,2,5, default 5): 2
Partition 2 has been deleted.


Проверяем результат
Command (m for help): p

Удаляем раздел /dev/sda1 (данные не потеряются)
Command (m for help): d
Selected partition 1
Partition 1 has been deleted.


Создадим новый раздел (primary)
Command (m for help): n
p primary
e extended
Select (default p): p


Created a new partition 1 of type 'Linux' and of size XX GiB.

Таким образом мы создали новый раздел размером XX Gb
Создадим раздел (extended) под swap
Command (m for help): n
Partition type
p primary
e extended
Select (default p): e



Created a new partition 2 of type 'Extended' and of size XX MiB.
Попробуем поменять тип файловой системы
Command (m for help): t
Partition number (1,2, default 2): 2
Hex code (type L to list all codes): 82
….
Type of partition 2 is unchanged: Extended.


Сохраняем изменения
Command (m for help): w
Утилита сообщает, что изменения применятся после перезагрузки
Перезагружаем машину
~]# reboot
Запускаем утилиту cfdisk
~]# cfdisk /dev/sda
Выбираем /dev/sda1:
Bootable
Выбираем неразмеченную область:
New - > Partition size: XX M -> Type: 82
Сохраняем изменения
Write: yes - > Quit
Передаем информацию об изменении разметки операционной системе, установив утилиту parted
~]# sudo apt install parted -y
или
~]# yum install parted -y (если не установлено)
~]# partprobe
Создаем раздел под swap
~]# mkswap /dev/sda5
Включаем swap
~]# swapon /dev/sda5
Смотрим новые UUID
~]# blkid
Прописываем их в /etc/fstab, монтируем
~]# mount -a
Перезагружаем ОС
~]# reboot
Расширяем раздел /dev/sda1
~]# resize2fs /dev/sda1
Проверяем
~]# lsblk
~]# df -h
Использование tar в Linux

Не стану много говорить о возможностях tar, но вы наверняка сталкивались с необходимостью разбить архив на части.
Есть 2 варианта:
1. Создать архив -> Разбить на части
2. Создать архив разбитый на части
Касательно первого, вы можете пойти этим вариантом, но есть риск не возможности объединения частей после разбиения.
Второй вариант, как на мой взгляд, достаточно интересный. Создаем архив, разбитый на части:
~]# tar -zcvf - /path/to/dir | split -b 100M - arch.tar.gz
данная команда создаст архив каталога /path/to/dir и разобьет его на части по 100 М
В результате мы получим:
arch.tar.gzaa
arch.tar.gzab
arch.tar.gzac
Что бы собрать архив и восстановить его, достаточно выполнить:
~]# cat arch.tar.gz* | tar -zxf
Редко, но порой необходимо добывать файл в имеющийся архив
~]# tar -rf .archive.tar file
Что делать если установили ОС на минималках?

Решение казалось бы простое - установить требуемый пакет. Но если вам необходимо установить группу пакетов, то в Linux предусмотрена установка групп. Подробнее об этом:
Вывести доступные группы
~]# yum list group
Предположим, вам необходимо вывести список пакетов входящих в группу
~]# yum groupinfo “Server with GUI”
Данный пример отобразит список пакетов включенных в группу графической оболочки. Установим ее:
~]# yum groupinstall “Server with GUI” -y
После успешной установки, необходимо переключиться на графический интерфес, выбрав его основным:
~]# systemctl set-default graphical.target
Выполните перезапуск системы
~]# shutdown -r
Yum не работает
Предположим, необходимо найти установленные пакеты
~]# yum list installed
File "/usr/bin/yum", line 30
except KeyboardInterrupt, e: ^
SyntaxError: invalid syntax
Диагностика сопутствующих компонентов для работы YUM:
~]# rpm -Va python
....L.... /usr/bin/python
Поскольку python2 необходим для функциональности ОС, его необходимо переустановить, чтобы решить эту проблему со ссылкой.
~]# rpm -ivh --replacefiles --replacepkgs <python-2.package version>
Проверяем:
~]# yum repolist
~]# yum list installed
Astra Linux. Scheduling while atomic

Относительно недавно, ко мне обратились с ошибкой scheduling. Что делать, как максимально быстро и оперативно решить проблему?

Scheduling while atomic - отладное сообщение, связанное с проблемами атомарности. Это означает, что schedule() был вызван, когда текущая задача была атомарной. Задача в ядре может по определению не иметь состояние сон, если она атомарная.

Система перестает отвечать на запросы или работает очень медленно. Сообщение;
kernel: BUG: scheduling while atomic: swapper/0x00010000/0
Система регистрирует следующее сообщение в /var/log/messages:
kernel: BUG: scheduling while atomic: swapper/0x00010000/0
Одним, из самых быстрых и главное правильных решений - установить минорную версию ядра, где исправлен Bag.
К примеру, если у вас установлена версия ядра:
5.4.0-54-generic, то необходимо выполнить Update ядра до минорной версии 5.4.0-110-generic