---
# System prepended metadata

title: '**Практическая работа №2 OS Linux**'

---

# **Практическая работа №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)