Восстановления файлов в Linux
Многие ошибочно думают, что grep ищет только по содержимому файла. Да же по определению, grep-это утилита командной строки для поиска в текстовых наборах данных строк, соответствующих регулярному выражению. Но это не так)
Утилита способна проводить поиск по всей поверхности диска, есть там файлы или нет. Нужно только знать хотя бы небольшой фрагмент содержимого.
~]# grep --binary-files=text --context=x 'fragment_content' /dev/partition > outFile.txt
Эта команда ищет в разделе /dev/partition строку fragment_content и сохраняет x строк после искомой в текстовый файл outFile.txt. Если указать достаточно большое x и если повезёт, то можно захватить большой кусок файла или весь файл целиком. Ключевым здесь является --binary-files=text, который даёт команду искать среди бинарных данных на диске.
Тем же способом можно извлечь определённую информацию со старых, чужих, выброшенных жёстких дисков.
Желаю удачи!!
Многие ошибочно думают, что grep ищет только по содержимому файла. Да же по определению, grep-это утилита командной строки для поиска в текстовых наборах данных строк, соответствующих регулярному выражению. Но это не так)
Утилита способна проводить поиск по всей поверхности диска, есть там файлы или нет. Нужно только знать хотя бы небольшой фрагмент содержимого.
~]# grep --binary-files=text --context=x 'fragment_content' /dev/partition > outFile.txt
Эта команда ищет в разделе /dev/partition строку fragment_content и сохраняет x строк после искомой в текстовый файл outFile.txt. Если указать достаточно большое x и если повезёт, то можно захватить большой кусок файла или весь файл целиком. Ключевым здесь является --binary-files=text, который даёт команду искать среди бинарных данных на диске.
Тем же способом можно извлечь определённую информацию со старых, чужих, выброшенных жёстких дисков.
Желаю удачи!!
Уязвимость в ядре Linux. Выход из контейнеров Kubernetes.
Уязвимость в ядре Linux, имеющая идентификатор CVE-2022-0185, может использоваться для выхода из контейнеров Kubernetes. CVE-2022-0185 представляет собой переполнения буфера хипа в компоненте ядра File System Context. Уязвимость приводит к out-of-bounds записи, отказу в обслуживании, а в итоге и к выполнению произвольного кода.
В бюллетенях безопасности, отмечалось, что с помощью этого бага локальный пользователь может повысить свои привилегии в системе.
РЕШЕНИЕ:
Red Hat
На неконтейнеризированных развертываниях Red Hat Enterprise Linux 8 вы можете отключить пространства имен пользователей, установив user.max_user_namespaces на 0:
~]# echo "user.max_user_namespaces=0" > /etc/sysctl.d/userns.conf ~]# sysctl -p /etc/sysctl.d/userns.conf
UBUNTU
~]# sysctl -w kernel.unprivileged_userns_clone=0
Уязвимость в ядре Linux, имеющая идентификатор CVE-2022-0185, может использоваться для выхода из контейнеров Kubernetes. CVE-2022-0185 представляет собой переполнения буфера хипа в компоненте ядра File System Context. Уязвимость приводит к out-of-bounds записи, отказу в обслуживании, а в итоге и к выполнению произвольного кода.
В бюллетенях безопасности, отмечалось, что с помощью этого бага локальный пользователь может повысить свои привилегии в системе.
РЕШЕНИЕ:
Red Hat
На неконтейнеризированных развертываниях Red Hat Enterprise Linux 8 вы можете отключить пространства имен пользователей, установив user.max_user_namespaces на 0:
~]# echo "user.max_user_namespaces=0" > /etc/sysctl.d/userns.conf ~]# sysctl -p /etc/sysctl.d/userns.conf
UBUNTU
~]# sysctl -w kernel.unprivileged_userns_clone=0
Как исправить сломанные пакеты в Linux
Бывает, когда вы пытаетесь запустить какое-либо обновление или попытаться установить новый пакет в свои системы RHEL/CentOS, вы получаете ошибку сломанного пакета. Эта ошибка не позволяет вам продолжить обновление или установку, что приводит к блокировке.
Сломанные пакеты - когда некоторые из пакетов либо не были установлены должным образом, либо были частично установлены по какой-то неожиданной причине.
- Сначала вам нужно проверить все пакеты с информацией о файлах, взятых из метаданных пакета, хранящихся в базе данных rpm,
~]# rpm -Va
- Решение проблемы неработающего пакета - запустить обновление с опцией -b
~]# dnf upgrade -b
- Если вы знаете конкретный сломанный пакет, вы можете попробовать переустановить этот пакет
~]# dnf --refresh reinstall package_name
- Если вы столкнулись с какой-либо ошибкой сломанного пакета при запуске команды yum
~]# yum reinstall \*
Если yum не может восстановить, вы можете пропустить эти пакеты, используя опцию --skip-broken.
Бывает, когда вы пытаетесь запустить какое-либо обновление или попытаться установить новый пакет в свои системы RHEL/CentOS, вы получаете ошибку сломанного пакета. Эта ошибка не позволяет вам продолжить обновление или установку, что приводит к блокировке.
Сломанные пакеты - когда некоторые из пакетов либо не были установлены должным образом, либо были частично установлены по какой-то неожиданной причине.
- Сначала вам нужно проверить все пакеты с информацией о файлах, взятых из метаданных пакета, хранящихся в базе данных rpm,
~]# rpm -Va
- Решение проблемы неработающего пакета - запустить обновление с опцией -b
~]# dnf upgrade -b
- Если вы знаете конкретный сломанный пакет, вы можете попробовать переустановить этот пакет
~]# dnf --refresh reinstall package_name
- Если вы столкнулись с какой-либо ошибкой сломанного пакета при запуске команды yum
~]# yum reinstall \*
Если yum не может восстановить, вы можете пропустить эти пакеты, используя опцию --skip-broken.
Понимание lsof
lsof расшифровывается как “List Open Files”, это инструмент командной строки в Linux, который предоставляет подробный список всех открытых файлов в системе.
Основной синтаксис команды lsof прост
~]# lsof
По умолчанию lsof отобразит список всех открытых файлов для всех процессов, запущенных в системе.
Вывод отобразит:
идентификатор процесса (PID)
идентификатор потока (TID)
имя команды задачи (TASKCMD)
имя пользователя, выполняющего процесс (USER)
файловый дескриптор (FD)
тип файла (TYPE)
устройство (DEVICE)
размер (SIZE/OFF)
имя файла (NAME)
для каждого открытого файла.
Опции:
-c: позволяет отображать только открытые файлы для процессов
~]# lsof -c https
-u: позволяет отображать только открытые файлы для процессов, запущенных под определенным пользователем
~]# lsof -u root
-p: позволяет отображать только открытые файлы для определенного идентификатора процесса
~]# lsof -p 123
-i: позволяет отображать только открытые сетевые файлы
~]# lsof -i
-r: позволяет повторять отображение открытых файлов с заданным интервалом
~]# lsof -r 5
Ситуации когда можно использовать lsof для выявления проблемы:
- Использование дискового пространства
- Зависшие процессы
- Отладка сетевых проблем
- Устранение неполадок с блокировкой файлов
- Мониторинг активности системы
-Обнаружение не известных процессов
lsof расшифровывается как “List Open Files”, это инструмент командной строки в Linux, который предоставляет подробный список всех открытых файлов в системе.
Основной синтаксис команды lsof прост
~]# lsof
По умолчанию lsof отобразит список всех открытых файлов для всех процессов, запущенных в системе.
Вывод отобразит:
идентификатор процесса (PID)
идентификатор потока (TID)
имя команды задачи (TASKCMD)
имя пользователя, выполняющего процесс (USER)
файловый дескриптор (FD)
тип файла (TYPE)
устройство (DEVICE)
размер (SIZE/OFF)
имя файла (NAME)
для каждого открытого файла.
Опции:
-c: позволяет отображать только открытые файлы для процессов
~]# lsof -c https
-u: позволяет отображать только открытые файлы для процессов, запущенных под определенным пользователем
~]# lsof -u root
-p: позволяет отображать только открытые файлы для определенного идентификатора процесса
~]# lsof -p 123
-i: позволяет отображать только открытые сетевые файлы
~]# lsof -i
-r: позволяет повторять отображение открытых файлов с заданным интервалом
~]# lsof -r 5
Ситуации когда можно использовать lsof для выявления проблемы:
- Использование дискового пространства
- Зависшие процессы
- Отладка сетевых проблем
- Устранение неполадок с блокировкой файлов
- Мониторинг активности системы
-Обнаружение не известных процессов
Команды командной строки Linux
Смена разрешения rwx на восьмеричный формат в Linux
~]# stat -c '%n %a' info_file
info_file 755
Безвозвратное удаление файла в Linux
~]# shred -zvu info_file
Проверка правописания слов в Linux
~]# look docum
Поиск описания ключевого слова на странице руководства
~]# man -k https
Список всех команд, встроенных в оболочку.
~]# help
Мгновенный переход в только что созданный каталог
~]# mkdir dir1 && cd $_
~]# mkdir dir1 && cd !$
Мгновенное выполнение нужного элемента истории
~]# !123
Переход в последнюю рабочую директорию
~]# cd -
Смена разрешения rwx на восьмеричный формат в Linux
~]# stat -c '%n %a' info_file
info_file 755
Безвозвратное удаление файла в Linux
~]# shred -zvu info_file
Проверка правописания слов в Linux
~]# look docum
Поиск описания ключевого слова на странице руководства
~]# man -k https
Список всех команд, встроенных в оболочку.
~]# help
Мгновенный переход в только что созданный каталог
~]# mkdir dir1 && cd $_
~]# mkdir dir1 && cd !$
Мгновенное выполнение нужного элемента истории
~]# !123
Переход в последнюю рабочую директорию
~]# cd -
Ключи сервера
Первый раз, когда вы заходите на сервер, ssh вас спрашивает, доверяете ли вы ключу. Если отвечаете нет, соединение закрывается. Если да - ключ сохраняется в файл ~/.ssh/known_hosts.
Если ключ сервера изменился, то при попытке соединения SSH/PUTTY информирует о подделке ключа «ВНИМАНИЕ-ПОТЕНЦИАЛЬНАЯ БРЕШЬ В БЕЗОПАСНОСТИ»
Обратите внимание, если сервер не трогали, а ssh информирует, значит вы не на тот сервер выполняете авторизацию (например, в сети появился ещё один компьютер с тем же IP) или кто то изменил ключ.
Удалить известный ключ сервера
~]# ssh-keygen -R server
Удалить ещё и ключ IP
~]# ssh-keygen -R 127.0.0.1
Ключ сервера хранится
/etc/ssh/ssh_host_rsa_key
/etc/ssh/ssh_host_rsa_key.pub
/etc/ssh/ssh_host_ecdsa_key
/etc/ssh/ssh_host_ecdsa_key.pub
/etc/ssh/ssh_host_ed25519_key
/etc/ssh/ssh_host_ed25519_key.pub
Если вы ВМ клонируете, то ssh-ключи сервера нужно обязательно перегенерировать
Удалить склонированные;
~]$ rm -fr /etc/ssh/ssh_host_*
Перезапустить службу
~]# systemctl restart sshd
Новый ключи сформируются в /etc/ssh/
ssh_host_ecdsa_key
ssh_host_ecdsa_key.pub
ssh_host_ed25519_key
ssh_host_ed25519_key.pub
ssh_host_rsa_key.pub
ssh_host_rsa_key
Если выше перечисленные *.pub не сформировались автоматически, после перезапуска службы или службу нельзя перезапускать, то их можно сформировать вручную
~]# ssh-keygen -f /etc/ssh/ssh_host_ed25519_key -N '' -t ed25519
~]# ssh-keygen -f /etc/ssh/ssh_host_ecdsa_key -N '' -t ecdsa
Первый раз, когда вы заходите на сервер, ssh вас спрашивает, доверяете ли вы ключу. Если отвечаете нет, соединение закрывается. Если да - ключ сохраняется в файл ~/.ssh/known_hosts.
Если ключ сервера изменился, то при попытке соединения SSH/PUTTY информирует о подделке ключа «ВНИМАНИЕ-ПОТЕНЦИАЛЬНАЯ БРЕШЬ В БЕЗОПАСНОСТИ»
Обратите внимание, если сервер не трогали, а ssh информирует, значит вы не на тот сервер выполняете авторизацию (например, в сети появился ещё один компьютер с тем же IP) или кто то изменил ключ.
Удалить известный ключ сервера
~]# ssh-keygen -R server
Удалить ещё и ключ IP
~]# ssh-keygen -R 127.0.0.1
Ключ сервера хранится
/etc/ssh/ssh_host_rsa_key
/etc/ssh/ssh_host_rsa_key.pub
/etc/ssh/ssh_host_ecdsa_key
/etc/ssh/ssh_host_ecdsa_key.pub
/etc/ssh/ssh_host_ed25519_key
/etc/ssh/ssh_host_ed25519_key.pub
Если вы ВМ клонируете, то ssh-ключи сервера нужно обязательно перегенерировать
Удалить склонированные;
~]$ rm -fr /etc/ssh/ssh_host_*
Перезапустить службу
~]# systemctl restart sshd
Новый ключи сформируются в /etc/ssh/
ssh_host_ecdsa_key
ssh_host_ecdsa_key.pub
ssh_host_ed25519_key
ssh_host_ed25519_key.pub
ssh_host_rsa_key.pub
ssh_host_rsa_key
Если выше перечисленные *.pub не сформировались автоматически, после перезапуска службы или службу нельзя перезапускать, то их можно сформировать вручную
~]# ssh-keygen -f /etc/ssh/ssh_host_ed25519_key -N '' -t ed25519
~]# ssh-keygen -f /etc/ssh/ssh_host_ecdsa_key -N '' -t ecdsa
Боремся с 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
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 секунд и если все эти попытки закончатся неудачей, дальнейших попыток перезапуска не будет.
Регулярно сталкиваемся с тем что, сервис падает и мы не успеваем его своевременно поднять. Я против костылей, но описанное ниже решение использует функционал 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
А теперь применим бомбу
‼️~]# :(){:|:&};:
❗️Не забудьте, что есть и маскированные команды
Самая веселая, но печально известная команда:
❗️~]# 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
Уничтожение родительского процесса может повлиять на все его дочерние процессы.
Зомби-процессы в 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/имя_файла
/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 передаст все аргументы необходимые для ввода
Желаю удачи!! Оптимизируете свои трудозатраты!!
При работе с большим объемом дисков, мы стараемся создавать новую пустую таблицу разделов 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 передаст все аргументы необходимые для ввода
Желаю удачи!! Оптимизируете свои трудозатраты!!
К сердцу самых скрываемых данных от лишних глаз!
Не однократно, Вы сталкиваетесь с ситуацией, когда Вы не желаете что бы злоумышленник овладел вашими данными. Первым делом, Вы, что делаете?
Правильно, удаляете информацию.
Представим, Вы решили сохранить логины/пароли в самом не приметном месте дискового пространства в 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
Будьте аккуратны с тем, что вы храните в ОС!!
Желаю удачи, думаю Вам есть над чем размыслить ))
Не однократно, Вы сталкиваетесь с ситуацией, когда Вы не желаете что бы злоумышленник овладел вашими данными. Первым делом, Вы, что делаете?
Правильно, удаляете информацию.
Представим, Вы решили сохранить логины/пароли в самом не приметном месте дискового пространства в 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 /
Предположим, у вас в системе зарегистрирован диска 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
Предположим, сервер с двумя картами 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:
Проверьте устройство предоставляемое услугу дисковой подсистемы, вероятно оно светиться как новогодняя ёлка
Вы можете сталкнуться с зарегистрированной ошибкой в /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 - куда
Простая, но порой востребованная тема))
Наверняка Вам доводилось создавать структуру каталогов по аналогии с уже существующей иерархией, согласитесь, это утомительно и можно что то упустить. Для того что бы не упустить не один каталог, установите утилиту
~]# 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 или бекап системы!!
Вероятно, вы сталкивались с не корректной разметкой дискового пространства в системе, когда выделено места больше чем в этом есть необходимость.
Какая информация Вам необходима:
Информация о дисках
Информация об идентификаторах устройств
Новый диск
Вам необходимо на новом диске сделать разметку по аналогии со старым учитывая новый размер диска.
Переведите систему в режим обслуживания (сервисный режим)
Выполните копирование данных со старой партиции, на новую - согласно архитектуре древа каталогов.
Войдите в новую ФС (скопированную) под средством 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
Вы можете столкнуться с ситуацией, когда диск у вас заполнен на 100%. При удаление большого файла (пример - лог файл), файл удаляется, но место не освобождается. Рекомендую, обратиться к файловым дескрипторам.
~]# lsof | grep имя_файла
Условно видим, процесс rsyslog удерживает файл. Но не всегда можно останавливать логирование. Найдем символическую ссылку
~]# ls -l /proc/идентификатор_процесса/fd | grep имя_файла
Найдя дескриптор, стираем
~]# cat /dev/null > /proc/идентификатор_процесса/fd/дескриптор
Проверяем место
~]# df -h