Записки Linux Администратора
45 subscribers
4 photos
5 files
16 links
Канал создан в поддержку. всем специалистам в области администрирования системного ПО и ОС. FAQ, MANUALS, Decisions
Download Telegram
Боремся с Out of Memory
Out of Memory Killer (OOM Killer)
– это механизм ядра Linux, который освобождает оперативную память при ее исчерпании за счет принудительного завершения некоторых запущенных процессов. Если процесс убивается OOM Killer, в логе /var/log/messages регистрируется событие:
~]# cat /var/log/messages | grep "Out of»
Out of Memory: Killed process 123 (name_service) score 904 or sacrifice child

OOM killer убивает процессы сигналом SIGKILL. Чтобы завершить процесс, Linux вызывает функцию out_of_memory и выбирает процесс по правилам, основанным на вычисленной репутацим каждого процесса (oom_score).
Проверить репутацию процесса
~]# cat /proc/123/oom_score
Чем выше репутация процесса, тем больше вероятность того, что именно его завершит OOM Killer.
Когда мы стали понимать принцип работы функции, нам предстоит выставить приоритеты и обеспечить стабильность работы приложения.
Мы можете отключить OOM Killer, но это станет фатальной ошибкой:
~]# cat /proc/sys/vm/panic_on_oom
По умолчанию тут указан 0 - OOM Killer включен
Чтобы отключить его:
~]# sudo echo 1 > /proc/sys/vm/panic_on_oom
Для обеспечения гарантии стабильности работы определенного процесса и уверенности, что данный процесс никогда не будет принудительно завершен, достаточно будет увеличить его репутацию.
Вывести текущую репутацию процесса:
~]# cat /proc/123/oom_score
Репутация процесса имеет значение от -16 до +15, назначим репутацию:
~]# echo -5 > /proc/123/oom_adj
~]# cat /proc/1764/oom_score
Для полного отключения OOM Killer процесса, нужно указать в oom_adj значение -17
Осталось разобраться с основной задачей, что будет если процесс перезапустить и ему привиться новый PID
~]# pgrep -f "/usr/sbin/sshd" | while read PID; do echo -17 > /proc/$PID/oom_adj; done
Но гораздо удобнее задать репутацию в файле сервиса юнита службы systemd:
[Service]
OOMScoreAdjust=-500
Создаем отказоустойчивый сервис в systemd.
Регулярно сталкиваемся с тем что, сервис падает и мы не успеваем его своевременно поднять. Я против костылей, но описанное ниже решение использует функционал systemd, главное правильно настроить)
Условно, предположим:
Имя сервиса: name_service
Местоположение: /lib/systemd/system/
Выполним редактирование сервиса:
~]# vi /lib/systemd/system/name_service
или
~]# systemctl edit name_service
Наверняка Вы увидите стандартные секции настроек сервиса
[Unit]


[Service]


[Install]


Чтобы сервис перезапустился автоматически, нужно в секцию Unit добавить следующий строки:
StartLimitIntervalSec=500
StartLimitBurst=5
А в секцию Service добавить:
Restart=on-failure
RestartSec=5s

После добавления нужно systemd перечитать конфиги:
~]# systemctl daemon-reload
После применения данных настроек, если сервис вдруг остановится по незапланированным причинам, в течение 5 секунд он будет перезапущен. Попыток рестарта сервиса будет 5 в течение 500 секунд и если все эти попытки закончатся неудачей, дальнейших попыток перезапуска не будет.
‼️DANGER. Знать но не использовать
Самая веселая, но печально известная команда:
❗️~]# rm -rf /
В новых дистрибутивах команда не нанесет как такового вреда, поскольку как они предоставляют отказоустойчивость. Но если Вы хотите достичь успеха, то:
❗️~]# rm -rf / --no-preserve-root
или
❗️~]# rm -fr/*
Перезапишите свой раздел
❗️~]# echo “DANGER” > /dev/sda
Переместим в никуда
❗️~]# mv /etc/* /dev/null
Уничтожим улики мусором
❗️~]# dd if=/dev/random of=/dev/sda
А теперь применим бомбу
‼️~]# :(){:|:&};:

❗️Не забудьте, что есть и маскированные команды
Время зомби 🧟
Зомби-процессы
в Linux иногда также называют несуществующими или мертвыми процессами. В Linux существует таблица всех запущенных процессов вместе с их состояниями.
R - эти процессы в данный момент запущены или могут быть запущены
S/D - это процессы, которые ожидают события:
T - остановлено: Мы можем остановить процесс Linux, отправив соответствующий сигнал.
Зомби - Z: Когда процесс завершает свою задачу, он освобождает системные ресурсы, которые он использовал, и очищает свою память.
Мы можем определить список зомби с помощью команды ps:
~]# ps ux | awk '{if($8=="Z") print}'
Другим удобным методом проверки количества и списка процессов-зомби является использование команды top :
~]# top
Мы не можем убить зомби-процесс, поскольку он уже мертв. Однако есть несколько обходных путей, которые мы можем использовать для очистки зомби-процесса.
Мы можем вручную отправить SIGCHLD родительскому процессу-зомби. Для поиска родительского идентификатора несуществующего процесса, используйте:
~]# ps -A -ostat,pid,ppid | grep -e '[zZ]'
Далее отправьте сигнал SIGCHLD родительскому процессу (из 3го столбца)
~]# kill -s SIGCHLD 123
Если метод, описанный выше, не может очистить несуществующий процесс, нам следует рассмотреть возможность уничтожения его родительского процесса:
~]# kill -9 123
Уничтожение родительского процесса может повлиять на все его дочерние процессы.
Что нужно знать о /proc
❗️Главное, что необходимо знать о каталоге /proc - не является настоящей файловой системой, это виртуальная файловая система. В каталоге содержаться информация о процессах и системная информация.
/proc является конструированным разделом и монтируется во время загрузки ОС. Если посмотреть содержимое /proc
~]# ls /proc/
вы увидите файлы и пронумерованные каталоги. Эти пронумерованные каталоги и являются номерами процессов - PID.
А какие файлы и что они несут в себе?
/proc/cmdline — параметры загрузки ОС
/proc/consoles — информация об используемой консоли
/proc/devices — драйверы устройств, работающие в данный момент
/proc/filesystems — файловые системы, поддерживаемые текущей версией ядра
/proc/iomem — здесь содержится текущая карта системной памяти для устройств
/proc/ioports — зарегистрированные диапазоны портов и устройства, которые их используют.
/proc/loadavg — показывает нагрузку на систему в разрезе времени, а так же количество запущенных процессов и PID последнего процесса.
/proc/locks — файлы заблокированные ядром
/proc/meminfo — информация о системной памяти.
/proc/modules — загруженные в данный момент модули ядра.
/proc/mounts — точки монтирования, используемые системой.
/proc/partitions — информация о разделах, доступных системе.
/proc/pci — информация о pci-устройствах.
/proc/stat — записи и различная статистическая информация, хранящаяся с момента последней перезагрузки.
/proc/swaps — информация о месте в разделе Swap.
/proc/uptime — информация о времени работы с момента запуска системы ( в секундах)
/proc/version — версия ядра, версия GCC и установленный дистрибутив
Более подробную информацию можно получить:
~]# man 5 /proc/имя_файла
Please open Telegram to view this post
VIEW IN TELEGRAM
disk.png
175.3 KB
Создание раздела
При работе с большим объемом дисков, мы стараемся создавать новую пустую таблицу разделов GPT и после добавляем новый раздел. Примерно это выглядит так:
~]# fdisk /dev/sdd
Команда (m для справки): g
Команда (m для справки): n
Команда (m для справки): w
В итоге Вы получаете:
~]# lsblk /dev/sdc
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdc 8:32 0 5G 0 disk
└─sdc1 8:33 0 5G 0 part
Если поразмыслить и представить что у Вас 10 дисков на которых предстоит выполнить данную манипуляцию, согласитесь, это утомит.
Что бы вас это не утомило, выполните:
~]# echo -e "o\ng\nn\np\n1\n\n\nw" | fdisk /dev/sdc
echo передаст все аргументы необходимые для ввода

Желаю удачи!! Оптимизируете свои трудозатраты!!
25 августа принято считать днем рождения Linux. Сам Линус ведет отсчет от другой даты — 17 сентября. Именно в этот день он загрузил первый релиз Linux (0.01) на FTP-сервер.
С днем рождения!!!
К сердцу самых скрываемых данных от лишних глаз!
Не однократно, Вы сталкиваетесь с ситуацией, когда Вы не желаете что бы злоумышленник овладел вашими данными. Первым делом, Вы, что делаете?
Правильно, удаляете информацию.
Представим, Вы решили сохранить логины/пароли в самом не приметном месте дискового пространства в Linux. После чего вы чувствуете, совершено проникновение и Вы приступает к немедленному удалению данных с диска.
~]# rm SecretData.txt
Вы считаете, миссия окончена. Нет файла нет проблем.
А теперь постарайтесь мыслить как «плохиш», он на перед знает ход ваших действий.
Он знает, Вы его скоро обнаружите. Именно по этой причине он не станет просматривать содержимое файлов/документов, а подготовит почву для экстренного переноса информации.
Первым делом при обнаружении интересных документов для злоумышленника, он узнает физическое место расположение файла
~]# filefrag -b512 -v /tmp/SecretData.txt
FILEFRAG - входит в состав e2fsprogs и устанавливается при минимальных установках ОС.
«Плохиш» смотрит и сохраняет параметр phisical_offset и диск на котором он нашел его.
Продолжая свой путь, вы обнаружили «плохиша» и начинаете удалять данные.
Плохиш, первый кто увидит отсутствие данных.
Пора приступать к отходу и забирать найденное богатство)
Правильно, могли подумать, что Вы не оставили ничего, что могло бы Вас скомпрометировать. Но не совсем так, из поля видимости Вы безусловно удалили данные, но не для «плохиша»
~]# dd if=/dev/mapper/cs-root skip=14144896 status=none count=8
Будьте аккуратны с тем, что вы храните в ОС!!
Желаю удачи, думаю Вам есть над чем размыслить ))
Расширяем диск без LVM - XFS
Предположим, у вас в системе зарегистрирован диска sda, при этом партиция sda1 принадлежит точке монтирования /.
Давайте представим как это выглядит:
sda
|__sda1
|__XFS

Средствами виртуализации, Вы расширили диск на условные обьем - это диск SDA. Созданная ранее партиция, об этом нечего не знает. Выполните:
~]# growpart /dev/sda1
Ну и теперь собственно расширяем файловую систему:
~]# xfs_growfs -d /
Проверяем
~]# df -h /
Как настроить Multipath
Предположим, сервер с двумя картами HBA, подключенными к контроллеру хранения с одним портом на каждой карте HBA. Один лун, назначенный одному серверу через два номера обеих карт. Таким образом, ОС обнаруживает два устройства: /dev/sdb и /dev/sdc. После того, как мы установили Device Mapper Multipathing. DM-Multipath создает одно устройство с уникальным WWID. Таким образом, при сбое с любым из этих путей ввода-вывода данные могут быть доступны с помощью доступного пути ввода-вывода.
Установка:
~]# yum -y install device-mapper-multipath
Базовая конфигурация:
Файл конфигурации - /etc/multipath.conf
defaults {
user_friendly_names yes
}
blacklist {
devnode “sda”
}
Черный список включает в себя устройства, которые не должны быть настроены в Multipathing. Например, скажем, наш установленный диск ОС - /dev/sda. Таким образом, первая запись в черном списке исключит их.
Генерация multipath конфиг:
~]# mpathconf --enable --user_friendly_names y
Запуск и автозагрузка:
~]# systemctl start multipathd
~]# systemctl enable multipathd
Проверка статуса:
~]# multipath -ll
А как же LVM?
Сканируем новые девайсы
~]# ls /sys/class/scsi_host/ | while read host ; do echo "- - -" > /sys/class/scsi_host/$host/scan ; done
Создаем Linux LVM partition
~]# fdisk /dev/mapper/DATA-DISK
(См.выше:
Создание разделов)
Создаем Linux LVM
~]# pvcreate /dev/mapper/DATA-DISKp1
~]# vgcreate DATAVG /dev/mapper/DATA-DISKp1
~]# lvcreate -n LV03 -l 100%FREE DATAVG
~]# mkfs.xfs /dev/DATAVG/LV03
Failed to create session: Connection timed out
Вы можете сталкнуться с зарегистрированной ошибкой в /var/log/message и /var/log/secure
Sep 10 15:11:27 tes.examplecrond[29383]: pam_systemd(crond:session): Failed to create session: Failed to activate service 'org.freedesktop.login1': timed out
На это есть 2 варианта исхода событий:
Вариант 1:
~]# systemctl daemon-reload
~]# systemctl status dbus.service
~]# systemctl status polkit.service
Если служба dbus не работает, то системе потребуется перезагрузка.
~]# systemctl reboot
~]# systemctl status dbus.service
Если сервис polkit не работает, то запустите сервис polkit
~]# systemctl start polkit.service
~]# systemctl restart systemd-logind
Вариант 2:
Проверьте устройство предоставляемое услугу дисковой подсистемы, вероятно оно светиться как новогодняя ёлка
Копирование структуры каталогов без файлов.
Наверняка Вам доводилось создавать структуру каталогов по аналогии с уже существующей иерархией, согласитесь, это утомительно и можно что то упустить. Для того что бы не упустить не один каталог, установите утилиту
~]# yum install tree
А теперь приступим
TREE
~]# tree -dfi —noreport dir1 | xargs -I{} mkdir -p «$HOME/dir2/{}»

FIND
~]# find dir1 -type d | xargs -I{} mkdir -p «$HOME/dir2/{}»

где,
dir1 - откуда
dir2 - куда
Простая, но порой востребованная тема))
Как переместить ОС Linux с диска на диск меньшего объема?

Вероятно, вы сталкивались с не корректной разметкой дискового пространства в системе, когда выделено места больше чем в этом есть необходимость.
Какая информация Вам необходима:
Информация о дисках
Информация об идентификаторах устройств
Новый диск
Вам необходимо на новом диске сделать разметку по аналогии со старым учитывая новый размер диска.
Переведите систему в режим обслуживания (сервисный режим)
Выполните копирование данных со старой партиции, на новую - согласно архитектуре древа каталогов.
Войдите в новую ФС (скопированную) под средством chroot
Отключите контроль доступа
Измените точки монтирования на новые
Установить grub в загрузочный диск
Сконфигурируйте новый файл конфигурации grub

Измените настройки grub согласно вашим новым идентификаторам

Если Вы используете тип FS -XFS, не забудьте сделать для нее проверку и исправление

Не бойтесь написанного, осталось выполнить все действия и написать команды)

Желаю удачи, не забывайте про snapshot или бекап системы!!
sda->sdb.rtf
12.8 KB
Это то, что вы должны были написать по предыдущей статье)
Не забывайте об архитектурах)
Не освобождается место после удаления файлов
Вы можете столкнуться с ситуацией, когда диск у вас заполнен на 100%. При удаление большого файла (пример - лог файл), файл удаляется, но место не освобождается. Рекомендую, обратиться к файловым дескрипторам.
~]# lsof | grep имя_файла
Условно видим, процесс rsyslog удерживает файл. Но не всегда можно останавливать логирование. Найдем символическую ссылку
~]# ls -l /proc/идентификатор_процесса/fd | grep имя_файла
Найдя дескриптор, стираем
~]# cat /dev/null > /proc/идентификатор_процесса/fd/дескриптор
Проверяем место
~]# df -h
Узнаем причину перезагрузки.
Причиной перезагрузки могут являться многочисленные факторы. Но для начала, нам необходимо собрать информацию для дальнейшего анализа
~]# grep - iv ': starting\|kernel: .*: Power Button\|watching system buttons\|Stopped Cleaning Up\|Started Crash recovery kernel' /var/log/messages /var/log/syslog /var/log/apcupsd * | grep - iw 'recover[a-z]*\|power[a-z]*\|shut[a-z ]*down\|rsyslogd\|ups'

Проверяем события audit
~]# ausearch - i - m system_boot , system_shutdown | tail - 4

Анализ журналов systemd
~]# mkdir /var/log/ournal ~]# systemd - tmpfiles -- create -- prefix /var/log/journal 2 > /dev/null ~]# systemctl - s SIGUSR1 kill systemd - journald
Выведем список записанных событий о загрузке системы
~]# journalctl -- list - boots
Для дальнейшего анализа причины конкретной перезагрузки используйте:
~]# journalctl - b { num } –n
Вирусы в Linux
Вирусов адаптивные под Linux составляет около 1,4 млн. Но все их можно разделить по типам
Rootkit
Это вирус, который встраивается в ядро системы и может скрывать своё присутствие. Обычно руткиты используются не сами по себе, а прикрывают какие-либо другие вирусы, например бэкдоры.
Шифровальщики
Они шифруют ваши файлы и требуют перевести определённую суму денег за расшифровку.
Ботнеты
Они используются для выполнения DDoS атак на различные сайты и узлы сети
Бэкдоры
Это программы, которые позволяют хакеру скрытно проникать в вашу систему.
Черви
Они сами распространяются используя различные уязвимости в системе или слабые пароли. Например SSH пароли к серверам очень часто пытаются перебрать различные черви чтобы проникнуть в систему, сделать то, что им надо и атаковать следующие системы.
Немножко сделаем XAK
Любителям домашних кинопросмотров, посвящается:
1. Переходим на сайт.
2. Выбираем фильм или сериал и переходим
;
3.
После «www.» в адресной строке после точки добавляем «w»;
Должно получиться так — «
https://www.wkinopoisk.ru».
4. Переходим по адресу, после чего откроется плеер с выбранным фильмов или сериалом.
5.
Наслаждайтесь просмотром😎
Linux. Атрибуты.
Что мы можем увидеть в полном выводе команды ls.
~]# ls -l file.tmp
-rw-r--r-- 1 user group 9 Jun 23 19:42 file.tmp
Первый символ обозначает тип файла, дефис нам сообщает о том, что перед нами обычный файл. Следующие девять символов можно разделить на три группы
• u(users)-разрешения для создателя файла
• g(group)-разрешение для группы пользователей
• o(other) - другие пользователи, не подходящие ни под одну категорию.
В выводе команды ls буквы r,w,x - чтение, запись, выполнение.
В примере, владелец файла может просматривать и изменять файл, группа пользователей только просматривать, все остальные тоже только просматривать.
Следующее поле отображает количество жестких ссылок на файл. В данном случае эта цифра 1 означает, что у файла имеется только одно имя. При создании жесткой ссылки на этот файл счетчик увеличится на еденицу. Символические ссылки не учитываются. У каталога жестких ссылок всегда как минимум две. Одна ведет из родительского каталога, а вторая это "." внутри самого каталога.
Поскольку существует три типа пользователей, нам понадобятся 3 x 3 символа:
owner | owner group | others
Эти разрешения могут быть выражены в восьмеричном виде, где:
read = 4
write = 2
execute = 1
или:
r-- = 4
rw- = 6
rwx = 7
Как конвертировать rwx в понятные для Вас права?
~]# stat -c '%n %a' * /tmp/file.tmp
file.tmp 644
Правила auditd для регистрации событий
Одним из способов настройки auditd для регистрации всех событий в Linux является следующая конфигурация:

1. Откройте файл конфигурации auditd:
```
sudo vi /etc/audit/auditd.conf
```
2. Установите следующие значения параметров:
з способов настройки auditd для регистрации всех событий в Linux является следующая конфигурация:

1. Откройте файл конфигурации auditd:
```
sudo vi /etc/audit/auditd.conf
```
2. Установите следующие значения параметров:
```
# Приведите текущие значения параметров к желаемым
log_file = /var/log/audit/audit.log
log_format = ENRICHED
log_group = root
priority_boost = 4
flush = INCREMENTAL_ASYNC
freq = 50
num_logs = 10
disp_qos = lossy
dispatcher = /sbin/audispd
name_format = {{audit\_ARCH}}/%F-%H-%M-%S
name = {{audit\_ARCH}}/%F-%H-%M-%S
max_log_file_action = ROTATE
space_left = 75
space_left_action = SYSLOG
verify_email = yes
3. Создайте каталог для журнальных файлов auditd, если он ещё не существует:

sudo mkdir /var/log/audit

4. Убедитесь, что у каталога правильные разрешения доступа:

sudo chown root:root /var/log/audit
sudo chmod 0700 /var/log/audit

5. Перезапустите службу auditd:
бытий
Одним из способов настройки auditd длТеперь auditd будет регистрировать все события в системе. Журнальные файлы будут храниться в каталоге /var/log/audit/audit.log.
This error message indicates that the session scope session-... failed to start due to a connection timeout.

Это сообщение об ошибке указывает на то, что область действия сеанса session-... не удалось запустить из-за тайм-аута подключения.
Служба systemd-logind отвечает за управление входами пользователей в систему, отслеживание сеансов и создание областей сеанса. Области сеанса создаются для каждого пользовательского сеанса, которые могут быть графическими или неграфическими.
Тайм-аут, возникающий во время запуска области сеанса, указывает на то, что произошла задержка или сбой в установлении необходимого соединения между службой systemd-logind и менеджером сеанса или диспетчером отображения, ответственным за сеанс.
Чтобы устранить эту проблему, вы можете попробовать выполнить следующие действия:
1. Перезапустите службу systemd-logind:
```
sudo systemctl restart systemd-logind
```
2. Проверьте журналы на наличие любых связанных с этим ошибок или предупреждений:
to a connection timeout.

Это сообщ3. Убедитесь, что диспетчер сеансов или диспетчер отображения запущен должным образом. Например, если вы используете GNOME, проверьте статус службы gdm:
`
sudo systemctl status gdm

4. Если вы недавно внесли изменения в систему, такие как обновление пакетов или модификация файлов конфигурации, отмените эти изменения и повторите попытку.
5. Если проблема сохраняется, это может указывать на более сложную проблему, связанную с менеджером сеансов или дисплейным менеджером. В таких случаях вам необходимо повысить версию ОС.