---
title: Практическая работа 2
tags: pt-start, linux basics
---
## Основы мониторинга
### df
Утилита df позволяет узнать количество свбодного места на дисках
```commands
df
df -h /dev
df -k /dev
df -a
df - h <file>
```

### du
du же позволяет изнать призблизительный размер используемого дискового пространства каталогами и дисками
```
du -h <dir>
du -csh <dir>
```


### 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
```

## iostat
Для работы данного приложения стоит скачать пакет sysstat. После установки можно запустить iostat.
```commands
iostat
iostat -p <раздел> <частота обновления в секундах>
```


### mpstat
mpstat позволяет увидеть текущую нагрузку на ядра процессора. Так как я выделил всего одно ядро для виртуальной машины, у меня выводится только 0 ядро. Флаг -P позволяет вывести информацию о конкретном ядре.
```commands
mpstat -A
mpstat -P ALL
mpstat -P 0
mpstat
mpstat -P 2
mpstat -P 1
```


### vmstat
vmstat позволяет увидеть нагрузку на систему от активных процессов, а также от зомби процессов.
```commands
vmstat
vmstat -a
vmstat -f
vmstat -d
vmstat -D
```

### команда w
Крайне полезная команда, позволяющая увидеть всех работающих в системе пользователей. Также отображает подключения по ssh и telnet(в следующих заданиях отображено)
```commands
w
w -h
w -u
w -s
w -f
w -i
w -V
```

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


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

### Настройка sshd
> [name=despersy]
> Важно отметить, что в директории ssh есть два конфига: ssh_config и sshd_config. Очевидно, что для работы демона мы настраиваем именно конфиг демона.
В конфиге выставляем порт. Желательно брать выше 65000, ибо в таком случае он не будет браться nmap -Pn который сканирует как раз до 65000. Включаем подключаение по ключам шифрования, а все остальное отключаем.

Теперь перезапускаем сервис командой systemctl restart sshd, чтобы изменения вступили в силу.

### Подключение к системе
Подключение я совершал с целевой системы. Как раз тут можно увидеть подключение через w -h. Перед подключением надо в конфиге включить пароль, чтобы была возможность обменяться ключами шифрования командой ssh-copy-id -i <путь до созданного ключа> -p <port> <user>@<ip>. Если на системе ключ не создан, то делается это командой ssh-keygen. После чего подключаемся к системе командой ssh -p <port> <user>@<ip>.

## Сбор информации о дистрибутиве.
### Os-release
Поиск os-release в системе. Стоит отметить, что некоторые дистрибутивы могут хранить файл в другой директории.

### Просмотр прав директории home
При помощи команды ls -la <dir> можно увидеть права на файлы и директории, а также их создателя и его группу.

### Ограничение прав и просмотр соседей
С помощью команды chmod -R o-rx /home/desp можно запретить пользователям, не состоящим в группе desp чтение и выполнение команд, также это работает рекурсивно, то есть на все лежащие внутри файлы.
ip neigh позволяет системы, с которыми производится обмен данными.

Показывает открытые порты на системе, а также процесс, который порт открыл. Аналогом данной утилиты можно считать netstat

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

### Lynis
Также есть вариант автоматической проверки при помощи утилиты lynis. Для этого ее требуется скачать. Выполняется при помощи команды wget https://downloads.cisofy.com/lynis/lynis-3.0.6.tar.gz, после чего выполняем распаковку архива tar -xvf <archive.tar>

Также стоит проверить хеши полученных файлов с теми, что указано на сайте. Сначала генерируем хеш полученного файла при помощи sha256sum <file>.
> [name=despersy]
> Я решил выполнить эту проверку просто через тернарный оператор в python. Присваиваем переменным наши хеши и пишем условие на совпадение. Как можно заметить, мои хеши совпали.

Теперь запускаем аудит системы.



Еще можно посмотреть на опции, которые присутствуют для запуска lynis

Можно также отобразить сгенерированный отчет после запуска аудита.

### Проверка целостности пакетов
Для просмотра штатных утилит системы можно использовать команду dpkg -l coreutils.

### Установка debsums
Данная утилита часто используется для обнаружения пакета, который был изменен рутом системы.
> [name=despersy]
> Тут у меня возникла небольшая проблема с локалью, но я ее исправил командой dpkg-reconfigure locales


Так как в системе был изменен /bin/dir на /bin/dir.bak система отображает его как потерянный пакет

### post exploration
Если в систему кто-то уже успел проникнуть, то стоит проверить, что он уже успел в системе сделать. Для этого стоит использовать подобного рода команду sudo find / -printf "%T@ %Tc %p\\n"
```
%T@ - время
%Tc - время для человека, а не набор секунд
%p\\n - путь до файла
```

После работы выводим полученный результат

## Работа с окружением bash
Для работы стоит установить пакет coreutils командой apt install coreutils -y для автоматического соглашения

Теперь отобразим все переменные используемого окружения.

Можно также изменить переменные внутри окружения.

Также можно добавить переменные. Стоит отметить, что пока переменные не записаны в bashrc пользователя, они будут обнуляться после перезапуска шелла.

Исправить эту проблему можно путем экспортирования переменной в bashrc

Теперь после перезапуска шелла можно увидеть, что переменная появилась.

Также подобные вещи можно настраивать в /etc/profile.

После проверки можно заметить появление новой переменной.
