# Занятие 2 ## Практическая работа №2.1 **1. Команда df в linux** Чтобы посмотреть доступное пространство на всех примонтированных разделах и информацию о них достаточно набрать: ![](https://i.imgur.com/T2ZiASR.png) Теперь давайте попросим утилиту выводить данные в более читаемом формате: ![](https://i.imgur.com/DTm5raK.png) Если задать опцию -a, вы можете получить информацию обо всех файловых системах известных ядру, которые были смонтированы: ![](https://i.imgur.com/hELLaHY.png) Также можно отфильтровать две файловые системы: ![](https://i.imgur.com/fhwJST6.png) Или же указать файловую систему, которую нужно отображать: ![](https://i.imgur.com/2bgSYzJ.png) Также можно указать интересующий вас раздел, как вы видели в синтаксисе команды: ![](https://i.imgur.com/DR9DJrU.png) С помощью опции -i вы можете посмотреть информацию про состояние inode в вашей файловой системе: ![](https://i.imgur.com/zym1Zbu.png) Вывести объем доступного пространства в каталоге: ![](https://i.imgur.com/BCRJCvP.png) **2. Команда du в Linux** При выполнении без какой-либо опции du отображает использование диска для данного файла или каталога и каждого из его подкаталогов в байтах. ![](https://i.imgur.com/07SRbqL.png) Вы также можете передать команде du несколько файлов и каталогов в качестве аргументов: ![](https://i.imgur.com/sEHQ50B.png) Параметр -a указывает du сообщать об использовании дискового пространства каждым файлом в каталоге. ![](https://i.imgur.com/jmTw3T1.png) Например, чтобы получить общий размер /var/lib и всех его подкаталогов, вы должны выполнить следующую команду: ![](https://i.imgur.com/XwbP4sj.png) Чтобы сообщить только общий размер указанного каталога, а не подкаталогов, используйте параметр -s : ![](https://i.imgur.com/Ldl1Q54.png) Параметр *-c* указывает *du* сообщать общую сумму. Это полезно, когда вы хотите получить объединенный размер двух или более каталогов. ![](https://i.imgur.com/tR1yU2M.png) Параметр *-c* указывает *du* сообщать общую сумму. Это полезно, когда вы хотите получить объединенный размер двух или более каталогов. ![](https://i.imgur.com/zS4pRvG.png) По умолчанию утилита du повторно использует дисковое пространство, используемое каталогом или файлом. Чтобы узнать очевидный размер файла, используйте переключатель *--apparent-size* . «Видимый размер» файла — это фактический объем данных в файле. ![](https://i.imgur.com/TSjPZZf.png) du также позволяет использовать шаблон оболочки. Например, чтобы получить размер всех каталогов, начинающихся с «Do» в вашем домашнем каталоге, вы должны запустить: ![](https://i.imgur.com/6qwpegr.png) **Использование du с другими командами** Команду du можно комбинировать с другими командами с конвейерами. Например, чтобы напечатать 5 самых больших каталогов внутри каталога */var* вы должны передать вывод du в команду sort чтобы отсортировать каталоги по их размеру, а затем передать результат в команду head которая распечатает только 5 верхних каталогов: ![](https://i.imgur.com/85rSR4r.png) **3. Команда free в Linux** Вывод будет включать три строки, заголовок, одну строку для памяти и одну для свопа: ![](https://i.imgur.com/yLsGW9t.png) По умолчанию команда free показывает информацию о памяти в килобайтах. Чтобы просмотреть информацию в удобочитаемом формате (обычно в мегабайтах и гигабайтах), используйте параметр -h: ![](https://i.imgur.com/FPylWPm.png) **Например, чтобы отобразить результат в мегабайтах, введите:** ![](https://i.imgur.com/LWKmOd1.png) **Отображение итоговых значений столбца** ![](https://i.imgur.com/gURo5Ug.png) **Непрерывно печатать результат** Например, чтобы распечатывать информацию о памяти каждые пять секунд, вы должны выполнить: ![](https://i.imgur.com/jMUocwi.png) Чтобы отображать результат определенное количество раз, используйте параметр -c ( --count ). В примере ниже команда выведет результат десять раз: ![](https://i.imgur.com/SUHwENN.png) **3.1 Команда free в Linux с примерами** ![](https://i.imgur.com/24dn3RC.png) Это покажет вам только один вывод для команды free, но этот вывод будет изменяться через регулярные промежутки времени. ![](https://i.imgur.com/MFDqv4Q.png) **4. iostat** Установка iostat ![](https://i.imgur.com/co1B1nD.png) Запуск IOSTAT ![](https://i.imgur.com/pCSDfaU.png) Синтаксис iostat очень простой. Вам достаточно выполнить: ![](https://i.imgur.com/UHFjaAc.png) Самый простой пример использования утилиты, это запустить её без параметров. Она выведет отчёт с со средней статистикой с момента включения системы до момента запуска программы: ![](https://i.imgur.com/7SslpaL.png) Рассмотрим ещё несколько примеров. Для просмотра данных в удобном формате выполните: ![](https://i.imgur.com/qIGaJpl.png) Чтобы посмотреть данные по нужному устройству просто укажите это устройство: ![](https://i.imgur.com/uYTiXdC.png) Можно посмотреть статистику по каждому разделу устройства, тогда надо воспользоваться опцией -p: ![](https://i.imgur.com/wS8vcEC.png) Если вы не хотите чтобы утилита суммировала все данные с момента запуска операционной системы, то можно использовать опцию -y. Но работает она только если задан интервал: ![](https://i.imgur.com/nYXlVOt.png) **4.1 Профилирование нагрузки на файловую систему с помощью iostat** **Измерения** **Подготовка** Для начала разумно сохранить df -hl для того чтобы понимать о каких разделах идет речь. ![](https://i.imgur.com/eZVitdZ.png) **Строчка для получения лог файла:** ![](https://i.imgur.com/GPUPcq7.png) **Ввод нашего лога будет примерно таким**: ![](https://i.imgur.com/1r4B8DO.png) **5. mpstat** **5.1 Отображение всей информации** ![](https://i.imgur.com/QaOB1Gp.png) **5.2 Показать статистику CPU индивидуального процессора (или) ядра** ![](https://i.imgur.com/5uFjFR7.png) **5.3 Для отображения статистически о конкретном CPU или ядре, используйте опцию «-P», как показано ниже:** ![](https://i.imgur.com/mlbqhMY.png) **5.4 Можно выполнить «mpstat -V» чтобы показать версию утилиты:** ![](https://i.imgur.com/tNw978j.png) **5.5 Дополнительные опции** ![](https://i.imgur.com/6Y79I4M.png) **6. vmstat** ![](https://i.imgur.com/yLqIaoH.png) **vmstat -a** ![](https://i.imgur.com/LCK4pKj.png) **vmstat -f** ![](https://i.imgur.com/EUWQ3X5.png) **vmstat -d** ![](https://i.imgur.com/HTCZx7i.png) **vmstat -D** ![](https://i.imgur.com/lgJImsk.png) **vmstat --help** ![](https://i.imgur.com/0CemmFg.png) **7. Утилита/команда " w "** ![](https://i.imgur.com/KflJEPU.png) * h ![](https://i.imgur.com/x8cLEji.png) * u ![](https://i.imgur.com/47914yH.png) * s ![](https://i.imgur.com/dju0to3.png) * f ![](https://i.imgur.com/E3bVAZb.png) * i ![](https://i.imgur.com/49igxRr.png) * o ![](https://i.imgur.com/FzAW71a.png) * V ![](https://i.imgur.com/WCMtZ3U.png) **8. Утилита htop** Как установить htop ![](https://i.imgur.com/5huSXP8.png) **Как просмотреть все процессы в Linux** ![](https://i.imgur.com/yroWt4U.png) **Как ускорить или замедлить частоту обновления htop** Например, чтобы программа обновляла окно каждую 1/10 секунды: sudo htop -d 1 ![](https://i.imgur.com/gmhtgKw.png) Чтобы программа выводила новые данные раз в 5 секунд: sudo htop -d 50 ![](https://i.imgur.com/3dwuRB3.png) **Как вывести процессы в виде дерева** Для вывода процессов в виде дерева используйте опцию -t: sudo htop -t ![](https://i.imgur.com/3QOKFjw.png) ## Практическая работа №2.2 **1. Установка пакетов SSH** ![](https://i.imgur.com/tfvesc0.png) $ systemctl status sshd и service sshd status ![](https://i.imgur.com/RPceV2v.png) **2. Настройка SSH** - AddressFamily значение inet: - AddressFamily inet - Для адресов семейства IPv6 используется значение inet6. **Параметр ListenAddress позволяет задавать порты для отдельных сетевых интерфейсов:** - ListenAddress 10.24.205.75:2123 - ListenAddress 10.24.205.76:2124 ![](https://i.imgur.com/YWkVBuc.png) Очень полезным является параметр, позволяющий проводить авторизацию и шифрование трафика с помощью специальных SSH-ключей: ![](https://i.imgur.com/la7EtGg.png) Следует заметить, что в таком случае серверу необходимо явно указывать, где хранятся открытые ключи пользователей: ![](https://i.imgur.com/uvCWKhg.png) **Важно также отключать парольный доступ:** ![](https://i.imgur.com/7DOOdGn.png) Для указания разрешённых или запрещённых пользователей и групп служат директивы DenyUsers, AllowUsers, DenyGroups, и AllowGroups. Значениями для них являются списки имён, разделяемых пробелами, например: ![](https://i.imgur.com/4BDP39w.png) Следует также отключать root-доступ: ![](https://i.imgur.com/Z5YJsot.png) Настройки для алиасов хранятся либо глобально в /etc/ssh/ssh_config, либо раздельно для пользователей в ~/.ssh/config. Здесь нужно не спутать с ssh_config! Пример: ![](https://i.imgur.com/96apsPj.png) ![](https://i.imgur.com/8yKpk1p.png) **3. Настройка и использование клиента SSH** ![](https://i.imgur.com/ioByQwL.png) **4. Для генерации ключей используется утилита ssh-keygen:** ![](https://i.imgur.com/mZheK02.png) Утилита предложит выбрать расположение ключей (лучше всё оставить по-умолчанию), обычно это каталог `~/.ssh/,` ввести парольную фразу для закрытого ключа. После чего будут сгенерированы открытый ключ `id_rsa.pub` и закрытый `— id_rsa`. Теперь нужно скопировать открытый ключ, т. е. «слепок» закрытого на сервер. Проще всего этого можно добиться командой: ![](https://i.imgur.com/AOt5ZzS.png) Теперь можно выполнить подключение командой ssh и запустить защищённый сеанс удалённого управления. ![](https://i.imgur.com/eJaFvJj.png) Важно заметить, что использование сгенерированных `openSSH`-ключей несовместимо с PPK-форматом, используемым по-умолчанию в таких комплексах как PuTTY. Поэтому необходимо конвертировать имеющиеся `openSSH`-ключи в формат PPK. Удобнее всего это делать с помощью утилиты PuTTY – puttygen.exe. **Указываем необходимые параметры:** ![](https://i.imgur.com/d2zm22A.png) **Не забываем указать путь до приватного ключа:** ![](https://i.imgur.com/C95IniY.png) **Подключаемся:** ![](https://i.imgur.com/Tqkg3XS.png) ![](https://i.imgur.com/gioAWEc.png) ## Практическая работа №2.3 **1. Как работают ключи SSH?** -- **2. Создание ключей SSH** Если ранее вы сгенерировали пару ключей SSH, вы можете увидеть следующий диалог: ![](https://i.imgur.com/q7HgVlF.png) **3. Как скопировать открытый ключ на ваш сервер** ![](https://i.imgur.com/KyrgAgs.png) **4. Аутентификация на сервере с использованием ключей SSH** ![](https://i.imgur.com/iXo2hBl.png) **5. Отключение аутентификации с помощью пароля на сервере** ![](https://i.imgur.com/8XPtSko.png) **6. Копирование открытого ключа с помощью SSH** ![](https://i.imgur.com/eRUjXjt.png) ## Практическая работа №2.4 **1.Базовый сбор информации** ![](https://i.imgur.com/xkBkRHA.png) **По ядру linux можно понять следующее:** uname -a ![](https://i.imgur.com/8Rm0M9F.png) whoami ![](https://i.imgur.com/s4jI2cP.png) Команда uptime покажет, когда и сколько система работала и соответственно, если она работала без перерыва 3 года, то злоумышлинник может воспользоваться старыми уязвимостями для получения доступа или внедрения кода. ![](https://i.imgur.com/jBN03Yj.png) Давайте посмотри права директории /home ![](https://i.imgur.com/NmQLgM5.png) Чтобы ограничить права другим пользователям делаем следующее sudo chmod o-rx /home/kali ![](https://i.imgur.com/3X9zL89.png) ip neigh - показывает с какими компьютерами происходит обмен данными ![](https://i.imgur.com/HT578eU.png) sudo ss -tlnp - показывает какие сервисы и с какими портами запущены ![](https://i.imgur.com/CONyvcw.png) sudo -l - позволяет нам понять, что есть в этом машинки и что пользователь может ![](https://i.imgur.com/fbfQedX.png) **2. Суидные файлы** В системе могут быть различные закладки ![](https://i.imgur.com/0EzZnFp.png) Базовый сбор информации может происходить не только вручную, давайте разберемся wget https://downloads.cisofy.com/lynis/lynis-3.0.6.tar.gz ![](https://i.imgur.com/qajibWF.png) Далее необходимо разаархивировать вводим следующее: ![](https://i.imgur.com/L0HNaDB.png) затем давайте проверим контрольную сумму с сайта и то, что мы скачали ![](https://i.imgur.com/dUDsQzr.png) далее переходим в директорию lynis ![](https://i.imgur.com/7yo1RgM.png) далее запускаем утилиту lynis sudo ./lynis audit system ![](https://i.imgur.com/Y9G8Xji.png) нажимаем Enter ![](https://i.imgur.com/7cFRNjL.png) Это вывод report-отчёт ![](https://i.imgur.com/XL69EkD.png) ещё можно набрать команду `./lynis show options` ![](https://i.imgur.com/bteT5oS.png) Перенаправлять файлы лучше через стандартный report утилиты: /var/log/lynis-report.dat ![](https://i.imgur.com/tDpVXzw.png) ![](https://i.imgur.com/cpEoFzT.png) **3. Проверка целостностей пакетов** dpkg -l ![](https://i.imgur.com/ktfaZU6.png) для просмотра установленных утилит необходимо набрать следующую команду ``` dpkg -L coreutils ``` ![](https://i.imgur.com/Kns6xBd.png) например рассмотрим утилиту /bin/dir /bin/dir --help которая позволяет нам работать по сути как ls ![](https://i.imgur.com/yIyUko8.png) что будет если мы поменяем /bin/false на /bin/dir тем самым с имитируем подмену или правку кода программы сделаем backup sudo mv /bin/dir /bin/dir.bak ![](https://i.imgur.com/Uym8WnE.png) вводим команду sudo cp /bin/false /bin/dir ![](https://i.imgur.com/nsUfzcw.png) теперь при запуске dir мы можем уыидеть, что ничего не будет происходить, кроме как если посмотреть логическую ложь, то будет ошибка echo $? ![](https://i.imgur.com/prh1pWz.png) соответственно, чтобы нам быстро проверить этот пакет мы можем выполнить команду ``` debsums ``` и если она не установленна, то необходимо её установить через команду ```sudo apt install debsums``` ![](https://i.imgur.com/8ZBL1R3.png) - `debsums -ac coreutils` - запуск проверки - `debsums -cs coreutils` - запуск проверки ![](https://i.imgur.com/oolKN9n.png) можно также проверить утилитой ![](https://i.imgur.com/MVCwpK7.png) Если кто-то смог проникнуть в систему и что-то деал в ней нам поможет команда find Например, если нам надо рассмотреть какой либо инцидент: sudo find / -printf "%T@;%Tc;%p\\n" ![](https://i.imgur.com/xvnmq8w.png) можно указать через пробел, но тогда будет сложно работать с выводом данных: `sudo find / -printf "%T@ %Tc %p\\n"` ![](https://i.imgur.com/qNaM9sp.png) Далее если надо сделать по одному конкретному пользователю необходиму следующие: `sudo find /home/kali/ -printf "%T@;%Tc;%p\\n" > timeline.csv` ![](https://i.imgur.com/qt3zp0P.png) Затем желательно это отсортировать, например: `head timeline.csv` сейчас никак не отсортированно ![](https://i.imgur.com/GqjaoIq.png) Но давайте отсортируем данный файл с помощью команды: sort -rn timeline.csv | less ![](https://i.imgur.com/7mgAmet.png) ## Практическая работа №2.5 **1. Просмотр списка системных переменных окружения** Пропишем команду sudo `apt-get install coreutils`, чтобы проверить наличие данной утилиты у вас в системе и сразу же установить ее при надобности. ![](https://i.imgur.com/pwVLOXo.png) Теперь воспользуемся командой ``` Coreutils ``` чтобы раскрыть список всех переменных окружения. ![](https://i.imgur.com/Ukt8GFQ.png) 1.1 Список основных системных и пользовательских переменных окружения. -- **2. Запуск команд с указанием нового значения переменной окружения** Можно самостоятельно на время изменить опцию любого параметра, чтобы запустить с ним определенную программу или выполнить любые другие действия. В таком случае в консоли вам будет достаточно прописать env VAR=VALUE, где VAR — название переменной, а VALUE — ее значение, например, путь к папке /home/kali. ![](https://i.imgur.com/f1EJPOz.png) **2.1 Установка и удаление локальных переменных окружения** Запустите «Терминал» и напишите команду `VAR=VALUE`, после чего нажмите на клавишу `Enter`. Как обычно, VAR — любое удобное название переменной одним словом, а `VALUE` — значение. ![](https://i.imgur.com/0W6aeNG.png) Проверьте действенность произведенных действий, введя `echo $TESTKALI`. Строчкой ниже вы должны получить опцию переменной. ![](https://i.imgur.com/NkORzZW.png) Удаляется любой параметр командой `unset TESTKALI`. ![](https://i.imgur.com/dZ2ArXE.png) Проверить удаление можно также через ``` echo $TESTKALI ``` ![](https://i.imgur.com/xKhyxNi.png) **2.2 Добавление и удаление пользовательских переменных** *Пользовательскую конфигурацию можно редактировать через* `sudo nano .bashrc.` ![](https://i.imgur.com/qrTktZR.png) *Обновление конфигурации произойдет после повторного старта файла, а делается это через* `source .bashrc.` ![](https://i.imgur.com/wFXfLyy.png) Проверить активность переменной можно через ту же опцию `echo $TESTKALI`. ![](https://i.imgur.com/504glJs.png) **2.3 Создание и удаление системных переменных окружения** **Осталось только затронуть третий класс переменных — системные.** Редактироваться для этого будет файл /ETC/PROFILE, который остается активным даже при удаленном подключении, например, через известный многим менеджер SSH. Открытие конфигурационного элемента осуществляется примерно так же, как и в предыдущем варианте: введите `nano /etc/profile` ![](https://i.imgur.com/4e3Xod9.png) Внесём `TESTKALI2=/home/kali12345` Сохраняем и выходим. Пишем команду `source /etc/profile` - чтобы изменения вступили в силу. ![](https://i.imgur.com/etfsHNG.png) Проверяем: `echo $TESTKALI2=/home/kali12345` ![](https://i.imgur.com/jd0W17r.png)