# **Практическая работа №2 OS Linux** # Практическая работа №2.1. Основы мониторинга OS Linux с помощью утилит df, du, free, iostat, mpstat, vmstat, w, htop. ### **Цель работы:** - Изучить работу утилит df, du, free, iostat, mpstat, vmstat, w, htop. ### **Задача:** - Изучить работу всех утилит. - Использовать при работе исключительно терминал. ### 1. Команда df в linux Чтобы посмотреть доступное пространство на всех примонтированных разделах и информацию о них достаточно набрать: `df` ![](https://i.imgur.com/XzlL1sZ.png) Утилита отображает стандартный набор колонок, но понять в ее выводе что-то с первого раза сложно. Все данные выводятся в килобайтах. Теперь давайте попросим утилиту выводить данные в более читаемом формате: `df -h` ![](https://i.imgur.com/dbzDRAu.png) Это самое популярное сочетание опций, потому что оно дает максимально понятную информацию и уже можно судить о том, что происходит на диске. Например, мы видим, что в домашней папке уже занято 87% места и, возможно, пора что-то удалить. Если задать опцию -a, вы можете получить информацию обо всех файловых системах известных ядру, которые были смонтированы: `df -a` ![](https://i.imgur.com/3wSk8fP.png) Здесь отображается огромное количество виртуальных файловых систем ядра. Если вы хотите вывести только информацию про реальные файловые системы на жестком диске можно использовать опцию -x чтобы отфильтровать все tmpfs: `df -x tmpfs` ![](https://i.imgur.com/xLCL1cX.png) Также можно отфильтровать две файловые системы: `df -x devtmpfs -x tmpfs` ![](https://i.imgur.com/jIk1XK2.png) Или же указать файловую систему, которую нужно отображать: `df -t ext4` ![](https://i.imgur.com/sKsiVT2.png) Также можно указать интересующий вас раздел, как вы видели в синтаксисе команды: `df -h /dev/sda1` ![](https://i.imgur.com/T3TMN35.png) С помощью опции -i вы можете посмотреть информацию про состояние inode в вашей файловой системе: `df -hi /dev/sda1` ![](https://i.imgur.com/iqQ25MQ.png) Вывести объем доступного пространства в каталоге: `df -h /home` ![](https://i.imgur.com/m8xHYm5.png) Команда df – очень простой в освоении, но эффективный инструмент, позволяющий всегда быть в курсе использования дискового пространства в ваших системах. ### 2. Команда du в Linux **Команда du** , сокращение от «использование диска», сообщает приблизительный объем дискового пространства, используемого данными файлами или каталогами. Это практически полезно для поиска файлов и каталогов, занимающих большие объемы дискового пространства. `du [OPTIONS]... FILE...` Если данный FILE является каталогом, du будет суммировать использование диска для каждого файла и подкаталога в этом каталоге. Если *FILE* не указан, *du* сообщит об использовании диска в текущем рабочем каталоге . При выполнении без какой-либо опции du отображает использование диска для данного файла или каталога и каждого из его подкаталогов в байтах. `du ~/Documents` Вы также можете передать команде du несколько файлов и каталогов в качестве аргументов: `du ~/Documents ~/Pictures ~/.zshrc` Если вы запустите du для файла или каталога, для которого у вас нет прав, вы получите что-то вроде «du: невозможно прочитать каталог». В этой ситуации вам нужно будет добавить к команде sudo . **du много опций, я выделю только наиболее часто используемые.** Параметр -a указывает du сообщать об использовании дискового пространства каждым файлом в каталоге. `du -a ~/Documents` ![](https://i.imgur.com/Dbvi3hw.png) Обычно вы хотите отображать только пространство, занимаемое данным каталогом, в удобочитаемом формате. Для этого используйте параметр *-h* . Например, чтобы получить общий размер */var/lib* и всех его подкаталогов, вы должны выполнить следующую команду: `sudo du -h /var` ![](https://i.imgur.com/eot3Byt.png) Мы используем sudo потому что большинство файлов и каталогов внутри каталога /var/lib принадлежат пользователю root и не доступны для чтения обычным пользователям. Чтобы сообщить только общий размер указанного каталога, а не подкаталогов, используйте параметр *-s* : ``` sudo du -sh /var ``` ![](https://i.imgur.com/ZdvsxdV.png) Параметр *-c* указывает *du* сообщать общую сумму. Это полезно, когда вы хотите получить объединенный размер двух или более каталогов. ``` sudo du -csh /var/log /var/lib ``` ![](https://i.imgur.com/jlh6008.png) Если вы хотите отобразить использование диска подкаталогами *n-уровня*, используйте параметр *--max-depth* и укажите уровень подкаталогов. Например, чтобы получить отчет о каталогах первого уровня, вы должны использовать: ``` sudo du -h --max-depth=1 /var/lib ``` ![](https://i.imgur.com/Erqg8hd.png) По умолчанию утилита *du* повторно использует дисковое пространство, используемое каталогом или файлом. Чтобы узнать очевидный размер файла, используйте переключатель *--apparent-size* . «Видимый размер» файла — это фактический объем данных в файле. ``` sudo du -sh --apparent-size /var/lib ``` ![](https://i.imgur.com/qSd1LVT.png) du также позволяет использовать шаблон оболочки. Например, чтобы получить размер всех каталогов, начинающихся с «Do» в вашем домашнем каталоге, вы должны запустить: ``` sudo du -csh ~/Do* ``` ![](https://i.imgur.com/fUfwef7.png) **Использование du с другими командами** Команду *du* можно комбинировать с другими командами с конвейерами. Например, чтобы напечатать 5 самых больших каталогов внутри каталога */var* вы должны передать вывод du в команду sort чтобы отсортировать каталоги по их размеру, а затем передать результат в команду head которая распечатает только 5 верхних каталогов: ``` sudo du -h /var/ | sort -rh | head -5 ``` ![](https://i.imgur.com/Res7ioi.png) **Выводы** К настоящему моменту вы должны хорошо понимать, как использовать команду *du* . В отличие от *df* который выводит информацию об использовании диска смонтированными файловыми системами , команда *du* дает вам оценку дискового пространства, используемого данными файлами или каталогами. ### 3. Команда free в Linux Сколько свободной оперативной памяти доступно в моей системе Linux? Достаточно ли свободной памяти для установки и запуска новых приложений? В системах Linux вы можете использовать команду free чтобы получить подробный отчет об использовании памяти системой. Команда free предоставляет информацию об общем объеме физической памяти и памяти подкачки , а также о свободной и используемой памяти. **Содержание** - Как использовать команду free - Отображение использования памяти в удобочитаемом формате - Отображение использования памяти в других показателях - Отображение итоговых значений столбца - Непрерывно печатать результат - Как использовать команду free Синтаксис free команды следующий: `free [OPTIONS]` При использовании без какой-либо опции команда free будет отображать информацию о памяти и подкачке в килобайтах. 1 килобайт (КиБ) равен 1024 байтам. **free** Вывод будет включать три строки, заголовок, одну строку для памяти и одну для свопа: ![](https://i.imgur.com/DDEQQ2e.png) В более старых версиях Linux вывод может немного отличаться. Вот что означает каждый столбец: - total — это число представляет общий объем памяти, который может быть использован приложениями. - used — Используемая память. Он рассчитывается как: used = total - free - buffers - cache - бесплатно — Свободная / неиспользуемая память. - общий — этот столбец можно игнорировать, поскольку он не имеет значения. Это здесь только для обратной совместимости. - buff / cache — объединенная память, используемая буферами ядра, а также страничным кешем и блоками. Эта память может быть освобождена в любое время, если это необходимо приложениям. Если вы хотите, чтобы буферы и кеш отображались в двух отдельных столбцах, используйте параметр -w . Доступно — оценка объема памяти, доступного для запуска новых приложений без подкачки. По умолчанию команда free показывает информацию о памяти в килобайтах. Чтобы просмотреть информацию в удобочитаемом формате (обычно в мегабайтах и гигабайтах), используйте параметр **-h :** ``` free -h ``` ![](https://i.imgur.com/aUPFsW6.png) Отображение использования памяти в других показателях Команда free также позволяет вам указать единицы измерения памяти. Допустимые варианты: - b , --bytes — отображать вывод в байтах. - -kilo — отображать вывод в килобайтах (1 КБ = 1000 байт). - -mega — отображать вывод в мегабайтах. - -giga — Показать вывод в гигабайтах. - -tera — Показать вывод в терабайтах. - k , --kibi — Показать вывод в килобайтах. (1 КБ = 1024 байта). Это единица измерения по умолчанию. - m , --mebi — Показать вывод в мегабайтах. - g , --gibi — Показать вывод в гигабайтах. - -tebi — отображать вывод в теробайтах. - -peti — Показать вывод в перобайтах. - -si — вместо 1024 используйте --mebi --si 1000. Например, --mebi --si равно --mega . **Например, чтобы отобразить результат в мегабайтах, введите:** ``` free --mega ``` ![](https://i.imgur.com/CwzASRv.png) **Отображение итоговых значений столбца** Чтобы отобразить строку, показывающую итоги столбца, используйте параметр -t . Это дает вам сумму памяти и свопа в столбцах total, used и free. `free -h -t` ![](https://i.imgur.com/u9AhWkY.png) **Непрерывно печатать результат** Чтобы постоянно отображать информацию о памяти на экране, вызовите free с параметром -s ( --seconds ), за которым следует число, определяющее задержку. Например, чтобы распечатывать информацию о памяти каждые пять секунд, вы должны выполнить: `free -s 5` ![](https://i.imgur.com/UvOr5sn.png) free команда будет продолжать отображать результат, пока вы не нажмете CTRL+C Это похоже на поведение команды watch . Чтобы отображать результат определенное количество раз, используйте параметр -c ( --count ). В примере ниже команда выведет результат десять раз: `free -s 5 -c 3` ![](https://i.imgur.com/DPc7trA.png) ### 3.1 Команда free в Linux с примерами Автоматизируйте команду free и запускайте ее непрерывно или периодически Еще одна отличная особенность – возможность автоматизировать команду. Есть два варианта, которые помогают нам настроить этот инструмент: Есть параметр ‘-s’, которая запускает команду free в течение заданного интервала секунд, пока пользователь не закроет программу (^ + C). Существует также «-c», который можно использовать отдельно или в сочетании с параметром секунд. Если вы введете только «-c» и целое число (n), команда будет запускаться n раз. По умолчанию используются интервалы в одну секунду. Допустим, вы хотите открыть серию приложений и посмотреть, как влияет ваша память. Для тестового вывода мы будем использовать читаемый человеком формат, используя степени 1000 (Gb) вместо 1024 (GiB). Мы собираемся записать в течение 20 секунд, чтобы проанализировать воздействие. Мы собираем данные каждые 5 секунд, и будем делать это за 4 цикла. Вот этот пример, отформатированный для командной строки и ее вывода: ```free -h --si -s 5 -c 4``` ![](https://i.imgur.com/Xqh8PxE.png) Это покажет вам только один вывод для команды free, но этот вывод будет изменяться через регулярные промежутки времени. `watch free -h` ![](https://i.imgur.com/0lmjmxm.png) ### 4. iostat Процесс установки iostat очень прост. iostat является частью пакета sysstat, который можно установить на вашей соответствующей системе одной из команд ниже: Ubuntu / Debian `sudo apt install sysstat` ![](https://i.imgur.com/KXop2Q4.png) **Запуск IOSTAT** IOSTAT инструмент, который доступен через команду iostat. Введите эту команду, чтобы увидеть, как она работает: `iostat` ![](https://i.imgur.com/W1syo3o.png) **Синтаксис iostat очень простой. Вам достаточно выполнить:** `$ iostat опции устройство интервал` Параметры устройство и интервал необязательные. Первый указывает по какому устройству показывать статистику, а второй, с каким интервалом обновлять данные. Давайте сначала рассмотрим опции программы, которые могут вам пригодится: - с - отобразить только информацию об использовании процессора; - d - отобразить только информацию об использовании устройств; - h - выводить данные в отчёте в удобном для чтения формате; - k - выводить статистику в килобайтах; - m - выводить статистику в мегабайтах; - o JSON - выводить статистику в формате JSON; - p - вывести статистику по устройству и всех его разделам; - x - вывести расширенную статистику; - y - отображать статистику с момента запуска утилиты, а не системы; - z - спрятать информацию о дисках, у которых нет активности. Самый простой пример использования утилиты, это запустить её без параметров. Она выведет отчёт с со средней статистикой с момента включения системы до момента запуска программы: `sudo iostat` ![](https://i.imgur.com/pwcHxfH.png) В первой части отчёта находится информация о загруженности процессора.Для просмотра данных в удобном формате выполните: `sudo iostat -h` ![](https://i.imgur.com/FkLW5O6.png) Чтобы посмотреть данные по нужному устройству просто укажите это устройство: `sudo iostat /dev/nvme0n1` ![](https://i.imgur.com/hONJwQl.png) Можно посмотреть статистику по каждому разделу устройства, тогда надо воспользоваться опцией -p: `sudo iostat -p /dev/nvme0n1` ![Uploading file..._3s17wrrlf]() Чтобы утилита автоматически обновляла данные каждую секунду просто добавьте интервал. Например: `sudo iostat -p /dev/nvme0n1 1` ![](https://i.imgur.com/dZep90i.png) Если вы не хотите чтобы утилита суммировала все данные с момента запуска операционной системы, то можно использовать опцию -y. Но работает она только если задан интервал: `sudo iostat -y -p /dev/nvme0n1 1` ![](https://i.imgur.com/GqyQtr9.png) ### 4.1 Профилирование нагрузки на файловую систему с помощью iostat Для начала разумно сохранить df -hl для того чтобы понимать о каких разделах идет речь. ``` df -hl ``` ![](https://i.imgur.com/RClBcFo.png) ### 5. mpstat ### 5.1 Отображение всей информации Опция «-А», показывает всю информацию, которая может быть отображена с помощью команды mpstat, как показано ниже. Это действительно эквивалентно команде «-I ALL -u -P mpstat ALL» команды: `mpstat -A` ![](https://i.imgur.com/kAz7TMR.png) ### 5.2 Показать статистику CPU индивидуального процессора (или) ядра Параметр «-P ALL», покажет все индивидуальные процессоры или ядра вместе со статистикой: `mpstat -P ALL` ![](https://i.imgur.com/4vufzg7.png) ### 5.3 Для отображения статистически о конкретном CPU или ядре, используйте опцию «-P», как показано ниже: `mpstat -P 0` ![](https://i.imgur.com/K67xIaP.png) ### 5.4 Можно выполнить «mpstat -V» чтобы показать версию утилиты: ![](https://i.imgur.com/mX5Mtqi.png) ### 5.5 Дополнительные опции ![](https://i.imgur.com/PahQDpJ.png) ### 6. vmstat В первую очередь нужно вызвать команду vmstat, ![](https://i.imgur.com/os6lw51.png) **vmstat -a** (active/inactive memory) - активная/неактивная память ![](https://i.imgur.com/7ENgbX0.png) **vmstat -f** (number of forks since boot) - количество вилок с момента загрузки ![](https://i.imgur.com/cV9XYMq.png) **vmstat -d** (disk statistics) - статистика диска ![](https://i.imgur.com/dJwPOSJ.png) **vmstat -D** (summarize disk statistics) - (общая статистика диска) ![](https://i.imgur.com/vgegv1J.png) **vmstat --help** ![](https://i.imgur.com/LcO4Oip.png) vmstat 1 - 60 - через какое количество секунд выводить информацию ![](https://i.imgur.com/5geTUha.png) ### 7. Утилита/команда " w " Выводит краткую сводку о работающих в системе в данный момент пользователях (залогиненных пользователях), а также о том, какие процессы у них запущены ![](https://i.imgur.com/K9qNBN0.png) В таблице для каждого пользователя выводятся следующие поля: ``` USER — имя пользователя. TTY — название терминала. FROM — название удаленного компьютера или IP-адрес. LOGIN — время входа в систему. IDLE — время бездействия. JCPU — время, использованное всеми процессами, подключенными к tty. Оно не включает завершенные фоновые задания, но включает фоновые задания, работающие в данный момент. PCPU — время, использованное текущим процессом, который указан в поле WHAT. WHAT — текущий процесс (командная строка текущего процесса). ``` - h Не выводить заголовок у таблицы. ![](https://i.imgur.com/rw3dV3f.png) - u Игнорировать имена пользователей при определении времени текущего процесса и времени CPU. ![](https://i.imgur.com/yakHLbk.png) - s Использовать сокращенный формат вывода. Не выводить колонки JCPU и PCPU. ![](https://i.imgur.com/r5HgoUi.png) - f Включить или выключить вывод поля from, которое соответствует имени удаленного хоста (remote hostname). В зависимости от дистрибутива Linux (версии утилиты w), поле from может выводиться или не выводиться по умолчанию. ![](https://i.imgur.com/6Pc8B4o.png) - i Выводить в поле from IP-адрес вместо имени хоста (hostname), если это возможно. ![](https://i.imgur.com/5VpyMXg.png) - o Выводить информацию в старом формате. Время, которое меньше 1 минуты, не выводится. ![](https://i.imgur.com/EHuR5N4.png) - V Вывести версию утилиты w. ![](https://i.imgur.com/QKYujE9.png) ### 8. Утилита htop ![https://i.imgur.com/UURruNP.png](https://i.imgur.com/UURruNP.png) **Как установить htop** `sudo apt install htop` ![](https://i.imgur.com/tZ5ZFYp.png) **Как просмотреть все процессы в Linux** Команду htop можно запускать как с правами обычного пользователя: `htop` ![](https://i.imgur.com/anOULqd.png) Так и с привилегиями суперпользователя, для этого используйте sudo: `sudo htop` *Чтобы программа выводила новые данные раз в 5 секунд:*`sudo htop -d 50` ![](https://i.imgur.com/Y9XAm2O.png) **Как вывести процессы в виде дерева** *Для вывода процессов в виде дерева используйте опцию -t:*`sudo htop -t` ![](https://i.imgur.com/8JreuYT.png) # Практическая работа №2.2 --- # Установка и настройка сервера SSH в Linux ### **Цель работы:** - Научиться настраивать SSH-сервер, клиент. ### **Задача:** - Установить, настроить SSH-сервер, клиент. - Отключить доступ по root-пользователю. - Сменить порт по умолчанию на любой другой. - Подключиться к серверу linux c хостовой операционной системы через Putty**.** ## 1. Установка пакетов SSH `$ sudo apt install ssh` ![](https://i.imgur.com/r559u3p.png) `$ systemctl status ssh` ![](https://i.imgur.com/BbLTFbE.png) или: `$ service ssh status` даст тот же вывод. Теперь сервер работает с базовыми настройками по-умолчанию. ![](https://i.imgur.com/KP4K3X6.png) ## 2. Настройка SSH Режим работы SSH-сервера с настройками по-умолчанию хоть и является вполне работоспособным для небольших частных сетей, всё же нуждается в задании некоторых важных параметров для использования на высоконадёжных публичных серверах. Настройки демона хранятся в файле `/etc/ssh/sshd_config`. Посмотреть его можно командой `cat /etc/ssh/sshd_config` ![](https://i.imgur.com/pzuu6XM.png) ![](https://i.imgur.com/Blt3UTH.png) **Для применения сделанных настроек необходим перезапуск SSH-сервера:** `$ systemctl restart ssh` ![](https://i.imgur.com/3Fd1RzH.png) ## 3. Настройка и использование клиента SSH - Для подключения по к серверу используется команда: `$ ssh user_name@host_name` ![](https://i.imgur.com/TCpQDVY.png) ## 4. Для генерации ключей используется утилита ssh-keygen: `$ ssh-keygen` ![](https://i.imgur.com/8mSV95X.png) Копируем файл id_rsa, и конвертируем его в puttygen ![](https://i.imgur.com/CIuNjY4.png) ![](https://i.imgur.com/1q3jrqE.png) ![](https://i.imgur.com/LbWQokm.png) ![](https://i.imgur.com/BsPRVB2.png) Заходим в putty и выбираем наш созданный приватный ключ ![](https://i.imgur.com/uhffx61.png) Подключаемся к нашей машине по ssh ![](https://i.imgur.com/1Y7VrNz.png) Вводим логин и парольную фразу ![](https://i.imgur.com/D6ETae1.png) # Практическая работа №2.3 --- # Практическая работа "Установка и настройка SSH-authorized_keys" ### **Цель работы:** - научиться настраивать SSH-authorized_keys. - научиться работать с ключами SSH. ### **Задача:** - Разобраться как работает доступ по ключам. - Организовать аунтификацию к серверу linux через ключи. - Организовать аунтификацию к серверу linux через ключи без пароля. ## 2. Создание ключей SSH Первый шаг для настройки аутентификации ключей SSH на сервере заключается в том, чтобы сгенерировать пару ключей SSH на локальном компьютере. Для этого мы можем использовать специальную утилиту ssh-keygen, которая входит в стандартный набор инструментов OpenSSH. По умолчанию она создает пару 2048-битных ключей RSA, что подходит для большинства сценариев использования. Сгенерируйте на локальном компьютере пару ключей SSH, введя следующую команду: `ssh-keygen` ![](https://i.imgur.com/249hg0E.png) ## 3. Как скопировать открытый ключ на ваш сервер Синтаксис выглядит следующим образом: `ssh-copy-id username@remote_host` ![](https://i.imgur.com/JiOpcpj.png) **Теперь ваш ключ `id_rsa.pub` выгружен в удаленную учетную запись.** ## 4. Аутентификация на сервере с использованием ключей SSH `ssh username@remote_host` **Вводим парольную фразу** ![](https://i.imgur.com/0kpOfhf.png) **Подключаемся** ![](https://i.imgur.com/t8iuk3e.png) ## 5. Отключение аутентификации с помощью пароля на сервере `sudo nano /etc/ssh/sshd_config` ![](https://i.imgur.com/jU3qiuI.png) ![](https://i.imgur.com/BaPRPdr.png) `PasswordAuthentication no` `sudo service ssh restart` ![](https://i.imgur.com/U1AD8kc.png) Так же я создал алиас, чтобы подключаться к удалённой машине по хостовому имени ![](https://i.imgur.com/AV1KG0C.png) ## 6. Пробуем подключиться к удалённой машине Пробуем подключиться через алиас ![](https://i.imgur.com/Gkl0DZK.png) Всё работает, после введённой команды для подключения, мы сразу подключаемся без пароля # Практическая работа №2.4 --- ## Практическая работа "Сбор информации о Linux и WGET" ### **Цель работы:** - Научиться базовому сбору информации о Linux системах. ### **Задача:** - Научитесь скачивать файлы с помощью утилиты wget. - Научиться проверять пакеты на целостность. ### 1.Базовый сбор информации Начнём со сбора информации о дистрибутивах *cat /etc/release - информация о дистрибутиве и какая версия его* ![](https://i.imgur.com/lqjkl9u.png) ``` Показать Kali-релизы <https://www.kali.org/releases/> ``` ``` Если смотреть дистрибутив debian можно обратить внимание, что тут как раз много веток пооддержек <https://www.debian.org/index.ru.html> ``` **По ядру linux можно понять следующее:** **uname -a** ![](https://i.imgur.com/I7IsLxd.png) **whoami** Как следует из названия, команда whoami выводит имя пользователя для эффективного идентификатора пользователя. Другими словами, он отображает имя текущего вошедшего в систему пользователя. ![](https://i.imgur.com/oIfPgNq.png) гзешь **Команда uptime покажет, когда и сколько система работала и соответственно, если она работала без перерыва 3 года, то злоумышлинник может воспользоваться старыми уязвимостями для получения доступа или внедрения кода.** ![](https://i.imgur.com/bUJkakE.png) **Давайте посмотри права директории /home** ![](https://i.imgur.com/t6lsxJU.png) **Чтобы ограничить права другим пользователям делаем следующее sudo chmod o-rx /home/kali** ![](https://i.imgur.com/KmrLsxp.png) *Давайте рассмотрим, почему нам надо изменять права. по умолчанию каждый из пользователей может попасть в директорию любого пользователя, т.е. пользователь kali может попасть в директорию любого пользователя.* **ip neigh - показывает с какими компьютерами происходит обмен данными** ![](https://i.imgur.com/YrrT4oJ.png) **sudo ss -tlnp - показывает какие сервисы и с какими портами запущены** ![](https://i.imgur.com/wxHGr2T.png) **sudo -l - позволяет нам понять, что есть в этом машинки и что пользователь может** ![](https://i.imgur.com/2Nln1bZ.png) `в данном случае мы можем запускать любые команды от любого user` ### 2.Суидные файлы **Suid** *setuid и setgid являются флагами прав доступа в Unix, которые разрешают пользователям запускать исполняемые файлы с правами владельца или группы исполняемого файла. В Unix-подобных системах приложение запускается с правами пользователя, вызвавшего указанное приложение. Это обеспечивает дополнительную безопасность, так как процесс с правами пользователя не сможет получить доступ на запись к важным системным файлам, например /etc/passwd, который принадлежит суперпользователю root.* [https://ru.wikipedia.org/wiki/Suid](https://ru.wikipedia.org/wiki/Suid) В системе могут быть различные закладки `sudo find / -user root -perm -4000 -exec ls -ldb {} \\; 2> /dev/null` ![](https://i.imgur.com/6iiFBDf.png) **Базовый сбор информации может происходить не только вручную, давайте разберемся** *давайте разберем как это делать: переходим по ссылке и затем скачиваем утилиту* [https://cisofy.com/downloads/lynis/](https://cisofy.com/downloads/lynis/) - *нам надо скопировать ссылку данной утилиты и скачать её с помощью wget например в директорию /tmp ** `wget <https://downloads.cisofy.com/lynis/lynis-3.0.6.tar.gz`> ![](https://i.imgur.com/GsLbQii.png) **далее необходимо разаархивировать вводим следующее:** tar xfv lynis-3.0.3.tar.gz ![](https://i.imgur.com/ulzdj2c.png) затем давайте проверим контрольную сумму с сайта и то, что мы скачали ![https://i.imgur.com/eytkmHj.png](https://i.imgur.com/eytkmHj.png) `3005346e90339c18a4c626169c6f1d9fb8643bb0d0a049bcaf64b7ccb4fd272c` *делается это следующей командой* `sha256sum lynis-3.0.6.tar.gz` ![](https://i.imgur.com/qVY90FY.png) **далее переходим в директорию lynis** ``` cd lynis ls ``` ![](https://i.imgur.com/BDaULEg.png) **далее запускаем утилиту lynis** `sudo ./lynis audit system` ![](https://i.imgur.com/U7JbsVQ.png) *нажимаем Enter* ![](https://i.imgur.com/wDDeC90.png) *Это вывод report-отчёт* ![](https://i.imgur.com/JjmmP94.png) **ещё можно набрать команду** `./lynis show options` ![](https://i.imgur.com/qBEyY3o.png) **Перенаправлять файлы лучше через стандартный report утилиты:** `/var/log/lynis-report.dat` ![](https://i.imgur.com/K25FwqJ.png) ![](https://i.imgur.com/9oquEVz.png) ### 3. Проверка целостностей пакетов для просмотра пакетов в системе ``` dpkg -l ``` ![](https://i.imgur.com/LkwxF7E.png) для просмотра установленных утилит необходимо набрать следующую команду ``` dpkg -L coreutils ``` - она покажет все штатные утилиты ![](https://i.imgur.com/nhpDOCE.png) например рассмотрим утилиту /bin/dir /bin/dir --help которая позволяет нам работать по сути как ls ![](https://i.imgur.com/fXFnWPJ.png) что будет если мы поменяем /bin/false на /bin/dir тем самым с имитируем подмену или правку кода программы сделаем backup sudo mv /bin/dir /bin/dir.bak ![](https://i.imgur.com/FbqR0ly.png) вводим команду sudo cp /bin/false /bin/dir ![](https://i.imgur.com/bpllFcN.png) теперь при запуске dir мы можем уыидеть, что ничего не будет происходить, кроме как если посмотреть логическую ложь, то будет ошибка ``` echo $? ``` ![](https://i.imgur.com/rO7pEVr.png) соответственно, чтобы нам быстро проверить этот пакет мы можем выполнить команду ``` debsums ``` и если она не установленна, то необходимо её установить через команду ``` sudo apt install debsums ``` ![](https://i.imgur.com/XwuBYI7.png) **debsums** служит, в первую очередь, для нахождения изменённых администратором файлов установленных в системе пакетов или повреждённых файлов из-за некачественного носителя и в какой-то мере используется в качестве инструмента обеспечения безопасности. - debsums -a - Проверяет все файлы (включая конфигурационные, которые обычно располагаются слева) - debsums -e - Проверяет только конфигурационные файлы пакетов - debsums -с - Выводит список измененных на stdout файлов - debsums -I - Отображает файлы, в которых отсутствует информация о md5sum - debsums -s - Выводит только ошибки; при их отсутствии не производит никаких действий debsums <название программного пакета> - Отображает пакеты, которые необходимо проверить с помощью debsums - `debsums -ac coreutils` - запуск проверки - `debsums -cs coreutils` - запуск проверки ![](https://i.imgur.com/N2OPJwr.png) можно также проверить утилитой ``` dpkg --verify coreutils ``` ![](https://i.imgur.com/kZS23vu.png) но он будет более загадачным в RedHat используется немного подругому - rpm -V openssh-server $ `rpm -q -dump openssh-server` и находятся контрольные суммы тут `/var/lib/rpm/Packages` - в Debian тут `/var/lib/dpkg/info/*.md5sums` Если кто-то смог проникнуть в систему и что-то деал в ней нам поможет команда find Например, если нам надо рассмотреть какой либо инцидент: `sudo find / -printf "%T@;%Tc;%p\\n"` ![](https://i.imgur.com/EhIhulv.png) можно указать через пробел, но тогда будет сложно работать с выводом данных: `sudo find / -printf "%T@ %Tc %p\\n"` ``` -prinf - то где мы будем искать %T@ - время ввиде числа %Tc - время человека читаемое %p\\n - путь до файла ``` Далее если надо сделать по одному конкретному пользователю необходиму следующие: `sudo find /home/kali/ -printf "%T@;%Tc;%p\\n" > timeline.csv` ![](https://i.imgur.com/rOFqC0M.png) Затем желательно это отсортировать, например: `head timeline.csv` сейчас никак не отсортированно Но давайте отсортируем данный файл с помощью команды: `sort -rn timeline.csv | less` где флаг `-r` как раз будет указывать, что последнее изменение будет первым ![](https://i.imgur.com/uhhWQjP.png) **Мы можем видеть, что менялось и в какое время, что позволит увидеть все изменения.** # Практическая работа №2.5 --- ## Практическая работа "Переменные окружения в Linux .bashrc, .bash_profile и .bash_login" ### **Цель работы:** - Научиться работать с переменным окружением в linux. ### **Задача:** - Научиться работать c .bashrc, .bash_profile и .bash_login. ### 1. Просмотр списка системных переменных окружения Пропишем команду sudo `apt-get install coreutils`, чтобы проверить наличие данной утилиты у вас в системе и сразу же установить ее при надобности. *Процесс укажет какие добавлены новые файлы или их наличии в библиотеках.* ![](https://i.imgur.com/Pc1wQHC.png) Теперь воспользуемся командой ``` Coreutils ``` , чтобы раскрыть список всех переменных окружения. *Выражение до знака = — название переменной, а после — ее значение.* ![](https://i.imgur.com/LBoQnD4.png) ### 1.1 Список основных системных и пользовательских переменных окружения. **Обратить внимание хотелось бы на такие пункты:** - DE. Полное название — Desktop Environment. Содержит имя текущего окружения рабочего стола. В операционных системах на ядре Linux используются различные графические оболочки, поэтому приложениям важно понимать, какая сейчас активна. В этом и помогает переменная DE. Пример ее значений — gnome, mint, kde и так далее. - PATH — определяет список директорий, в которых происходит поиск различных исполняемых файлов. Например, при действии одной из команд по поиску и доступу к объектам они обращаются к этим папкам для быстрого поиска и передачи исполняемых файлов с указанными аргументами. - SHELL — хранит в себе опцию активной командной оболочки. Такие оболочки позволяют пользователю самостоятельно прописывать определенные скрипты и запускать различные процессы с помощью синтаксисов. Самой популярной оболочкой считается bash. Список остальных распространенных команд для ознакомления вы найдете в другой нашей статье по следующей ссылке. - HOME — здесь все достаточно просто. Данный параметр указывает путь к домашней папке активного юзера. У каждого юзера он разный и имеет вид: /home/user. Объяснение этому значению тоже легкое — эта переменная, например, используется программами для установления стандартного места расположения их файлов. Конечно, примеров существует еще огромное количество, но для ознакомления этого достаточно. - BROWSER — содержит в себе команду для открытия веб-обозревателя. Именно эта переменная чаще всего и определяет браузер по умолчанию, а все остальные утилиты и ПО обращаются к указанной информации для открытия новых вкладок. - PWD и OLDPWD. Все действия из консоли или графической оболочки происходят из определенного расположения в системе. Первый параметр отвечает за текущее нахождение, а второй показывает предыдущее. Соответственно, их значения меняются достаточно часто и хранятся как в пользовательских конфигурациях, так и в системных. - TERM. Программ-терминалов для Linux существует большое количество. Упомянутая переменная хранит в себе информацию о названии активной консоли. - RANDOM — содержит в себе скрипт, генерирующий каждый раз случайное число от 0 до 32767 при обращении к этой переменной. Такая опция позволяет другому софту обходиться без собственного генератора случайных чисел. - EDITOR — отвечает за открытие редактора текстовых файлов. Например, по умолчанию вы можете встретить там путь /usr/bin/nano, но ничего вам не мешает изменить его на любой другой. За более сложные действия с тестом отвечает VISUAL и запускает, например, редактор vi. - HOSTNAME — имя компьютера, а USER — имя текущей учетной записи. ### 2. Запуск команд с указанием нового значения переменной окружения Можно самостоятельно на время изменить опцию любого параметра, чтобы запустить с ним определенную программу или выполнить любые другие действия. В таком случае в консоли вам будет достаточно прописать `env VAR=VALUE`, где `VAR` — название переменной, а `VALUE` — ее значение, например, путь к папке `/home/kali`. ![](https://i.imgur.com/4aisNhM.png) *При следующем просмотре всех параметров через упомянутую выше команду `printenv` вы увидите, что указанное вами значение было изменено. Однако оно станет таким, как было по умолчанию, сразу же после следующего обращения к ней, а также функционирует только в пределах активного терминала.* ### 2.1 Установка и удаление локальных переменных окружения Из проделанного выше вы уже знаете о том, что локальные параметры не сохраняются в файлах и активны только в рамках текущей сессии, а после ее завершения удаляются. Если вас интересует собственное создание и удаление таких опций, сделать нужно следующее: Запустите «Терминал» и напишите команду `VAR=VALUE`, после чего нажмите на клавишу `Enter`. Как обычно, VAR — любое удобное название переменной одним словом, а `VALUE` — значение. Проверьте действенность произведенных действий, введя `echo $TESTKALI`. Строчкой ниже вы должны получить опцию переменной. Удаляется любой параметр командой `unset TESTKALI`. Проверить удаление можно также через ``` echo $TESTKALI ``` (следующая строка должна быть пустой). ![](https://i.imgur.com/aowiTJm.png) Таким нехитрым образом добавляются любые локальные параметры в неограниченном количестве. ### 2.2 Добавление и удаление пользовательских переменных Рассмотрим классы переменных, которые хранятся в конфигурационных файлах, а из этого выплывает то, что придется редактировать сами файлы. Делается это с помощью любого стандартного текстового редактора. ![https://i.imgur.com/Mn1g4kx.png](https://i.imgur.com/Mn1g4kx.png) *Пользовательскую конфигурацию можно редактировать через* `sudo nano .bashrc.` ![](https://i.imgur.com/UPKnln0.png) *Обновление конфигурации произойдет после повторного старта файла, а делается это через* `source .bashrc.` *Проверить активность переменной можно через ту же опцию* `echo $TESTKALI`. ![](https://i.imgur.com/ZWkD60P.png) **Что касается удаления параметров, то происходит оно тоже через конфигурационный файл. Достаточно полностью удалить строку или закомментировать ее, добавив в начале знак #.** ### 2.3 Создание и удаление системных переменных окружения **Осталось только затронуть третий класс переменных — системные.** Редактироваться для этого будет файл /ETC/PROFILE, который остается активным даже при удаленном подключении, например, через известный многим менеджер SSH. Открытие конфигурационного элемента осуществляется примерно так же, как и в предыдущем варианте: введите `nano /etc/profile` ![](https://i.imgur.com/7jft4MI.png) Внесём `TESTKALI2=/home/kali12345` ![](https://i.imgur.com/fU4mHQ9.png) Сохраняем и выходим. Пишем команду `source /etc/profile` - чтобы изменения вступили в силу. Проверяем: `echo $TESTKALI2=/home/kali12345` ![](https://i.imgur.com/dxF1rQD.png)