# Linux_Basic-Остапенко_Владимир-Практика-2
## Практическая работа №2.1 Основы мониторинга OS Linux с помощью утилит df, du, free, iostat, mpstat, vmstat, w, htop.
### **Цель работы:**
- Изучить работу утилит df, du, free, iostat, mpstat, vmstat, w, htop.
### **Задача:**
- Изучить работу всех утилит.
- Использовать при работе исключительно терминал.
- Необходимо включить в отчёт скриншоты всех указанных команд и опций в практической работе.
### 1. Команда df в linux
Рассмотрим варианты использовния команды df
```bash
df
```

```bash
df -h
```
> где "h – выводить размеры в читаемом виде, в мегабайтах или гигабайтах"

```bash
df -a
```
> где "a, –all – отобразить все файловые системы, в том числе виртуальные, псевдо и недоступные"

```bash
df -x tmpfs
```
> где "x – выводить информацию обо всех, кроме указанных файловых систем"


```bash
df -t ext4
```
> где "t, –type – выводить информацию только про указанные файловые системы"

```bash
df -h /dev/sda1
```

```bash
df -hi /dev/sda1
```
> где "i – выводить информацию об inode;"

Вывести объем доступного пространства в каталоге:
```bash
df -h /home
```

### 2. Команда du в Linux
Рассмотрим варианты использовния команды du
```bash
du ~/Downloads
du ~/Downloads ~/Pictures
```
> При выполнении без какой-либо опции du отображает использование диска для данного файла или каталога и каждого из его подкаталогов в байтах.


```bash
du -a ~/Downloads
```
>Параметр -a указывает du сообщать об использовании дискового пространства каждым файлом в каталоге.

Если запустить du для файла или каталога, для которого нет прав, получим слуедующий ответ:

Чтобы это исправить нужно будет добавить к команде sudo

Чтобы получить общий размер /var/lib и всех его подкаталогов использую следующию команду
```bash
sudo du -h /var
```

Чтобы сообщить только общий размер указанного каталога, а не подкаталогов, использую параметр -s:
```bash
sudo du -sh /var
```

Параметр -c указывает du сообщать общую сумму.
```bash
sudo du -csh /var/log /var/lib
```

Если надо отобразить использование диска подкаталогами n-уровня, ввожу параметр --max-depth и указываю уровень подкаталогов. Например, чтобы получить отчет о каталогах первого уровня, вы должны использовать:
```bash
sudo du -h --max-depth=1 /var/lib
```

По умолчанию утилита du повторно использует дисковое пространство, используемое каталогом или файлом. Чтобы узнать очевидный размер файла, используйю переключатель --apparent-size . «Видимый размер» файла — это фактический объем данных в файле.
```bash
sudo du -sh --apparent-size /var/lib
```

du также позволяет использовать шаблон оболочки
```bash
sudo du -csh ~/Do*
```

> Использование du с другими командами
>
> ```bash
>sudo du -h /var/ | sort -rh | head -5
>```
>
>
### 3. Команда free в Linux
Рассмотрим варианты использовния команды free
```bash
free
```

> Результат в мегабайтах
```bash
free --mega
```

По умолчанию команда free показывает информацию о памяти в килобайтах. Чтобы просмотреть информацию в удобочитаемом формате (обычно в мегабайтах и гигабайтах), использую параметр -h
```bash
free -h
```

Чтобы отобразить строку, показывающую итоги столбца, используйте параметр -t
```bash
free -ht
```

Чтобы постоянно отображать информацию о памяти на экране, вызову free с параметром -s ( --seconds ), за которым следует число, определяющее задержку.
```bash
free -hs 5
```

Чтобы отображать результат определенное количество раз, использую параметр -c ( --count ).
```bash
free -hs 5 -с 3
```

**Примеры:**
Сбор данных 4 раза с промежутком в 5 секунд, в удобном, человекочитабельном формате:
```bash
free -h --si -s 5 -c 4
```

Использование комнды watch позволит использовать уже имеющиеся поля, вместо того чтобы каждую итерацию перезаписывать таблицу
```bash
watch free -h
```


### 4. iostat
Установка:

> Утилита была предустановлена (kali 2022.3)
Запуск:

Для просмотра данных в удобном формате:
```bash
sudo iostat -h
```

Чтобы посмотреть данные по нужному устройству просто указать его:
```bash
sudo iostat /dev/sda
```

Можно посмотреть статистику по каждому разделу устройства, тогда надо воспользоваться опцией -p:
```bash
sudo iostat -p /dev/sda
```

Чтобы утилита автоматически обновляла данные каждую секунду надо добавить интервал.
```bash
sudo iostat -p /dev/sda 1
```

Если необходимо чтобы утилита не суммировала все данные с момента запуска операционной системы, то можно использовать опцию -y. Но работает она только если задан интервал:
```bash
sudo iostat -p /dev/sda 1
```

4.1 Профилирование нагрузки на файловую систему с помощью iostat
Подготовка

Наблюдение:
```bash
iostat -xk -t 10 | awk '// {print strftime("%Y-%m-%d %H:%M:%S"),$0}' >> iostat.log
```

```bash
iostat -xk -t 10 | awk '// {print strftime("%Y-%m-%d %H:%M:%S"),$0}'
```

Анализ:
Судя по близким или раным нулю значениям, система не нагружена
### 5. mpstat
Опция «-А», показывает всю информацию, которая может быть отображена с помощью команды mpstat, как показано ниже. Это действительно эквивалентно команде «-I ALL -u -P mpstat ALL» команды:
```bash
mpstat -A
```

Параметр «-P ALL», покажет все индивидуальные процессоры или ядра вместе со статистикой:
```bash
mpstat -P ALL
```

Для отображения статистически о конкретном CPU или ядре, использую опцию «-P», как показано ниже:
```bash
mpstat -P 0
```

Можно выполнить «mpstat -V» чтобы показать версию утилиты:
```bash
mpstat -V
```

Дополнительные опции
```bash
mpstat --help
```

### 6. vmstat
Вызов программы:
```bash
vmstat
```

Применение vmstat для обнаружения программ, которые потребляют слишком много ресурсов CPU:
> (active/inactive memory) - активная/неактивная память
```bash
vmstat -a
```

```bash
vmstat -f
```
> (number of forks since boot) - количество вилок с момента загрузки

```bash
vmstat -d
```
> (disk statistics) - статистика диска

```bash
vmstat -D
```
(summarize disk statistics) - (общая статистика диска)

Помощь по использованию команды
```bash
vmstat --help
```

vmstat 1 - 60 - через какое количество секунд выводить информацию
```bash
vmstat 2
```

### 7. Утилита/команда " w "
" w " - выводит краткую сводку о работающих в системе в данный момент пользователях (залогиненных пользователях), а также о том, какие процессы у них запущены
```bash
w
```

Посмотрим параметры команды:
h - Не выводить заголовок у таблицы
```bash
w -h
```

u - Игнорировать имена пользователей при определении времени текущего процесса и времени CPU.
```bash
w -u
```

s - Использовать сокращенный формат вывода. Не выводить колонки JCPU и PCPU.

f - Включить или выключить вывод поля from, которое соответствует имени удаленного хоста (remote hostname). В зависимости от дистрибутива Linux (версии утилиты w), поле from может выводиться или не выводиться по умолчанию.

i - Выводить в поле from IP-адрес вместо имени хоста (hostname), если это возможно.

o - Выводить информацию в старом формате. Время, которое меньше 1 минуты, не выводится

V - Вывести версию утилиты w.

### 8. Утилита htop
Установка:
```bash
sudo apt install htop
```

Просмотреть все процессы в Linux
```bash
htop
sudo htop
```

Для установки времени обновления htop есть опцию -d после которой указывется время обновления в десятой части секунд.
```bash
sudo htop -d 50
```
> раз в 5 секунд



Вывод процессов в виде дерева
```bash
sudo htop -t
```


---
## Практическая работа №2.2 Установка и настройка сервера SSH в Linux
### **Цель работы:**
- Научиться настраивать SSH-сервер, клиент.
### **Задача:**
- Установить, настроить SSH-сервер, клиент.
- Отключить доступ по root-пользователю.
- Сменить порт по умолчанию на любой другой.
- Подключиться к серверу linux c хостовой операционной системы через Putty**.**
### 1. Установка пакетов SSH
Установка:
```bash
sudo apt-get install ssh
```

Проверим был ли запущен ssh server
```bash
systemctl status sshd
```

### 2. Настройка SSH
Настройки демона хранятся в файле /etc/ssh/sshd_config. Посмотреть его можно командой:
```bash
cat /etc/ssh/sshd_config
```

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

1) только адреса IPv4 - AddressFamily inet
2) авторизация и шифрование трафика с помощью специальных SSH-ключей - PubkeyAuthentication yes
3) ключи в профиле пользователя - etc/.ssh/authorized_keys
4) отключу аутентификацию по паролю - PasswordAuthentication no
5) запрет на пустые пароли - PermitEmptyPasswords no
6) отключение доступа руту - PermitRootLogin no



Применим настройки перезапустив сервер
```bash
systemctl restart sshd
```

### 3. Настройка и использование клиента SSH
Настройки были применены верно.

Генерим SSH ключ

Сохраняю открытый ключ id_rsa.pub в файл authorized_keys

Передаю его в хостовую систему.
С помощью PuTTYgen конвертирую имеющийся openSSH-ключ в формат PPK

Загружаю приватный ключ в Putty и подключаюсь к серверу:



:::success
Успех!
:::
---
## Практическая работа №2.3 "Установка и настройка SSH-authorized_keys"
### **Цель работы:**
- научиться настраивать SSH-authorized_keys.
- научиться работать с ключами SSH.
### **Задача:**
- Разобраться как работает доступ по ключам.
- Организовать аутентификацию к серверу linux через ключи.
- Организовать аутентификацию к серверу linux через ключи без пароля.
### Решение
Отключение аутентификации с помощью пароля
```bash
sudo nano /etc/ssh/sshd_config
```
**PasswordAuthentication no**

Перезагрузим сервер
```bash
sysemctl restart sshd
```

Аналогично с действиями практики 2.2 генерирую ключи, импортирую их и подключаюсь по ssh

Всё работает правильно.
---
## Практическая работа №2.4 Практическая работа "Сбор информации о Linux и WGET"
### **Цель работы:**
- Научиться базовому сбору информации о Linux системах.
### **Задача:**
- Научитесь скачивать файлы с помощью утилиты wget.
- Научиться проверять пакеты на целостность.
### Решение
#### 1.Базовый сбор информации
Cбор информации о дистрибутиве
```bash
cat /etc/*release
```

По ядру linux можно понять следующее
```bash
uname -a
```

Команда whoami выводит имя пользователя
```bash
whoami
```

Команда uptime покажет, когда и сколько система работала
```bash
uptime
```

Посмотри права директории /home
```bash
ls -la /home
```

Чтобы ограничить права другим пользователям делаем следующее
```bash
sudo chmod o-rx /home/kali
```

ip neigh - показывает с какими компьютерами происходит обмен данными
```bash
ip neigh
```

sudo ss -tlnp - показывает какие сервисы и с какими портами запущены
```bash
sudo ss -tlnp
```

sudo -l - позволяет нам понять, что есть в этом машинки и что пользователь может
```bash
sudo -l
```

#### 2.Суидные файлы
Закладки:
```bash
sudo find / -user root -perm -4000 -exec ls -ldb {} \\; 2> /dev/null
```

Автоматический сбор информации:
Скачиваем утилиту
```bash
wget https://downloads.cisofy.com/lynis/lynis-3.0.6.tar.gz
```

Далее разаархивирую скачаный архив
```bash
tar xfv lynis-3.0.6.tar.gz
```

>Проверю контрольную сумму
>
>
>
>
>
>Совпадает!
Далее перехожу в директорию lynis
```bash
cd lynis
ls
```

запускаем утилиту lynis
```bash
sudo ./lynis audit system
```



Что просмотреть возможные опции утилиты:
```bash
./lynis show options
```

report утилиты (/var/log/lynis-report.dat):

### 3. Проверка целостностей пакетов
Просмотр пакетов в системе
```bash
dpkg -l
```

Просмотра установленных утилит
```bash
dpkg -L coreutils
```

например, рассмотрим утилиту /bin/dir
которая позволяет нам работать по сути как ls
```bash
/bin/dir --help
```

Сымитирую подмену

Установка debsums
>**debsums** служит, в первую очередь, для нахождения изменённых администратором файлов установленных в системе пакетов или повреждённых файлов из-за некачественного носителя и в какой-то мере используется в качестве инструмента обеспечения безопасности.

debsums -ac coreutils - запуск проверки
debsums -cs coreutils - запуск проверки

можно также проверить утилитой dpkg
```bash
dpkg --verify coreutils
```

Если кто-то смог проникнуть в систему и что-то деал в ней нам поможет команда find
Например, если нам надо рассмотреть какой либо инцидент:
```bash
sudo find / -printf "%T@;%Tc;%p\\n"
```

Далее если надо сделать по одному конкретному пользователю необходиму следующие:
```bash
sudo find /home/kali/ -printf "%T@;%Tc;%p\\n" > timeline.csv
```
Затем желательно это отсортировать, например:
`head timeline.csv` сейчас никак не отсортированно

отсортируем данный файл с помощью команды:
```bash
sort -rn timeline.csv | less
```

Мы можем видеть, что менялось и в какое время, что позволит увидеть все изменения.
---
## Практическая работа №2.5 Переменные окружения в Linux .bashrc, .bash_profile и .bash_login"
### **Цель работы:**
- Научиться работать с переменным окружением в linux.
### **Задача:**
- Научиться работать c .bashrc, .bash_profile и .bash_login.
### Решение
#### 0. "Теория"
Конфигурационные файлы для пользовательских и системных переменных:
* /etc/profile
* /etc/environment
* /etc/bash.bashc
* .bashrc
* .bash_profile
#### 1. Просмотр списка системных переменных окружения
Установка coreutils
```bash
sudo apt-get install coreutils
```

Теперь воспользуемся командой **Coreutils**
чтобы раскрыть список всех переменных окружения:
```bash
printenv
```

#### 2. Запуск команд с указанием нового значения переменной окружения
```bash
env HOME=/home/kali
```

#### 2.1 Установка и удаление локальных переменных окружения
Установка:
```bash
TESTKALI=/home/kali
echo $TESTKALI
```

Удаление:
```bash
unset TESTKALI
echo $TESTKALI
```

#### 2.2 Добавление и удаление пользовательских переменных
Рассмотрим классы переменных, которые хранятся в конфигурационных файлах:
```bash
sudo nano .bashrc
```


Обновление конфигурации произойдет после повторного старта файла, а делается это через source .bashrc.
```bash
source .bashrc.
echo $TESTKALI
```

#### 2.3 Создание и удаление системных переменных окружения
```bash
nano /etc/profile
```

Внесу
**`TESTKALI2=/home/kali12345`**
Сохраняю и выхожу.


---
Итог: Были успешно выполнены работы 2.1-2.5