# Занятие 2. Администрирование Linux
## 1. Основы мониторинга OS Linux с помощью утилит df, du, free, iostat, mpstat, vmstat, w, htop.
### 1.1. Команда df в linux
df (показывает список всех файловых систем по именам устройств, сообщает их размер, занятое и свободное пространство и точки монтирования.)

df -h (df В более читабельном формате)

df -a (информация обо всех файловых системах известных ядру, которые были смонтированы)

df -x tmpfs (выводит информацию обо всех, кроме указанных файловых систем)

df -x devtmpfs -x tmpfs

df -t ext4 (выводитn информацию только про указанные файловые системы)

df -h /dev/sda1 (выводит размеры в читаемом виде, в мегабайтах или гигабайтах;)

df -hi /dev/sda1 (-i – выводить информацию об inode;)

df -h /home

### 1.2. Команда du в Linux
du

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

du -h (отображает только пространство, занимаемое данным каталогом, в удобочитаемом формате)


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

Параметр -c указывает du сообщать общую сумму

Чтобы отобразить использование диска подкаталогами n-уровня, используется параметр --max-depth и указывается уровень подкаталогов


Чтобы узнать очевидный размер файла, используется переключатель --apparent-size

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

Использование du с другими командами

### 1.3. Команда free в Linux
Команда free предоставляет информацию об общем объеме физической памяти и памяти подкачки , а также о свободной и используемой памяти.
free

Чтобы буферы и кеш отображались в двух отдельных столбцах, используется параметр -w

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

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

Чтобы отобразить строку, показывающую итоги столбца, используется параметр -t . Это дает сумму памяти и свопа в столбцах total, used и free.

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

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

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

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


### 1.4. iostat
Утилита iostat позволяет проанализировать загруженность системы.

Для просмотра данных в удобном формате выполните:

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

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

Чтобы утилита автоматически обновляла данные каждую секунду просто добавляется интервал

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

#### 1.4.1. Профилирование нагрузки на файловую систему с помощью iostat
Разделы в системе:

Swap расположен в:

Получаем лог файла:

Ввод лога:

### 1.5. mpstat
#### 1.5.1 Отображение всей информации
Опция «-А», показывает всю информацию, которая может быть отображена с помощью команды mpstat, как показано ниже.

#### 1.5.2 Показать статистику CPU индивидуального процессора (или) ядра
Параметр «-P ALL», покажет все индивидуальные процессоры или ядра вместе со статистикой:

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

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

#### 1.5.5 Дополнительные опции

### 1.6. vmstat
vmstat предоставляет краткую информацию о различных ресурсах системы и связанных с ними неполадках, приводящих к снижению производительности.

Для получения информации о работе процессора удобнее использовать команду vmstat, а не iostat, так как ее построчный вывод проще анализировать, а в случае, когда к системе подключено много дисков, ее вывод намного менее объемный.
vmstat -a
(active/inactive memory) - активная/неактивная память
vmstat -f

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

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

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

vmstat --help
Все флаги vmstat

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

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

#### h
Не выводить заголовок у таблицы.

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

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

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

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

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

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

### 1.8. Утилита htop
htop предназначена для вывода на терминал списка запущенных процессов и информации о них
Установка:

Команду htop можно запускать как с правами обычного пользователя:

Для установки времени обновления htop используется опцию -d после которой указывается время обновления в десятой части секунд.
Например, чтобы программа обновляла окно каждую секунду:

Для вывода процессов в виде дерева используется опция -t:

## 2. Установка и настройка сервера SSH в Linux
### 2.1. Установка пакетов SSH

По завершению установки, автоматически будет запущен SSH-сервер в режиме демона. Это можно проверить командой:

### 2.2. Настройка SSH
nano /etc/ssh/sshd_config

Если оставить номер порта стандартным, т. е. 22, то велика вероятность, что он будет слишком часто сканироваться роботами.

Если используются только адреса IPv4, то очень рекомендуется установить для параметра AddressFamily значение inet:

Поскольку реализация openSSH позволяет работать с протоколами SSH1 и SSH2, то разумно отключить использование SSH1, т. к. эта версия является устаревшей. Работа по SSH1 крайне не рекомендуется:

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

Следует заметить, что в таком случае серверу необходимо явно указывать, где хранятся открытые ключи пользователей. Это может быть как один общий файл для хранения ключей всех пользователей (обычно это файл etc/.ssh/authorized_keys), так и отдельные для каждого пользователя ключи. Второй вариант предпочтительнее в силу удобства администрирования и повышения безопасности:

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

Или же, в случае, если всё-таки необходимо использовать доступ по паролю, то обязательно нужно отключать авторизацию по пустому паролю:

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

Иногда, когда следует задавать мультисерверную конфигурацию, очень удобно использовать алиасы (Aliases), что позволяет настроить сразу несколько режимов доступа (с разными хостами, портами и т. д.) и использовать их, указывая при этом конкретный алиас:

Для применения сделанных настроек необходим перезапуск SSH-сервера:

### 2.3. Настройка и использование клиента SSH
Для подключения по к серверу используется команда
$ ssh user_name@host_name
где user_name – имя пользователя в системе, host_name – имя узла, к которому производится подключение
Вход по паролю:

### 2.4. Для генерации ключей используется утилита ssh-keygen:
На другом linux создаю ssh-ключи:

Далее добавил публичный ключ серверу в файл ~/.ssh/authorized_keys
Пробую подключиться:

Получилось
### 2.5. Создание SSH-ключей на Windows с PuTTYgen
Выберите тип ключа SSH2-RSA и нажмите Generate.

После завершения создания ключей открытый ключ выводится на экран, закрытый хранится в памяти приложения. Чтобы сохранить эти ключи нажмите Save public key и Save private key. Укажите расположение файлов с ключами.

Теперь открытый ключ необходимо скопировать на сервер в файл authorized_keys.

При запуске PuTTY укажите путь к закрытому ключу на локальном компьютере. Для этого во вкладке Connections → Auth выберите необходимый путь.

Вводим данные:

Получилось:

## 3. Установка и настройка SSH-authorized_keys
### 3.1. Создание ключей SSH

### 3.2. Копирование открытого ключа на сервер
Я не догонял до этого времени зачем нужен алиас, а оказывается удобная штука :)
Не надо думать как написать правильно порт для команды ssh-copy-id или пользователя:

### 3.3. Аутентификация на сервере с использованием ключей SSH
Как видно, сервер не потребовал пароль, а сразу впустил (ну по ключу, понятное дело):

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


## 4. Сбор информации о Linux и WGET
### 1.Базовый сбор информации
Начнём со сбора информации о дистрибутивах

uname -a

команда whoami выводит имя пользователя для эффективного идентификатора пользователя. Другими словами, он отображает имя текущего вошедшего в систему пользователя.

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

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

Чтобы ограничить права другим пользователям делаем следующее

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

Показал другую kali, через которую устанавливали ssh
sudo ss -tlnp - показывает какие сервисы и с какими портами запущены

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

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

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

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

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

Контрольная сумма совпала
далее переходим в директорию lynis

далее запускаем утилиту lynis

нажимаем Enter

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

ещё можно набрать команду

### 3. Проверка целостностей пакетов
dpkg — это программное обеспечение, являющееся основой системы управления пакетами в Debian и ряде других операционных систем, основанных на Debian, например Ubuntu. dpkg используется для установки, удаления, и получения информации о .deb пакетах.
для просмотра пакетов в системе

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

она покажет все штатные утилиты
например, рассмотрим утилиту /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 мы можем увидеть, что ничего не будет происходить, кроме как если посмотреть логическую ложь, то будет ошибка

Чтобы проверить этот пакет, необходима утилита debsums:

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

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

Если кто-то смог проникнуть в систему и что-то деал в ней нам поможет команда find
Например, если нам надо рассмотреть какой либо инцидент:

можно указать через пробел, но тогда будет сложно работать с выводом данных:

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

Затем желательно это отсортировать

отсортируем данный файл с помощью команды:


## 5. Переменные окружения в Linux .bashrc, .bash_profile и .bash_login
### 5.1. Просмотр списка системных переменных окружения

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

### 5.2. Запуск команд с указанием нового значения переменной окружения

#### 5.2.1. Установка и удаление локальных переменных окружения
Установка

Удаление

#### 5.2.2. Добавление и удаление пользовательских переменных



#### 5.2.3. Создание и удаление системных переменных окружения

