---
# System prepended metadata

title: Практическая работа 2
tags: [' linux basics', pt-start]

---

---
title: Практическая работа 2
tags: pt-start, linux basics
---
## Основы мониторинга
### df
Утилита df позволяет узнать количество свбодного места на дисках
```commands
df
df -h /dev
df -k /dev
df -a
df - h <file>
```
![](https://i.imgur.com/2x9pN0Y.png)
### du
du же позволяет изнать призблизительный размер используемого дискового пространства каталогами и дисками
```
du -h <dir>
du -csh <dir>
```
![](https://i.imgur.com/Yxunn6A.png)
![](https://i.imgur.com/IHT9232.png)
### free
команда free позволяет узнать количество свободной оперативной памяти и swap памяти.
> [name=despersy]
> От себя отмечу, что для linux-based систем крайне важно добавить swap память, ибо, к примеру, тот же parrot будет спокойно использовать всю свободную оперативную память, из-за при базовом переборе хешей вы будете "терять" управление системой, ибо она будет виснуть. 
> Добавить swap можно следуя инструкциям с [этого сайта](https://www.thegeekdiary.com/how-to-add-swap-space-in-linux/), ибо тут она для cli версий подойдет. Однако использовать стоит именно раздел форматированый как swap нежели файл подкачки. Для windows систем это не будет играть сильной роли, а вот для liunx-based уже будет значительно отличаться.

```commands
free
free -h
free -h -t
```
![](https://i.imgur.com/IGMw0vR.png)

## iostat
Для работы данного приложения стоит скачать пакет sysstat. После установки можно запустить iostat.
```commands
iostat
iostat -p <раздел> <частота обновления в секундах>
```
![](https://i.imgur.com/vJ4bV0E.png)
![](https://i.imgur.com/hq0LBwO.png)
### mpstat
mpstat позволяет увидеть текущую нагрузку на ядра процессора. Так как я выделил всего одно ядро для виртуальной машины, у меня выводится только 0 ядро. Флаг -P позволяет вывести информацию о конкретном ядре.
```commands
mpstat -A
mpstat -P ALL
mpstat -P 0
mpstat 
mpstat -P 2
mpstat -P 1
```
![](https://i.imgur.com/3cBjspg.png)
![](https://i.imgur.com/eEPWqFt.png)
### vmstat
vmstat позволяет увидеть нагрузку на систему от активных процессов, а также от зомби процессов.
```commands
vmstat
vmstat -a 
vmstat -f 
vmstat -d
vmstat -D
```
![](https://i.imgur.com/g4RYrsj.png)
### команда w
Крайне полезная команда, позволяющая увидеть всех работающих в системе пользователей. Также отображает подключения по ssh и telnet(в следующих заданиях отображено)
```commands
w
w -h
w -u
w -s
w -f
w -i
w -V
```
![](https://i.imgur.com/Lch4cG1.png)

### htop
Ну это уже стандарт для любой системы. Прекраснейшая замена старому top, который не мог выделить процесс, а просто выводил их список вместе с нагрузкой. 
> [name=despersy]
> Не думаю, что стоит говорить про преимущества htop перед top, лучше просто покажу два изображения выполенения этих команд. Стоит ли говорить, что при попытке убить процесс нужно выключать top и запускать kill <код выключения> <процесс>, когда в htop это можно сделать не выходя из него. Однако для просмотра используемой памяти через scanmem я все же выбираю top.

![](https://i.imgur.com/dAosAP9.png)
![](https://i.imgur.com/IkvTBEs.png)
## Работа с ssh
### Установка ssh
Установка выполняется командой apt install ssh. После чего проверем его работу командой systemctl status sshd.
> [name=despersy]
> Проверяем sshd потому что d значит daemon. Это будет процесс работающий в фоне. На примере работы с докером можно очень хорошо научиться различать запуск контейнера с демоном и без.
> Почему systemctl? Потому что это debian 11 и service у него нет, это все больше для debian-based систем, на который накачаны дополнительные пакеты. По умолчанию в debian этого нет.

![](https://i.imgur.com/MDe2obx.png)

### Настройка sshd
> [name=despersy]
> Важно отметить, что в директории ssh есть два конфига: ssh_config и sshd_config. Очевидно, что для работы демона мы настраиваем именно конфиг демона.

В конфиге выставляем порт. Желательно брать выше 65000, ибо в таком случае он не будет браться nmap -Pn который сканирует как раз до 65000. Включаем подключаение по ключам шифрования, а все остальное отключаем.
![](https://i.imgur.com/C8N8TQC.png)
Теперь перезапускаем сервис командой systemctl restart sshd, чтобы изменения вступили в силу.
![](https://i.imgur.com/171Pjj5.png)
### Подключение к системе
Подключение я совершал с целевой системы. Как раз тут можно увидеть подключение через w -h. Перед подключением надо в конфиге включить пароль, чтобы была возможность обменяться ключами шифрования командой ssh-copy-id -i <путь до созданного ключа> -p <port> <user>@<ip>. Если на системе ключ не создан, то делается это командой ssh-keygen. После чего подключаемся к системе командой ssh -p <port> <user>@<ip>.
![](https://i.imgur.com/3X8rHW6.png)

## Сбор информации о дистрибутиве.
### Os-release
Поиск os-release в системе. Стоит отметить, что некоторые дистрибутивы могут хранить файл в другой директории.
![](https://i.imgur.com/ax2Kbzo.png)

### Просмотр прав директории home
При помощи команды ls -la <dir> можно увидеть права на файлы и директории, а также их создателя и его группу.
![](https://i.imgur.com/0miQxGZ.png)
### Ограничение прав и просмотр соседей
С помощью команды chmod -R o-rx /home/desp можно запретить пользователям, не состоящим в группе desp чтение и выполнение команд, также это работает рекурсивно, то есть на все лежащие внутри файлы. 
ip neigh позволяет системы, с которыми производится обмен данными. 
![](https://i.imgur.com/W4Wey6b.png)
Показывает открытые порты на системе, а также процесс, который порт открыл. Аналогом данной утилиты можно считать netstat
![](https://i.imgur.com/UGhPOzp.png)

### suid файлы
setuid и setgid являются флагами прав доступа в Unix, которые разрешают пользователям запускать исполняемые файлы с правами владельца или группы исполняемого файла. В Unix-подобных системах приложение запускается с правами пользователя, вызвавшего указанное приложение. Это обеспечивает дополнительную безопасность, так как процесс с правами пользователя не сможет получить доступ на запись к важным системным файлам, например /etc/passwd, который принадлежит суперпользователю root. Обычнов таких файлах можно запрятать парочку ловушек или бекдоров.

![](https://i.imgur.com/IEnBxYh.png)

### Lynis
Также есть вариант автоматической проверки при помощи утилиты lynis. Для этого ее требуется скачать. Выполняется при помощи команды wget https://downloads.cisofy.com/lynis/lynis-3.0.6.tar.gz, после чего выполняем распаковку архива tar -xvf <archive.tar>
![](https://i.imgur.com/kWiBE7r.png)
Также стоит проверить хеши полученных файлов с теми, что указано на сайте. Сначала генерируем хеш полученного файла при помощи sha256sum <file>.
> [name=despersy]
> Я решил выполнить эту проверку просто через тернарный оператор в python. Присваиваем переменным наши хеши и пишем условие на совпадение. Как можно заметить, мои хеши совпали.
    
![](https://i.imgur.com/xsYRRqf.png)

Теперь запускаем аудит системы.
![](https://i.imgur.com/z6otJjj.png)
![](https://i.imgur.com/kUGgJEv.png)
![](https://i.imgur.com/1U0zGEv.png)
Еще можно посмотреть на опции, которые присутствуют для запуска lynis 
![](https://i.imgur.com/8ApZRBD.png)
Можно также отобразить сгенерированный отчет после запуска аудита.
![](https://i.imgur.com/Zfw3EVf.png)
### Проверка целостности пакетов
Для просмотра штатных утилит системы можно использовать команду dpkg -l coreutils.
![](https://i.imgur.com/7aaPYaj.png)
### Установка debsums
Данная утилита часто используется для обнаружения пакета, который был изменен рутом системы.
> [name=despersy]
> Тут у меня возникла небольшая проблема с локалью, но я ее исправил командой dpkg-reconfigure locales

![](https://i.imgur.com/HtGKUfu.png)
![](https://i.imgur.com/mD7Y63l.png)

Так как в системе был изменен /bin/dir на /bin/dir.bak система отображает его как потерянный пакет
![](https://i.imgur.com/ZGibcyo.png)

### post exploration
Если в систему кто-то уже успел проникнуть, то стоит проверить, что он уже успел в системе сделать. Для этого стоит использовать подобного рода команду sudo find / -printf "%T@ %Tc %p\\n"
```
%T@ - время 
%Tc - время для человека, а не набор секунд
%p\\n - путь до файла
```
![](https://i.imgur.com/tF89elF.png)
После работы выводим полученный результат
![](https://i.imgur.com/OjY7crN.png)

## Работа с окружением bash
Для работы стоит установить пакет coreutils командой apt install coreutils -y для автоматического соглашения
![](https://i.imgur.com/XVW9jwu.png)
Теперь отобразим все переменные используемого окружения.
![](https://i.imgur.com/piaDx8F.png)

Можно также изменить переменные внутри окружения.
![](https://i.imgur.com/qtNvZ0T.png)
Также можно добавить переменные. Стоит отметить, что пока переменные не записаны в bashrc пользователя, они будут обнуляться после перезапуска шелла.
![](https://i.imgur.com/Xvpc3z7.png)
Исправить эту проблему можно путем экспортирования переменной в bashrc
![](https://i.imgur.com/nbyHdCU.png)
Теперь после перезапуска шелла можно увидеть, что переменная появилась.
![](https://i.imgur.com/wUycFNT.png)
Также подобные вещи можно настраивать в /etc/profile.
![](https://i.imgur.com/orBxaRY.png)
После проверки можно заметить появление новой переменной.
![](https://i.imgur.com/baf426p.png)

