# Занятие 2
## Практическая работа №2.1
**1. Команда df в linux**
Чтобы посмотреть доступное пространство на всех примонтированных разделах и информацию о них достаточно набрать:

Теперь давайте попросим утилиту выводить данные в более читаемом формате:

Если задать опцию -a, вы можете получить информацию обо всех файловых системах известных ядру, которые были смонтированы:

Также можно отфильтровать две файловые системы:

Или же указать файловую систему, которую нужно отображать:

Также можно указать интересующий вас раздел, как вы видели в синтаксисе команды:

С помощью опции -i вы можете посмотреть информацию про состояние inode в вашей файловой системе:

Вывести объем доступного пространства в каталоге:

**2. Команда du в Linux**
При выполнении без какой-либо опции du отображает использование диска для данного файла или каталога и каждого из его подкаталогов в байтах.

Вы также можете передать команде du несколько файлов и каталогов в качестве аргументов:

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

Например, чтобы получить общий размер /var/lib и всех его подкаталогов, вы должны выполнить следующую команду:

Чтобы сообщить только общий размер указанного каталога, а не подкаталогов, используйте параметр -s :

Параметр *-c* указывает *du* сообщать общую сумму. Это полезно, когда вы хотите получить объединенный размер двух или более каталогов.

Параметр *-c* указывает *du* сообщать общую сумму. Это полезно, когда вы хотите получить объединенный размер двух или более каталогов.

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

du также позволяет использовать шаблон оболочки. Например, чтобы получить размер всех каталогов, начинающихся с «Do» в вашем домашнем каталоге, вы должны запустить:

**Использование du с другими командами**
Команду du можно комбинировать с другими командами с конвейерами.
Например, чтобы напечатать 5 самых больших каталогов внутри каталога */var* вы должны передать вывод du в команду sort чтобы отсортировать каталоги по их размеру, а затем передать результат в команду head которая распечатает только 5 верхних каталогов:

**3. Команда free в Linux**
Вывод будет включать три строки, заголовок, одну строку для памяти и одну для свопа:

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

**Например, чтобы отобразить результат в мегабайтах, введите:**

**Отображение итоговых значений столбца**

**Непрерывно печатать результат**
Например, чтобы распечатывать информацию о памяти каждые пять секунд, вы должны выполнить:

Чтобы отображать результат определенное количество раз, используйте параметр -c ( --count ). В примере ниже команда выведет результат десять раз:

**3.1 Команда free в Linux с примерами**

Это покажет вам только один вывод для команды free, но этот вывод будет изменяться через регулярные промежутки времени.

**4. iostat**
Установка iostat

Запуск IOSTAT

Синтаксис iostat очень простой. Вам достаточно выполнить:

Самый простой пример использования утилиты, это запустить её без параметров. Она выведет отчёт с со средней статистикой с момента включения системы до момента запуска программы:

Рассмотрим ещё несколько примеров. Для просмотра данных в удобном формате выполните:

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

Можно посмотреть статистику по каждому разделу устройства, тогда надо воспользоваться опцией -p:

Если вы не хотите чтобы утилита суммировала все данные с момента запуска операционной системы, то можно использовать опцию -y. Но работает она только если задан интервал:

**4.1 Профилирование нагрузки на файловую систему с помощью iostat**
**Измерения**
**Подготовка**
Для начала разумно сохранить df -hl для того чтобы понимать о каких разделах идет речь.

**Строчка для получения лог файла:**

**Ввод нашего лога будет примерно таким**:

**5. mpstat**
**5.1 Отображение всей информации**

**5.2 Показать статистику CPU индивидуального процессора (или) ядра**

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

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

**5.5 Дополнительные опции**

**6. vmstat**

**vmstat -a**

**vmstat -f**

**vmstat -d**

**vmstat -D**

**vmstat --help**

**7. Утилита/команда " w "**

* h

* u

* s

* f

* i

* o

* V

**8. Утилита htop**
Как установить htop

**Как просмотреть все процессы в Linux**

**Как ускорить или замедлить частоту обновления htop**
Например, чтобы программа обновляла окно каждую 1/10 секунды: sudo htop -d 1

Чтобы программа выводила новые данные раз в 5 секунд: sudo htop -d 50

**Как вывести процессы в виде дерева**
Для вывода процессов в виде дерева используйте опцию -t: sudo htop -t

## Практическая работа №2.2
**1. Установка пакетов SSH**

$ systemctl status sshd и service sshd status

**2. Настройка SSH**
- AddressFamily значение inet:
- AddressFamily inet
- Для адресов семейства IPv6 используется значение inet6.
**Параметр ListenAddress позволяет задавать порты для отдельных сетевых интерфейсов:**
- ListenAddress 10.24.205.75:2123
- ListenAddress 10.24.205.76:2124

Очень полезным является параметр, позволяющий проводить авторизацию и шифрование трафика с помощью специальных SSH-ключей:

Следует заметить, что в таком случае серверу необходимо явно указывать, где хранятся открытые ключи пользователей:

**Важно также отключать парольный доступ:**

Для указания разрешённых или запрещённых пользователей и групп служат директивы DenyUsers, AllowUsers, DenyGroups, и AllowGroups. Значениями для них являются списки имён, разделяемых пробелами, например:

Следует также отключать root-доступ:

Настройки для алиасов хранятся либо глобально в /etc/ssh/ssh_config, либо раздельно для пользователей в ~/.ssh/config. Здесь нужно не спутать с ssh_config! Пример:


**3. Настройка и использование клиента SSH**

**4. Для генерации ключей используется утилита ssh-keygen:**

Утилита предложит выбрать расположение ключей (лучше всё оставить по-умолчанию), обычно это каталог `~/.ssh/,` ввести парольную фразу для закрытого ключа. После чего будут сгенерированы открытый ключ `id_rsa.pub` и закрытый `— id_rsa`. Теперь нужно скопировать открытый ключ, т. е. «слепок» закрытого на сервер. Проще всего этого можно добиться командой:

Теперь можно выполнить подключение командой ssh и запустить защищённый сеанс удалённого управления.

Важно заметить, что использование сгенерированных `openSSH`-ключей несовместимо с PPK-форматом, используемым по-умолчанию в таких комплексах как PuTTY. Поэтому необходимо конвертировать имеющиеся `openSSH`-ключи в формат PPK. Удобнее всего это делать с помощью утилиты PuTTY – puttygen.exe.
**Указываем необходимые параметры:**

**Не забываем указать путь до приватного ключа:**

**Подключаемся:**


## Практическая работа №2.3
**1. Как работают ключи SSH?**
--
**2. Создание ключей SSH**
Если ранее вы сгенерировали пару ключей SSH, вы можете увидеть следующий диалог:

**3. Как скопировать открытый ключ на ваш сервер**

**4. Аутентификация на сервере с использованием ключей SSH**

**5. Отключение аутентификации с помощью пароля на сервере**

**6. Копирование открытого ключа с помощью SSH**

## Практическая работа №2.4
**1.Базовый сбор информации**

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

whoami

Команда uptime покажет, когда и сколько система работала и соответственно, если она работала без перерыва 3 года, то злоумышлинник может воспользоваться старыми уязвимостями для получения доступа или внедрения кода.

Давайте посмотри права директории /home

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

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

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

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

**2. Суидные файлы**
В системе могут быть различные закладки

Базовый сбор информации может происходить не только вручную, давайте разберемся
wget https://downloads.cisofy.com/lynis/lynis-3.0.6.tar.gz

Далее необходимо разаархивировать вводим следующее:

затем давайте проверим контрольную сумму с сайта и то, что мы скачали

далее переходим в директорию lynis

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

нажимаем Enter

Это вывод report-отчёт

ещё можно набрать команду `./lynis show options`

Перенаправлять файлы лучше через стандартный report утилиты:
/var/log/lynis-report.dat


**3. Проверка целостностей пакетов**
dpkg -l

для просмотра установленных утилит необходимо набрать следующую команду
```
dpkg -L coreutils
```

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

что будет если мы поменяем /bin/false на /bin/dir тем самым с имитируем подмену или правку кода программы
сделаем backup sudo mv /bin/dir /bin/dir.bak

вводим команду sudo cp /bin/false /bin/dir

теперь при запуске dir мы можем уыидеть, что ничего не будет происходить, кроме как если посмотреть логическую ложь, то будет ошибка
echo $?

соответственно, чтобы нам быстро проверить этот пакет мы можем выполнить команду
```
debsums
```
и если она не установленна, то необходимо её установить через команду
```sudo apt install debsums```

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

можно также проверить утилитой

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

можно указать через пробел, но тогда будет сложно работать с выводом данных:
`sudo find / -printf "%T@ %Tc %p\\n"`

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

Затем желательно это отсортировать, например:
`head timeline.csv` сейчас никак не отсортированно

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

## Практическая работа №2.5
**1. Просмотр списка системных переменных окружения**
Пропишем команду sudo `apt-get install coreutils`, чтобы проверить наличие данной утилиты у вас в системе и сразу же установить ее при надобности.

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

1.1 Список основных системных и пользовательских переменных окружения.
--
**2. Запуск команд с указанием нового значения переменной окружения**
Можно самостоятельно на время изменить опцию любого параметра, чтобы запустить с ним определенную программу или выполнить любые другие действия. В таком случае в консоли вам будет достаточно прописать env VAR=VALUE, где VAR — название переменной, а VALUE — ее значение, например, путь к папке /home/kali.

**2.1 Установка и удаление локальных переменных окружения**
Запустите «Терминал» и напишите команду `VAR=VALUE`, после чего нажмите на клавишу `Enter`. Как обычно, VAR — любое удобное название переменной одним словом, а `VALUE` — значение.

Проверьте действенность произведенных действий, введя `echo $TESTKALI`. Строчкой ниже вы должны получить опцию переменной.

Удаляется любой параметр командой `unset TESTKALI`.

Проверить удаление можно также через
```
echo $TESTKALI
```

**2.2 Добавление и удаление пользовательских переменных**
*Пользовательскую конфигурацию можно редактировать через* `sudo nano .bashrc.`

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

Проверить активность переменной можно через ту же опцию `echo $TESTKALI`.

**2.3 Создание и удаление системных переменных окружения**
**Осталось только затронуть третий класс переменных — системные.**
Редактироваться для этого будет файл /ETC/PROFILE, который остается активным даже при удаленном подключении, например, через известный многим менеджер SSH. Открытие конфигурационного элемента осуществляется примерно так же, как и в предыдущем варианте:
введите `nano /etc/profile`

Внесём `TESTKALI2=/home/kali12345`
Сохраняем и выходим.
Пишем команду `source /etc/profile` - чтобы изменения вступили в силу.

Проверяем:
`echo $TESTKALI2=/home/kali12345`
