TCPDUMP. Анализ и перехват сетевого трафика.
tcpdump — отличный инструмент командной строки, который способен перехватывать и анализировать сетевой трафик.
Синтаксис:
tcpdump опции -i интерфейс фильтры
Опции tcpdump
-A: Позволяет отсортировать пакеты с форматом ASCII
-l: Добавляет функцию прокрутки
-i: После ввода нужно указать сетевой интерфейс, который будет отслеживаться. Чтобы начать отслеживать все интерфейсы, впишите после опции слово «any»
-c: Завершает процесс отслеживания после проверки указанного количества пакетов
-w: Генерирует текстовый файл с отчетом проверки
-e: Показывает уровень интернет-соединения пакета данных
-L: Выводит только те протоколы, которые поддерживает указанный сетевой интерфейс
-C: Создает другой файл во время записи пакета, если его размер больше заданного
-r: Открывает файл для чтения, который был создан с помощью опции -w
-j: Для записи пакетов будет использоваться формат TimeStamp
-J: Позволяет просмотреть все доступные форматы TimeStamp
-G: Служит для создания файла с логами. Опция требует также указания временного значения, по истечении которого будет создаваться новый лог
-v, -vv, -vvv: В зависимости от количества символов в опции, вывод команды будет становиться подробнее
-f: В выводе показывает имя домена адресов IP
-F: Позволяет считывать информацию не из сетевого интерфейса, а из указанного файла
-D: Демонстрирует все сетевые интерфейсы, которые можно использовать
-n: Деактивирует отображение доменных имен
-Z: Задает пользователя, под учетной записью которого будут созданы все файлы
-K: Пропуск анализа контрольных сумм
-q: Демонстрация краткой информации
-H: Позволяет обнаружить заголовки 802.11s
-I: Используется при захвате пакетов в режиме монитора
Фильтры
host: Служит для указания имени хоста
net: Указывает IP подсети и сети
ip: Служит для указания адреса протокола
src: Выводит пакеты, которые были отправлены с указанного адреса
dst: Выводит пакеты, которые были получены указанным адресом
arp, udp, tcp: Фильтрация по одному из протоколов
port: Отображает информацию, относящуюся к определенному порту
and, or: Служит для объединения нескольких фильтров в команде
less, greater: Вывод пакетов меньше или больше указанного размера
Пример вывода:
20:58:26.765637 IP 10.0.0.50.80 > 10.0.0.1.53181: Flags [F.], seq 1, ack 2, win 453, options [nop,nop,TS val 3822939 ecr 249100129], length 0
Описание:
• Метка времени Unix (20: 58: 26.765637)
• протокол (IP)
• имя или IP-адрес исходного хоста и номер порта (10.0.0.50.80)
• имя хоста или IP-адрес назначения и номер порта (10.0.0.1.53181)
• Флаги TCP (Flags [F.]). Указывают на состояние соединения и могут содержать более одного значения:
• o S — SYN. Первый шаг в установлении соединения
• F — FIN. Прекращение соединения
• — ACK. Пакет подтверждения принят успешно
• P — PUSH. Указывает получателю обрабатывать пакеты вместо их буферизации
• R — RST. Связь прервалась
• Порядковый номер данных в пакете. (seq 1)
• Номер подтверждения. (ack 2)
• Размер окна (win 453). Количество байтов, доступных в приемном буфере. Далее следуют параметры TCP
• Длина полезной нагрузки данных. (length 0)
tcpdump — отличный инструмент командной строки, который способен перехватывать и анализировать сетевой трафик.
Синтаксис:
tcpdump опции -i интерфейс фильтры
Опции tcpdump
-A: Позволяет отсортировать пакеты с форматом ASCII
-l: Добавляет функцию прокрутки
-i: После ввода нужно указать сетевой интерфейс, который будет отслеживаться. Чтобы начать отслеживать все интерфейсы, впишите после опции слово «any»
-c: Завершает процесс отслеживания после проверки указанного количества пакетов
-w: Генерирует текстовый файл с отчетом проверки
-e: Показывает уровень интернет-соединения пакета данных
-L: Выводит только те протоколы, которые поддерживает указанный сетевой интерфейс
-C: Создает другой файл во время записи пакета, если его размер больше заданного
-r: Открывает файл для чтения, который был создан с помощью опции -w
-j: Для записи пакетов будет использоваться формат TimeStamp
-J: Позволяет просмотреть все доступные форматы TimeStamp
-G: Служит для создания файла с логами. Опция требует также указания временного значения, по истечении которого будет создаваться новый лог
-v, -vv, -vvv: В зависимости от количества символов в опции, вывод команды будет становиться подробнее
-f: В выводе показывает имя домена адресов IP
-F: Позволяет считывать информацию не из сетевого интерфейса, а из указанного файла
-D: Демонстрирует все сетевые интерфейсы, которые можно использовать
-n: Деактивирует отображение доменных имен
-Z: Задает пользователя, под учетной записью которого будут созданы все файлы
-K: Пропуск анализа контрольных сумм
-q: Демонстрация краткой информации
-H: Позволяет обнаружить заголовки 802.11s
-I: Используется при захвате пакетов в режиме монитора
Фильтры
host: Служит для указания имени хоста
net: Указывает IP подсети и сети
ip: Служит для указания адреса протокола
src: Выводит пакеты, которые были отправлены с указанного адреса
dst: Выводит пакеты, которые были получены указанным адресом
arp, udp, tcp: Фильтрация по одному из протоколов
port: Отображает информацию, относящуюся к определенному порту
and, or: Служит для объединения нескольких фильтров в команде
less, greater: Вывод пакетов меньше или больше указанного размера
Пример вывода:
20:58:26.765637 IP 10.0.0.50.80 > 10.0.0.1.53181: Flags [F.], seq 1, ack 2, win 453, options [nop,nop,TS val 3822939 ecr 249100129], length 0
Описание:
• Метка времени Unix (20: 58: 26.765637)
• протокол (IP)
• имя или IP-адрес исходного хоста и номер порта (10.0.0.50.80)
• имя хоста или IP-адрес назначения и номер порта (10.0.0.1.53181)
• Флаги TCP (Flags [F.]). Указывают на состояние соединения и могут содержать более одного значения:
• o S — SYN. Первый шаг в установлении соединения
• F — FIN. Прекращение соединения
• — ACK. Пакет подтверждения принят успешно
• P — PUSH. Указывает получателю обрабатывать пакеты вместо их буферизации
• R — RST. Связь прервалась
• Порядковый номер данных в пакете. (seq 1)
• Номер подтверждения. (ack 2)
• Размер окна (win 453). Количество байтов, доступных в приемном буфере. Далее следуют параметры TCP
• Длина полезной нагрузки данных. (length 0)
Без парольный доступ. Работа с rsa ключами.
Для осуществления без парольного доступа, используют RSA ключи.
RSA - криптографический алгоритм с открытым ключом.
Предположим у вас есть пул машин, одна из которых, с именем - central.server, а остальные - server
На сервере central.server:
~]# hostname
central.server
~]# cat ~/.ssh/id_rsa
В случае отсутствия, выполните:
~]# ssh-keygen
(На все запросы нажмите Enter)
Помните, при генерации нового ключа с заменой предыдущего, вы не сможете воспользоваться предыдущим ключом.
На серверах, server:
~]# hostname
server
~]# mkdir ~/.ssh
~]# touch ~/.ssh/authorized_keys
~]# chmod -R 700 $HOME/.ssh
~]# chmod 644 ~/.ssh/authorized_keys
Скопировать содержимое из ~/.ssh/id_rsa с central.server в ~/.ssh/authorized_keys на пул серверов к которым вы желаете осуществить подключение.
Альтернативой копирования ключа, может выступить rsa-copy-id
..@central.server ~]# rsa-copy-id username@server
или
..@central.server ~]# cat .ssh/id_rsa.pub | ssh username@server 'cat >> ~/.ssh/authorized_keys'
Проверяем:
..@central.server ~]# ssh username@server
Для осуществления без парольного доступа, используют RSA ключи.
RSA - криптографический алгоритм с открытым ключом.
Предположим у вас есть пул машин, одна из которых, с именем - central.server, а остальные - server
На сервере central.server:
~]# hostname
central.server
~]# cat ~/.ssh/id_rsa
В случае отсутствия, выполните:
~]# ssh-keygen
(На все запросы нажмите Enter)
Помните, при генерации нового ключа с заменой предыдущего, вы не сможете воспользоваться предыдущим ключом.
На серверах, server:
~]# hostname
server
~]# mkdir ~/.ssh
~]# touch ~/.ssh/authorized_keys
~]# chmod -R 700 $HOME/.ssh
~]# chmod 644 ~/.ssh/authorized_keys
Скопировать содержимое из ~/.ssh/id_rsa с central.server в ~/.ssh/authorized_keys на пул серверов к которым вы желаете осуществить подключение.
Альтернативой копирования ключа, может выступить rsa-copy-id
..@central.server ~]# rsa-copy-id username@server
или
..@central.server ~]# cat .ssh/id_rsa.pub | ssh username@server 'cat >> ~/.ssh/authorized_keys'
Проверяем:
..@central.server ~]# ssh username@server
Окружение. Переменные.
Переменные окружения - это переменные каждого пользователя специфичные для определенной среды, в операционной системе .
Несколько примеров переменных окружения в Linux:
• USER – указывает на текущего вошедшего в систему пользователя.
• HOME – отображается домашний каталог текущего пользователя.
• SHELL – путь к оболочке текущего пользователя
• LANG – переменная указывает на текущие настройки языка / локали.
• MAIL – местоположение, в котором хранится почта текущего пользователя.
Эти переменные окружения меняются в зависимости от текущего сеанса пользователя.
Отобразить список переменных окружения:
~]# env
Вывод переменных окружения Linux:
~]# printenv VAR
или
~]# echo $VAR
Установить переменные среды окружения.
Синтаксис
export VAR_NaME=value
Пример:
~]# export LOG=/var/log
Проверить:
~]# env
~]# cd $LOG
Данные метод, является временным и сохраняется для текущего сеанса.
Постоянные переменные окружения.
bashrc - файл сценария, который выполняется всякий раз, когда пользователь входит в систему.
Чтобы сделать LOG переменную постоянной, отредактируйте файл .bashrc и определите ее в нем
~]# vi ~/.bashrc
Для вступления изменений в силу, выполните:
~]# source .bashrc
Данная переменная станет постоянной, но только для текущего пользователя.
Создание глобальных постоянных переменных
Для применения общесистемных переменных (переменных доступных всем пользователям), используется файл /etc/environment
Добавьте переменную LOG с ее значением в файл. Чтобы изменения вступили в силу, используйте команду
~]# source /etc/environment
Переменные, установленные в /etc/profile, считываются всякий раз, когда оболочка bash входит в систему. Отредактируйте:
~]# vi /etc/profile
и внесите, в содержимое:
export hi=“HI Linux Administrator”
Переменные окружения - это переменные каждого пользователя специфичные для определенной среды, в операционной системе .
Несколько примеров переменных окружения в Linux:
• USER – указывает на текущего вошедшего в систему пользователя.
• HOME – отображается домашний каталог текущего пользователя.
• SHELL – путь к оболочке текущего пользователя
• LANG – переменная указывает на текущие настройки языка / локали.
• MAIL – местоположение, в котором хранится почта текущего пользователя.
Эти переменные окружения меняются в зависимости от текущего сеанса пользователя.
Отобразить список переменных окружения:
~]# env
Вывод переменных окружения Linux:
~]# printenv VAR
или
~]# echo $VAR
Установить переменные среды окружения.
Синтаксис
export VAR_NaME=value
Пример:
~]# export LOG=/var/log
Проверить:
~]# env
~]# cd $LOG
Данные метод, является временным и сохраняется для текущего сеанса.
Постоянные переменные окружения.
bashrc - файл сценария, который выполняется всякий раз, когда пользователь входит в систему.
Чтобы сделать LOG переменную постоянной, отредактируйте файл .bashrc и определите ее в нем
~]# vi ~/.bashrc
Для вступления изменений в силу, выполните:
~]# source .bashrc
Данная переменная станет постоянной, но только для текущего пользователя.
Создание глобальных постоянных переменных
Для применения общесистемных переменных (переменных доступных всем пользователям), используется файл /etc/environment
Добавьте переменную LOG с ее значением в файл. Чтобы изменения вступили в силу, используйте команду
~]# source /etc/environment
Переменные, установленные в /etc/profile, считываются всякий раз, когда оболочка bash входит в систему. Отредактируйте:
~]# vi /etc/profile
и внесите, в содержимое:
export hi=“HI Linux Administrator”
system_info.pages
165.6 KB
Информация о системе. Как узнать быстро состояние?
Существует многочисленное количество команд для уточнения состояния системы, таких как mem, cpu, disk и иная информация. Я всегда только «ЗА» оптимизацию, получать своевременно и мгновенно информацию.
Прикрепленный файл system_info, несет в себе bash скрипт, при исполнении которого вам будет выведена информация о:
- загрузка системы
- использование дискового массива
- Использование оперативной памяти
- Количество процессов запущенных в системе
- Количество пользователей авторизованных в системе
- IP адрес
Но при чем тут автоматизация? Верно, автоматизация заключается в получении информации с применением минимальных труда затрат. Именно по этому мы сейчас допилим не большие моменты:
Измените привилегии доступа, сделайте исполняемым файл (при необходимости переименуйте файл):
~]# chown root. system_info.sh
Внесите изменения в конфигурационный файл /etc/bashrc и добавьте в конец файла, содержимое:
InfoScript=«/etc/system_info.sh";
if [[ -n $SSH_CONNECTION ]] && [ -x "$InfoScript" ]; then
/bin/bash $InfoScript; echo "";
fi;
А теперь, вы можете перезайти в систему и наслаждаться результатом информации о ней.
Существует многочисленное количество команд для уточнения состояния системы, таких как mem, cpu, disk и иная информация. Я всегда только «ЗА» оптимизацию, получать своевременно и мгновенно информацию.
Прикрепленный файл system_info, несет в себе bash скрипт, при исполнении которого вам будет выведена информация о:
- загрузка системы
- использование дискового массива
- Использование оперативной памяти
- Количество процессов запущенных в системе
- Количество пользователей авторизованных в системе
- IP адрес
Но при чем тут автоматизация? Верно, автоматизация заключается в получении информации с применением минимальных труда затрат. Именно по этому мы сейчас допилим не большие моменты:
Измените привилегии доступа, сделайте исполняемым файл (при необходимости переименуйте файл):
~]# chown root. system_info.sh
Внесите изменения в конфигурационный файл /etc/bashrc и добавьте в конец файла, содержимое:
InfoScript=«/etc/system_info.sh";
if [[ -n $SSH_CONNECTION ]] && [ -x "$InfoScript" ]; then
/bin/bash $InfoScript; echo "";
fi;
А теперь, вы можете перезайти в систему и наслаждаться результатом информации о ней.
Список пользователей.
Информация о локальных пользователях хранится в файле /etc/passwd.
~]# less /etc/passwd
Если вы хотите отображать только имя пользователя, вы можете использовать команды awk или cut для печати только первого поля, содержащего имя пользователя:
~]# awk -F: '{ print $1}' /etc/passwd
или
~]# cut -d: -f1 /etc/passwd
GETENT.
Команда getent отображает записи из баз данных, настроенных в файле /etc/nsswitch.conf, в том числе и passwd
~]# getent passwd
Если вы используете доменную аутентификацию, getent будет отображать всех пользователей Linux как из файла /etc/passwd, так и из AD/LDAP.
~]# getent passwd | awk -F: '{ print $1}'
или
~]# getent passwd | cut -d: -f1
Аналогично можно выполнить:
~]# compgen -u
Пользователи в Linux подразделяются на обычные и системные.
Обычные пользователи — это пользователи, созданные пользователем root или другим пользователем с привилегиями sudo. У каждого пользователя есть числовой идентификатор пользователя, называемый UID. Если UID не был выбран при создании пользователя с помощью useradd, то он будет выбран автоматически между UID_MIN и UID_MAX. Как их узнать?
~]# grep -E '^UID_MIN|^UID_MAX' /etc/login.defs
Вывод:
UID_MIN 500
UID_MAX 6000
Знание минимального и максимального значения позволяет нам запрашивать список всех обычных пользователей в нашей системе.
~]# getent passwd {500..6000}
Как отобразить пользователей имеющих оболочку входа?
~]# cat /etc/passwd | grep -E 'bash|sh|bin|zsh'
или
~]# cat /etc/passwd | grep -E -v 'nologin'
Информация о локальных пользователях хранится в файле /etc/passwd.
~]# less /etc/passwd
Если вы хотите отображать только имя пользователя, вы можете использовать команды awk или cut для печати только первого поля, содержащего имя пользователя:
~]# awk -F: '{ print $1}' /etc/passwd
или
~]# cut -d: -f1 /etc/passwd
GETENT.
Команда getent отображает записи из баз данных, настроенных в файле /etc/nsswitch.conf, в том числе и passwd
~]# getent passwd
Если вы используете доменную аутентификацию, getent будет отображать всех пользователей Linux как из файла /etc/passwd, так и из AD/LDAP.
~]# getent passwd | awk -F: '{ print $1}'
или
~]# getent passwd | cut -d: -f1
Аналогично можно выполнить:
~]# compgen -u
Пользователи в Linux подразделяются на обычные и системные.
Обычные пользователи — это пользователи, созданные пользователем root или другим пользователем с привилегиями sudo. У каждого пользователя есть числовой идентификатор пользователя, называемый UID. Если UID не был выбран при создании пользователя с помощью useradd, то он будет выбран автоматически между UID_MIN и UID_MAX. Как их узнать?
~]# grep -E '^UID_MIN|^UID_MAX' /etc/login.defs
Вывод:
UID_MIN 500
UID_MAX 6000
Знание минимального и максимального значения позволяет нам запрашивать список всех обычных пользователей в нашей системе.
~]# getent passwd {500..6000}
Как отобразить пользователей имеющих оболочку входа?
~]# cat /etc/passwd | grep -E 'bash|sh|bin|zsh'
или
~]# cat /etc/passwd | grep -E -v 'nologin'
blk_update_request.
Что делать если у вас регулярно регистрируется ошибка:
blk_update_request: I/O error, dev fd0, sector 0
Вы наверняка знаете, ранее в ПК мы использовали FLOPPY.
На ряду новых технологий, мы используем DVD, USB носители информации и совсем забыли о FLOPPY, так же как и о драйвере. Так давайте его отключим:
~]# rmmod floppy
Добавим в черный список загружаемых модулей
~]# echo "blacklist floppy" | sudo tee /etc/modprobe.d/blacklist-floppy.conf
~]# dracut -f -v
Выполним перезапуск системы
~]# reboot
Что делать если у вас регулярно регистрируется ошибка:
blk_update_request: I/O error, dev fd0, sector 0
Вы наверняка знаете, ранее в ПК мы использовали FLOPPY.
На ряду новых технологий, мы используем DVD, USB носители информации и совсем забыли о FLOPPY, так же как и о драйвере. Так давайте его отключим:
~]# rmmod floppy
Добавим в черный список загружаемых модулей
~]# echo "blacklist floppy" | sudo tee /etc/modprobe.d/blacklist-floppy.conf
~]# dracut -f -v
Выполним перезапуск системы
~]# reboot
cheat_sheet_selinux_v2.pdf
128.5 KB
Управление и использование SELinux.
Common Vulnerabilities and Exposures
CVE - база данных общеизвестных уязвимостей информационной безопасности. Каждой уязвимости присваивается идентификационный номер вида CVE-год-номер.
Red Hat CVE Checker
NEW Web site CVE
CVE - база данных общеизвестных уязвимостей информационной безопасности. Каждой уязвимости присваивается идентификационный номер вида CVE-год-номер.
Red Hat CVE Checker
NEW Web site CVE
CVE-2019-14287
Уязвимость CVE-2019-14287 очень интересна в своей природе. Благодаря наличию уязвимости в ОС, злоумышленник может овладеть максимальными привилегиями. Рассмотрим ее.
Для начала настроим разрешенное пользователю user_name для запуска всех прав пользователя, кроме корневых разрешений vim.
~]# visudo
или
~]# vi /etc/sudoers
…
user_name ALL=(ALL, !root) /usr/bin/vim
…
Сохранить.
Выполните:
~]# sudo -u#-1 id -u
или
~]# sudo -u#4294967295 id -u
в случае если после ввода пароля вы стали супер пользователем, сожалею - ваша система уязвима.
Причиной, по которой пользователь овладевает привилегиями- преобразование идентификатора пользователя в имени пользователя -1 (или не действительное значение 4294967295)
Решение:
Уязвимость влияет на все версии Sudo до последней версии 1.8.28. Необходимо повысить версию.
Уязвимость CVE-2019-14287 очень интересна в своей природе. Благодаря наличию уязвимости в ОС, злоумышленник может овладеть максимальными привилегиями. Рассмотрим ее.
Для начала настроим разрешенное пользователю user_name для запуска всех прав пользователя, кроме корневых разрешений vim.
~]# visudo
или
~]# vi /etc/sudoers
…
user_name ALL=(ALL, !root) /usr/bin/vim
…
Сохранить.
Выполните:
~]# sudo -u#-1 id -u
или
~]# sudo -u#4294967295 id -u
в случае если после ввода пароля вы стали супер пользователем, сожалею - ваша система уязвима.
Причиной, по которой пользователь овладевает привилегиями- преобразование идентификатора пользователя в имени пользователя -1 (или не действительное значение 4294967295)
Решение:
Уязвимость влияет на все версии Sudo до последней версии 1.8.28. Необходимо повысить версию.
Cтруктура файловой системы Linux
/ - корень;
Это главный каталог в системе Linux. По сути, это и есть файловая система Linux.
/bin - каталог с бинарными файлами пользователя;
Этот каталог содержит исполняемые файлы. Здесь расположены программы, которые можно использовать в однопользовательском режиме или режиме восстановления.
/sbin - системные исполняемые файлы;
Так же как и /bin, содержит двоичные исполняемые файлы
/etc - каталог с конфигурационными файлами;
В этом каталоге содержатся конфигурационные файлы всех программ, установленных в системе.
/dev - файлы устройств;
Местоположение всех подключенных устройств
/proc - информация о процессах;
Это подсистема, динамически создаваемая ядром ОС.
/var - Переменные файлы;
Название каталога /var говорит само за себя, он должен содержать файлы, которые часто изменяются
/tmp - каталог с временными файлами;
В этом каталоге содержатся временные файлы, созданные системой, любыми программами или пользователями
/usr - Программы пользователя;
Это самый большой каталог с большим количеством функций
/home - раздел для домашних каталогов пользователей;
Тут хранятся домашние каталоги созданных пользователей
/boot - Файлы загрузчика;
Содержит все файлы, связанные с загрузчиком системы
/lib - Системные библиотеки;
Содержит файлы системных библиотек, которые используются исполняемыми файлами в каталогах /bin и /sbin.
/opt - Дополнительные программы;
В этот каталог устанавливаются дополнительные программы
/sys - Информация о системе;
Назначение каталогов Linux из этой папки - получение информации о системе непосредственно от ядра
/ - корень;
Это главный каталог в системе Linux. По сути, это и есть файловая система Linux.
/bin - каталог с бинарными файлами пользователя;
Этот каталог содержит исполняемые файлы. Здесь расположены программы, которые можно использовать в однопользовательском режиме или режиме восстановления.
/sbin - системные исполняемые файлы;
Так же как и /bin, содержит двоичные исполняемые файлы
/etc - каталог с конфигурационными файлами;
В этом каталоге содержатся конфигурационные файлы всех программ, установленных в системе.
/dev - файлы устройств;
Местоположение всех подключенных устройств
/proc - информация о процессах;
Это подсистема, динамически создаваемая ядром ОС.
/var - Переменные файлы;
Название каталога /var говорит само за себя, он должен содержать файлы, которые часто изменяются
/tmp - каталог с временными файлами;
В этом каталоге содержатся временные файлы, созданные системой, любыми программами или пользователями
/usr - Программы пользователя;
Это самый большой каталог с большим количеством функций
/home - раздел для домашних каталогов пользователей;
Тут хранятся домашние каталоги созданных пользователей
/boot - Файлы загрузчика;
Содержит все файлы, связанные с загрузчиком системы
/lib - Системные библиотеки;
Содержит файлы системных библиотек, которые используются исполняемыми файлами в каталогах /bin и /sbin.
/opt - Дополнительные программы;
В этот каталог устанавливаются дополнительные программы
/sys - Информация о системе;
Назначение каталогов Linux из этой папки - получение информации о системе непосредственно от ядра
Что нужно знать о режиме сна и гибернации в Linux?
Режим гибернации при его включении, система Linux записывает свое текущее состояние в файл. Далее при включении все эти данные восстанавливаются и вы продолжаете работу с места остановки.
Режим сна помогает экономить электроэнергию, когда вы не используете свою систему.
В Linux есть 3 режима ожидания:
- Suspend to RAM - ждущий режим, режим используют большинство ноутбуков. В этом режиме питание остается для оперативной памяти,большая часть компонентов отключается.
- Suspend to Disk - в этом режиме состояние ПК сохраняется в файле подкачки, и система полностью выключается.
- Suspend to both - гибридная приостановка, здесь состояние машины сохраняется в swap, но система не выключается
Для отключения описанных выше режимов, необходимо отключить следующие sydtemd:
~]# systemctl mask sleep.target
~]# systemctl mask suspend.target
~]# systemctl mask hibernate.target
~]# systemctl mask hybrid-sleep.target
Выполните перезагрузку ОС
~]# shutdown -r
Режим гибернации при его включении, система Linux записывает свое текущее состояние в файл. Далее при включении все эти данные восстанавливаются и вы продолжаете работу с места остановки.
Режим сна помогает экономить электроэнергию, когда вы не используете свою систему.
В Linux есть 3 режима ожидания:
- Suspend to RAM - ждущий режим, режим используют большинство ноутбуков. В этом режиме питание остается для оперативной памяти,большая часть компонентов отключается.
- Suspend to Disk - в этом режиме состояние ПК сохраняется в файле подкачки, и система полностью выключается.
- Suspend to both - гибридная приостановка, здесь состояние машины сохраняется в swap, но система не выключается
Для отключения описанных выше режимов, необходимо отключить следующие sydtemd:
~]# systemctl mask sleep.target
~]# systemctl mask suspend.target
~]# systemctl mask hibernate.target
~]# systemctl mask hybrid-sleep.target
Выполните перезагрузку ОС
~]# shutdown -r
Управление systemd.
В Linux управлением systemd выполняется утилитой systemctl. Мы прекрасно знаем, как и за что отвечают те или иные команды передаваемые systemd для определенных юнитов, такие как: start, stop, status, mask, unmask. Но на самом деле, функционал достаточно широкий:
• list-units - посмотреть все службы
~]# systemctl list-units
• list-sockets - посмотреть все сокеты служб
~]# systemctl list-sockets
• list-timers - посмотреть список таймеров
~]# systemctl list-timers
• start - запустить службу
~]# systemctl start daemon
• stop - остановить службу
~]# systemctl stop daemon
• reload - перечитать конфигурацию
~]# systemctl reload daemon
• restart - перезапустить службу
~]# systemctl restart daemon
• try-restart - перезапустить службу, только если она запущена
~]# systemctl try-restart daemon
• reload-or-restart - попросить службу обновить свою конфигурацию
~]# systemctl reload-or-restart daemon
• isolate - запустить только одну службу вместе с ее зависимостями
~]# systemctl isolate daemon
• kill - отправить сигнал завершения процессу используется вместе с опциями --signal и --kill-who
~]# systemctl kill daemon
• clean - удалить все данные, которые касаются указанной службы, сюда входит кэш, логи
~]# systemctl clean daemon
• is-active - проверить запущена ли служба
~]# systemctl is-active daemon
• is-failed - проверить не завершилась ли служба с ошибкой
~]# systemctl is-failed daemon
• status - посмотреть состояние и вывод службы
~]# systemctl status daemon
• show - посмотреть параметры управления службой в Linux
~]# systemctl show daemon
• cat - посмотреть содержимое юнит файла в текстовом виде
~]# systemctl cat daemon
• reset-failed - очистить состояние failed для служб, которые завершились с ошибкой
~]# systemctl reset-failed
• list-dependencies - посмотреть зависимости службы
~]# systemctl list-dependencies daemon
• list-unit-files - вывести все установленные файлы служб
~]# systemctl list-unit-files
• enable - добавить службу в автозагрузку
~]# systemctl enable daemon
• disable - удалить службу из автозагрузки
~]# systemctl disable daemon
• is-enabled - проверить есть ли уже служба в автозагрузке
~]# systemctl is-enabled daemon
• reenable - сначала выполнить disable потом enable для службы
~]# systemctl reenable daemon
• list-jobs - все выполняющиеся задачи
~]# systemctl list-jobs
• snapshot - сохранить состояние служб, чтобы потом восстановить
~]# systemctl snapshot daemon
• daemon-reload - обновить конфигурацию юнитов для всех служб
~]# systemctl daemon-reload
• mask - сделать юнит недоступным
~]# systemctl mask daemon
• unmask - сделать юнит доступным
~]# systemctl unmask daemon
• link - добавить юнит файл, который расположен не в стандартной папке для юнитов
~]# systemctl link /home/daemon
• revert - вернуть юнит до состояния по умолчанию
~]# systemctl revert daemon
• edit - отредактировать параметры службы не изменяя основной файл юнита.
~]# systemctl edit daemon
В Linux управлением systemd выполняется утилитой systemctl. Мы прекрасно знаем, как и за что отвечают те или иные команды передаваемые systemd для определенных юнитов, такие как: start, stop, status, mask, unmask. Но на самом деле, функционал достаточно широкий:
• list-units - посмотреть все службы
~]# systemctl list-units
• list-sockets - посмотреть все сокеты служб
~]# systemctl list-sockets
• list-timers - посмотреть список таймеров
~]# systemctl list-timers
• start - запустить службу
~]# systemctl start daemon
• stop - остановить службу
~]# systemctl stop daemon
• reload - перечитать конфигурацию
~]# systemctl reload daemon
• restart - перезапустить службу
~]# systemctl restart daemon
• try-restart - перезапустить службу, только если она запущена
~]# systemctl try-restart daemon
• reload-or-restart - попросить службу обновить свою конфигурацию
~]# systemctl reload-or-restart daemon
• isolate - запустить только одну службу вместе с ее зависимостями
~]# systemctl isolate daemon
• kill - отправить сигнал завершения процессу используется вместе с опциями --signal и --kill-who
~]# systemctl kill daemon
• clean - удалить все данные, которые касаются указанной службы, сюда входит кэш, логи
~]# systemctl clean daemon
• is-active - проверить запущена ли служба
~]# systemctl is-active daemon
• is-failed - проверить не завершилась ли служба с ошибкой
~]# systemctl is-failed daemon
• status - посмотреть состояние и вывод службы
~]# systemctl status daemon
• show - посмотреть параметры управления службой в Linux
~]# systemctl show daemon
• cat - посмотреть содержимое юнит файла в текстовом виде
~]# systemctl cat daemon
• reset-failed - очистить состояние failed для служб, которые завершились с ошибкой
~]# systemctl reset-failed
• list-dependencies - посмотреть зависимости службы
~]# systemctl list-dependencies daemon
• list-unit-files - вывести все установленные файлы служб
~]# systemctl list-unit-files
• enable - добавить службу в автозагрузку
~]# systemctl enable daemon
• disable - удалить службу из автозагрузки
~]# systemctl disable daemon
• is-enabled - проверить есть ли уже служба в автозагрузке
~]# systemctl is-enabled daemon
• reenable - сначала выполнить disable потом enable для службы
~]# systemctl reenable daemon
• list-jobs - все выполняющиеся задачи
~]# systemctl list-jobs
• snapshot - сохранить состояние служб, чтобы потом восстановить
~]# systemctl snapshot daemon
• daemon-reload - обновить конфигурацию юнитов для всех служб
~]# systemctl daemon-reload
• mask - сделать юнит недоступным
~]# systemctl mask daemon
• unmask - сделать юнит доступным
~]# systemctl unmask daemon
• link - добавить юнит файл, который расположен не в стандартной папке для юнитов
~]# systemctl link /home/daemon
• revert - вернуть юнит до состояния по умолчанию
~]# systemctl revert daemon
• edit - отредактировать параметры службы не изменяя основной файл юнита.
~]# systemctl edit daemon
SSH. Как облегчить жизнь?
Создадим наш CA. К примеру это будет ключевая пара, в которой используется схема цифровой подписи типа Ed25519.
~]# ssh-keygen -C CA -t ed25519 -f ca_key
Не забудьте устанавливать пароли
Получаем два файла: ca_key и ca_key.pub. Они и образуют наш CA. Закрытый ключ ca_key перемещаем в необходимый каталог, а открытый ключ ca_key.pub помещаем на удаленном сервере в /etc/ssh/ca_key.pub и выполняем команду доверять всем ключам, подписанным этим CA, добавив в конфигурационный файл сервера /etc/ssh/sshd_config такую строку:
TrustedUserCAKeys /etc/ssh/ca_key.pub
‼️Всегда перезагружайте SSH-сервер после каждого изменения конфигурации
~]# systemctl restart ssh.service
Генерируем пару пользовательских ключей для аутентификации на сервере:
~]# ssh-keygen -t ed25519 -f user
и подписываем открытый ключ пользователя user.pub:
~]# ssh-keygen -s ca_key -I user -n root user.pub
Опция -I — это идентификатор ключа
Опция -n задает принципал
Предположим, у нас есть сервер с тремя непривилегированными пользователями user1, user2 и user3. Каждый пользователь имеет свои, строго ограниченные права доступа к файлам и каталогам.
Любому из этих принципалов может быть предоставлено право авторизоваться на сервере. Для этого создаем на сервере каталог auth_principals:
~]# mkdir /etc/ssh/auth_principals
А в sshd_config вставляем строку
AuthorizedPrincipalsFile /etc/ssh/auth_principals/%u
В каталоге auth_principals для любого пользователя можно создать файл, где указать тех принципалов, которые уполномочены авторизоваться под именем данного пользователя. Например, разрешим принципалам user1 и user2 авторизоваться в системе от имени пользователя user3:
~]# echo -e 'user1\nuser2' > /etc/ssh/auth_principals/user3
А принципалу user3 от имени пользователей user1 и user2:
~]# echo user3 > /etc/ssh/auth_principals/user1
~]# echo user3 > /etc/ssh/auth_principals/user2
Создадим принципалу user3 сертификат:
~]# ssh-keygen -s ca_key -I user -n user3 -z 102348 -O no-x11-forwarding -O source-address=192.168.145.23,192.168.201.0/24 -V always:2023 user.pub
С помощью опции -O source-address мы разрешили user3 входить в систему только с определенного IP-адреса и/или определенной сети.
С помощью опции -z даем сертификату серийный номер для учета и контроля и возможного отзыва.
Опция -O no-x11-forwarding запрещает x11-forwarding.
Теперь не забудьте поместить все эти ключи и сертификаты на клиентской машине в правильный каталог .ssh и отредактировать config
Создадим наш CA. К примеру это будет ключевая пара, в которой используется схема цифровой подписи типа Ed25519.
~]# ssh-keygen -C CA -t ed25519 -f ca_key
Не забудьте устанавливать пароли
Получаем два файла: ca_key и ca_key.pub. Они и образуют наш CA. Закрытый ключ ca_key перемещаем в необходимый каталог, а открытый ключ ca_key.pub помещаем на удаленном сервере в /etc/ssh/ca_key.pub и выполняем команду доверять всем ключам, подписанным этим CA, добавив в конфигурационный файл сервера /etc/ssh/sshd_config такую строку:
TrustedUserCAKeys /etc/ssh/ca_key.pub
‼️Всегда перезагружайте SSH-сервер после каждого изменения конфигурации
~]# systemctl restart ssh.service
Генерируем пару пользовательских ключей для аутентификации на сервере:
~]# ssh-keygen -t ed25519 -f user
и подписываем открытый ключ пользователя user.pub:
~]# ssh-keygen -s ca_key -I user -n root user.pub
Опция -I — это идентификатор ключа
Опция -n задает принципал
Предположим, у нас есть сервер с тремя непривилегированными пользователями user1, user2 и user3. Каждый пользователь имеет свои, строго ограниченные права доступа к файлам и каталогам.
Любому из этих принципалов может быть предоставлено право авторизоваться на сервере. Для этого создаем на сервере каталог auth_principals:
~]# mkdir /etc/ssh/auth_principals
А в sshd_config вставляем строку
AuthorizedPrincipalsFile /etc/ssh/auth_principals/%u
В каталоге auth_principals для любого пользователя можно создать файл, где указать тех принципалов, которые уполномочены авторизоваться под именем данного пользователя. Например, разрешим принципалам user1 и user2 авторизоваться в системе от имени пользователя user3:
~]# echo -e 'user1\nuser2' > /etc/ssh/auth_principals/user3
А принципалу user3 от имени пользователей user1 и user2:
~]# echo user3 > /etc/ssh/auth_principals/user1
~]# echo user3 > /etc/ssh/auth_principals/user2
Создадим принципалу user3 сертификат:
~]# ssh-keygen -s ca_key -I user -n user3 -z 102348 -O no-x11-forwarding -O source-address=192.168.145.23,192.168.201.0/24 -V always:2023 user.pub
С помощью опции -O source-address мы разрешили user3 входить в систему только с определенного IP-адреса и/или определенной сети.
С помощью опции -z даем сертификату серийный номер для учета и контроля и возможного отзыва.
Опция -O no-x11-forwarding запрещает x11-forwarding.
Теперь не забудьте поместить все эти ключи и сертификаты на клиентской машине в правильный каталог .ssh и отредактировать config
Под контролем безопасности
В настоящий момент, преобладающее использование ОС - Astra Linux.
Если есть подозрение, что у Вас в системе проникновение, предлагаю проверить, так ли это.
user_list.sh
# Получим список пользователей
if uname -a | grep astra ;
# Это вариант запроса для Astra Linux.
then
getent passwd {1000..60000} >/dev/null 2>&1
# Сравним с выводом через awk
eval getent passwd {$(awk '/^UID_MIN/ {print $2}' /etc/login.defs)..$(awk '/^UID_MAX/ {print $2}' /etc/login.defs)} | cut -d: -f1
fi
# Зачастую мы хотим просто посмотреть реальных пользователей, у которых есть каталоги.
# Исключаем папку lost+found
users=`ls /home -I lost*`
echo $users
Проверим информацию о входах в систему, основные параметры пользователей.
# Список последних загрузок ОС
~]# journalctl --list-boots 2>/dev/null
search_auth.sh
if [ -e /var/log/btmp ]
then
# Неудачные попытки входа в систему
lastb 2>/dev/null
fi
if [ -e /var/log/wtmp ]
then
# Лог логинов и бутов
last -f /var/log/wtmp
fi
Получаем список привилегированных sudo-юзеров
~]# sudo cat /etc/sudoers 2>/dev/null
~]# cat /etc/passwd 2>/dev/null
Юзеры с пустым паролем
~]# sudo cat /etc/shadow | awk -F":" '($2 == "") {print $1}' 2>/dev/null
Иногда можно найти приватные ключи хоста, что потом позволит изучить исходившие от него подключения. Это пригодится при расследовании сложных инцидентов с массовыми подключениями.
Спросим у рута и у всех пользователей, что у них есть на этот счет:
~]# cat /root/.ssh/* 2>/dev/null
~]# for name in $(ls /home) do cat /home/$name/.ssh/* 2>/dev/null done
Если полученные ключи не принадлежат известным системам, это может быть плохой новостью. Также проверим попытки удаленного входа через SSH:
~]# sudo journalctl _SYSTEMD_UNIT=sshd.service | grep "error" 2>/dev/null
Входы в систему по SSH можем посмотреть через lastlog.
~]# sudo journalctl | grep ssh # или sshd
Ищем ошибки аутентификации
~]# sudo journalctl | grep ssh | grep -i -A2 -B2 fail
В настоящий момент, преобладающее использование ОС - Astra Linux.
Если есть подозрение, что у Вас в системе проникновение, предлагаю проверить, так ли это.
user_list.sh
# Получим список пользователей
if uname -a | grep astra ;
# Это вариант запроса для Astra Linux.
then
getent passwd {1000..60000} >/dev/null 2>&1
# Сравним с выводом через awk
eval getent passwd {$(awk '/^UID_MIN/ {print $2}' /etc/login.defs)..$(awk '/^UID_MAX/ {print $2}' /etc/login.defs)} | cut -d: -f1
fi
# Зачастую мы хотим просто посмотреть реальных пользователей, у которых есть каталоги.
# Исключаем папку lost+found
users=`ls /home -I lost*`
echo $users
Проверим информацию о входах в систему, основные параметры пользователей.
# Список последних загрузок ОС
~]# journalctl --list-boots 2>/dev/null
search_auth.sh
if [ -e /var/log/btmp ]
then
# Неудачные попытки входа в систему
lastb 2>/dev/null
fi
if [ -e /var/log/wtmp ]
then
# Лог логинов и бутов
last -f /var/log/wtmp
fi
Получаем список привилегированных sudo-юзеров
~]# sudo cat /etc/sudoers 2>/dev/null
~]# cat /etc/passwd 2>/dev/null
Юзеры с пустым паролем
~]# sudo cat /etc/shadow | awk -F":" '($2 == "") {print $1}' 2>/dev/null
Иногда можно найти приватные ключи хоста, что потом позволит изучить исходившие от него подключения. Это пригодится при расследовании сложных инцидентов с массовыми подключениями.
Спросим у рута и у всех пользователей, что у них есть на этот счет:
~]# cat /root/.ssh/* 2>/dev/null
~]# for name in $(ls /home) do cat /home/$name/.ssh/* 2>/dev/null done
Если полученные ключи не принадлежат известным системам, это может быть плохой новостью. Также проверим попытки удаленного входа через SSH:
~]# sudo journalctl _SYSTEMD_UNIT=sshd.service | grep "error" 2>/dev/null
Входы в систему по SSH можем посмотреть через lastlog.
~]# sudo journalctl | grep ssh # или sshd
Ищем ошибки аутентификации
~]# sudo journalctl | grep ssh | grep -i -A2 -B2 fail
Файловые аномалии при проникновении.
Необходимо выполнить поиск всех файлов, у которых нет владельца или группы, — это характерно при удаленном проникновении на хост и работе через реверс‑шеллы.
При поиске вредоносов рекомендую искать файлы без владельца
~]# find /root /home -nouser 2>/dev/null
или без группы
~]# find /root /home -nogroup 2>/dev/null
Конкурирующая команда для поиска файлов с SUID и GUID
~]# find / -uid 0 \( -perm -4000 -o -perm 2000 \) -print
Поиск файлов с нехарактерных названиями, например начинающихся на точку, две точки или пробел
~]# find / -name " *" -print # find / -name ". *" -print
~]# find / -name ".. *" -print
Поиск больших файлов (больше 10 Мбайт)
~]# find / -size +10M
Поиск процессов, инициированных удаленными файлами
~]# lsof +L1
Необходимо выполнить поиск всех файлов, у которых нет владельца или группы, — это характерно при удаленном проникновении на хост и работе через реверс‑шеллы.
При поиске вредоносов рекомендую искать файлы без владельца
~]# find /root /home -nouser 2>/dev/null
или без группы
~]# find /root /home -nogroup 2>/dev/null
Конкурирующая команда для поиска файлов с SUID и GUID
~]# find / -uid 0 \( -perm -4000 -o -perm 2000 \) -print
Поиск файлов с нехарактерных названиями, например начинающихся на точку, две точки или пробел
~]# find / -name " *" -print # find / -name ". *" -print
~]# find / -name ".. *" -print
Поиск больших файлов (больше 10 Мбайт)
~]# find / -size +10M
Поиск процессов, инициированных удаленными файлами
~]# lsof +L1
Основы аудита Linux.
Аудит в Linux состоит из двух групп компонентов: в пространстве ядра это kauditd, а в пользовательском — auditd
Ядро, принимая системные вызовы из user space, пропускает их через фильтры user, task, filesystem , exclude и exit.
user используется для фильтрации событий
task применяется для системных вызовов fork() и clone().
filesystem используется для исключения событий для конкретной файловой системы.
exclude задает исключения для событий.
exit проходят все системные вызовы.
auditctl - мы можем управлять потоком событий.
ausearch, aureport, aulast просматривем журнал аудита.
Статус работы подсистемы
~]# auditctl -s
Отправьте текстовое сообщение
~]# auditctl -m hello
убедитесь
~]# ausearch -m USER
, что соответствующее событие попало в журнал аудита
Примеры правил находятся /usr/share/audit/sample-rules/.
Примеры типов правил:
Управляющие правила настраивают систему аудита и поведение агента.
Правила файловой системы. Формат правила следующий:
-w path-to-file -p permissions -k keyname
-w указывает на то, что это правило файловой системы.
-p может содержать любые комбинации прав доступа r (чтение), w (запись), x (выполнение) и a (изменение атрибута).
-k задает имя правила.
Правила системных вызовов используются для мониторинга системных вызовов.
-a action,list -S syscall -F field=value -k keyname
-a означает append (добавление) правила в фильтр.
action может быть always (всегда создавать события) или never (никогда не создавать события).
list содержит один из возможных вариантов: task, exit, user, filesystem или exclude.
-S - указывает конкретный syscall (имя или номер); можно в одном правиле указывать сразу несколько syscall, каждый после своего ключа -S.
-F - задает фильтр по полям.
-k - имя правила.
В качестве примера, создадим правило для регистрации изменения файла passwd.
Для начала убедимся, что у нас не применено ни одно правило.
~]# auditctl -l
Если ранее уже были заданы какие‑то правила, то смело удаляем их командой:
~]# auditctl -D
Применим правило:
~]# auditctl -w /etc/passwd -p wa -k passwd
Проверим, что правило активно:
~]# auditctl -l -w /etc/passwd -p wa -k passwd
Проверим, как правило работает.
~]# useradd testuser
Убедимся, что по нашему правилу сгенерировалось событие.
~]# aureport --summary -k
Посмотрим эти события.
~]# ausearch -i -k passwd
Сформируем отчет
~]# aureport
Все возможные типы регистрируемых событий
~]# ausearch -m
Описание всех типов и полей логов
Аудит в Linux состоит из двух групп компонентов: в пространстве ядра это kauditd, а в пользовательском — auditd
Ядро, принимая системные вызовы из user space, пропускает их через фильтры user, task, filesystem , exclude и exit.
user используется для фильтрации событий
task применяется для системных вызовов fork() и clone().
filesystem используется для исключения событий для конкретной файловой системы.
exclude задает исключения для событий.
exit проходят все системные вызовы.
auditctl - мы можем управлять потоком событий.
ausearch, aureport, aulast просматривем журнал аудита.
Статус работы подсистемы
~]# auditctl -s
Отправьте текстовое сообщение
~]# auditctl -m hello
убедитесь
~]# ausearch -m USER
, что соответствующее событие попало в журнал аудита
Примеры правил находятся /usr/share/audit/sample-rules/.
Примеры типов правил:
Управляющие правила настраивают систему аудита и поведение агента.
Правила файловой системы. Формат правила следующий:
-w path-to-file -p permissions -k keyname
-w указывает на то, что это правило файловой системы.
-p может содержать любые комбинации прав доступа r (чтение), w (запись), x (выполнение) и a (изменение атрибута).
-k задает имя правила.
Правила системных вызовов используются для мониторинга системных вызовов.
-a action,list -S syscall -F field=value -k keyname
-a означает append (добавление) правила в фильтр.
action может быть always (всегда создавать события) или never (никогда не создавать события).
list содержит один из возможных вариантов: task, exit, user, filesystem или exclude.
-S - указывает конкретный syscall (имя или номер); можно в одном правиле указывать сразу несколько syscall, каждый после своего ключа -S.
-F - задает фильтр по полям.
-k - имя правила.
В качестве примера, создадим правило для регистрации изменения файла passwd.
Для начала убедимся, что у нас не применено ни одно правило.
~]# auditctl -l
Если ранее уже были заданы какие‑то правила, то смело удаляем их командой:
~]# auditctl -D
Применим правило:
~]# auditctl -w /etc/passwd -p wa -k passwd
Проверим, что правило активно:
~]# auditctl -l -w /etc/passwd -p wa -k passwd
Проверим, как правило работает.
~]# useradd testuser
Убедимся, что по нашему правилу сгенерировалось событие.
~]# aureport --summary -k
Посмотрим эти события.
~]# ausearch -i -k passwd
Сформируем отчет
~]# aureport
Все возможные типы регистрируемых событий
~]# ausearch -m
Описание всех типов и полей логов
Red Hat Customer Portal
RHEL Audit System Reference - Red Hat Customer Portal
The Audit System Reference provides lists of supported Audit event fields and record types in RHEL 7 and RHEL 8.
Воплощение желаний, повышение прав для редактирования файлов
Не однократно Вы могли сталкиваться с просьбой пользователей делегировать без полномочному пользователю права в /etc/sudoers на выполнение команды редактирования.
Вы естественно редактируете файл sudoers
[root@worked ~]# visudo
и прописываете
test ALL=(ALL) NOPASSWD: /usr/bin/vi
Выполним авторизацию под пользователем test:
[root@worked ~]# su test
выполним одну, весьма простую команду
[test@worked root]$ sudo vi -c ':!/bin/sh' /dev/null
sh-5.1#
что произошло?
sh-5.1# id
uid=0(root) gid=0(root) группы=0(root) контекст=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
sh-5.1#
❓❓Я стал root??
Попробуем сменить hostname
sh-5.1# hostnamectl set-hostname xak
sh-5.1#
Выполнилось? А ну, давайте зайдем повторно на сервер (см фото)!!
❗️❗️❗️Поздравляю, Ваша система стала уязвима и пользователь может воплощать свое ХОЧУ!
⚠️Будьте бдительны при воплощении желаний пользователей.
Не однократно Вы могли сталкиваться с просьбой пользователей делегировать без полномочному пользователю права в /etc/sudoers на выполнение команды редактирования.
Вы естественно редактируете файл sudoers
[root@worked ~]# visudo
и прописываете
test ALL=(ALL) NOPASSWD: /usr/bin/vi
Выполним авторизацию под пользователем test:
[root@worked ~]# su test
выполним одну, весьма простую команду
[test@worked root]$ sudo vi -c ':!/bin/sh' /dev/null
sh-5.1#
что произошло?
sh-5.1# id
uid=0(root) gid=0(root) группы=0(root) контекст=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
sh-5.1#
❓❓Я стал root??
Попробуем сменить hostname
sh-5.1# hostnamectl set-hostname xak
sh-5.1#
Выполнилось? А ну, давайте зайдем повторно на сервер (см фото)!!
❗️❗️❗️Поздравляю, Ваша система стала уязвима и пользователь может воплощать свое ХОЧУ!
⚠️Будьте бдительны при воплощении желаний пользователей.
Восстановления файлов в 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