---
# System prepended metadata

title: Занятие 2. Администрирование Linux

---

# Занятие 2. Администрирование Linux
## 1. Основы мониторинга OS Linux с помощью утилит df, du, free, iostat, mpstat, vmstat, w, htop.
### 1.1. Команда df в linux
df (показывает список всех файловых систем по именам устройств, сообщает их размер, занятое и свободное пространство и точки монтирования.)
![](https://i.imgur.com/lCSJbYg.png)
df -h (df В более читабельном формате)
![](https://i.imgur.com/RSyrssz.png)
df -a (информация обо всех файловых системах известных ядру, которые были смонтированы)
![](https://i.imgur.com/84uNrR6.png)
df -x tmpfs (выводит информацию обо всех, кроме указанных файловых систем)
![](https://i.imgur.com/7ArFhYW.png)
df -x devtmpfs -x tmpfs
![](https://i.imgur.com/wKjLEjV.png)
df -t ext4 (выводитn информацию только про указанные файловые системы)
![](https://i.imgur.com/jE3Geg4.png)
df -h /dev/sda1 (выводит размеры в читаемом виде, в мегабайтах или гигабайтах;)
![](https://i.imgur.com/BmqkeT6.png)
df -hi /dev/sda1 (-i – выводить информацию об inode;)
![](https://i.imgur.com/LgmoxGw.png)
df -h /home
![](https://i.imgur.com/49lRMsq.png)
### 1.2. Команда du в Linux
du
![](https://i.imgur.com/0dzda2E.png)
du -a (Параметр -a указывает du сообщать об использовании дискового пространства каждым файлом в каталоге)
![](https://i.imgur.com/ZsMEmA7.png)
du -h (отображает только пространство, занимаемое данным каталогом, в удобочитаемом формате)
![](https://i.imgur.com/8aMehZ9.png)
![](https://i.imgur.com/u3iPnFO.png)
du -sh (Чтобы сообщить только общий размер указанного каталога, а не подкаталогов, используется параметр -s )
![](https://i.imgur.com/JB463wS.png)
Параметр -c указывает du сообщать общую сумму
![](https://i.imgur.com/wkKofsI.png)
Чтобы отобразить использование диска подкаталогами n-уровня, используется параметр --max-depth и указывается уровень подкаталогов
![](https://i.imgur.com/llWpmAI.png)
![](https://i.imgur.com/iUsByHU.png)
Чтобы узнать очевидный размер файла, используется переключатель --apparent-size 
![](https://i.imgur.com/4fxpTif.png)
Чтобы получить размер всех каталогов, начинающихся с «Do» в вашем домашнем каталоге, вы должны запустить
![](https://i.imgur.com/AhT6jiB.png)
Использование du с другими командами
![](https://i.imgur.com/c0f3PNq.png)
### 1.3. Команда free в Linux
Команда free предоставляет информацию об общем объеме физической памяти и памяти подкачки , а также о свободной и используемой памяти.
free
![](https://i.imgur.com/6UxRz3s.png)
Чтобы буферы и кеш отображались в двух отдельных столбцах, используется параметр -w
![](https://i.imgur.com/KeH72IT.png)
Чтобы просмотреть информацию в удобочитаемом формате (обычно в мегабайтах и гигабайтах), используется параметр -h
![](https://i.imgur.com/otWb5T1.png)
Чтобы отобразить результат в мегабайтах, введите:
![](https://i.imgur.com/ZZ46LoC.png)
Чтобы отобразить строку, показывающую итоги столбца, используется параметр -t . Это дает сумму памяти и свопа в столбцах total, used и free.
![](https://i.imgur.com/lCJDyJQ.png)
Чтобы постоянно отображать информацию о памяти на экране, вызовается free с параметром -s ( --seconds ), за которым следует число, определяющее задержку.
![](https://i.imgur.com/oUssEuQ.png)
Чтобы отображать результат определенное количество раз, используйте параметр -c ( --count ). В примере ниже команда выведет результат два раза:
![](https://i.imgur.com/CO12oXI.png)
free с точки зрения практического применения
Мы подождали несколько секунд, а затем открыли несколько вкладок браузера и получил доступ к некоторым закладкам. Стресс этих видов деятельности отмечен колебаниями объема производства. 
![](https://i.imgur.com/jIMfMjp.jpg)
Если вы хотите постоянно отслеживать использование памяти командой free, но не хотите, чтобы ее вывод загромождал экран, вы можете использовать команду watch вместе с командой free.
![](https://i.imgur.com/jQmr3yQ.png)
![](https://i.imgur.com/Rh9Y8Yv.png)
### 1.4. iostat
Утилита iostat позволяет проанализировать загруженность системы.
![](https://i.imgur.com/MmNxvIG.png)
Для просмотра данных в удобном формате выполните:
![](https://i.imgur.com/vw5rvAQ.png)
Чтобы посмотреть данные по нужному устройству просто укажите это устройство
![](https://i.imgur.com/1Hu4wYF.png)
Можно посмотреть статистику по каждому разделу устройства, тогда надо воспользоваться опцией -p:
![](https://i.imgur.com/oLde3QW.png)
Чтобы утилита автоматически обновляла данные каждую секунду просто добавляется интервал
![](https://i.imgur.com/4bsToip.png)
Чтобы утилита суммировала все данные с момента запуска операционной системы, то можно использовать опцию -y. Но работает она только если задан интервал
![](https://i.imgur.com/lFAXrOB.png)
#### 1.4.1. Профилирование нагрузки на файловую систему с помощью iostat
Разделы в системе:
![](https://i.imgur.com/REvZCcJ.png)
Swap расположен в:
![](https://i.imgur.com/eDPkZCA.png)
Получаем лог файла:
![](https://i.imgur.com/qyxMQET.png)
Ввод лога:
![](https://i.imgur.com/687afnF.png)
### 1.5. mpstat
#### 1.5.1 Отображение всей информации
Опция «-А», показывает всю информацию, которая может быть отображена с помощью команды mpstat, как показано ниже. 
![](https://i.imgur.com/63IUdW4.png)
#### 1.5.2 Показать статистику CPU индивидуального процессора (или) ядра
Параметр «-P ALL», покажет все индивидуальные процессоры или ядра вместе со статистикой:
![](https://i.imgur.com/of4cqiS.png)
#### 1.5.3 Для отображения статистически о конкретном CPU или ядре, используйте опцию «-P», как показано ниже
![](https://i.imgur.com/0Q7d73E.png)
#### 1.5.4 Можно выполнить «mpstat -V» чтобы показать версию утилиты:
![](https://i.imgur.com/xhSyreL.png)
#### 1.5.5 Дополнительные опции
![](https://i.imgur.com/wIQXCMP.png)
### 1.6. vmstat
vmstat предоставляет краткую информацию о различных ресурсах системы и связанных с ними неполадках, приводящих к снижению производительности.
![](https://i.imgur.com/zCeW0vU.png)
Для получения информации о работе процессора удобнее использовать команду vmstat, а не iostat, так как ее построчный вывод проще анализировать, а в случае, когда к системе подключено много дисков, ее вывод намного менее объемный.
vmstat -a
(active/inactive memory) - активная/неактивная память
vmstat -f
![](https://i.imgur.com/2ERjAzl.png)
(number of forks since boot) - количество вилок с момента загрузки
![](https://i.imgur.com/BWzI8Rk.png)
vmstat -d
(disk statistics) - статистика диска
![](https://i.imgur.com/L85wbtV.png)
vmstat -D
summarize disk statistics) - (общая статистика диска)
![](https://i.imgur.com/4NhuFvP.png)
vmstat --help
Все флаги vmstat
![](https://i.imgur.com/kWu4CqP.png)
vmstat 1 - 60 - через какое количество секунд выводить информацию
![](https://i.imgur.com/xcsi36k.png)
### 1.7. Утилита/команда " w "
Выводит краткую сводку о работающих в системе в данный момент пользователях (залогиненных пользователях), а также о том, какие процессы у них запущены
![](https://i.imgur.com/9ufXVCJ.png)
#### h
Не выводить заголовок у таблицы.
![](https://i.imgur.com/LrhmVk8.png)
#### u
Игнорировать имена пользователей при определении времени текущего процесса и времени CPU.
![](https://i.imgur.com/q2PUIVT.png)
#### s
Использовать сокращенный формат вывода. Не выводить колонки JCPU и PCPU.
![](https://i.imgur.com/6Ccxfam.png)
#### f
Включить или выключить вывод поля from, которое соответствует имени удаленного хоста (remote hostname). В зависимости от дистрибутив
![](https://i.imgur.com/31PY4PK.png)
#### i
Выводить в поле from IP-адрес вместо имени хоста (hostname), если это возможно.
![](https://i.imgur.com/2iUXAv9.png)
#### o
Выводить информацию в старом формате. Время, которое меньше 1 минуты, не выводится.
![](https://i.imgur.com/nIixY5S.png)
#### V
Вывести версию утилиты w.
![](https://i.imgur.com/q51O9yC.png)
### 1.8. Утилита htop
htop предназначена для вывода на терминал списка запущенных процессов и информации о них
Установка:
![](https://i.imgur.com/sFwk7j9.png)
Команду htop можно запускать как с правами обычного пользователя:
![](https://i.imgur.com/VwE8T3k.png)
Для установки времени обновления htop используется опцию -d после которой указывается время обновления в десятой части секунд.
Например, чтобы программа обновляла окно каждую секунду:
![](https://i.imgur.com/XhgqM6g.png)
Для вывода процессов в виде дерева используется опция -t:
![](https://i.imgur.com/pI0giZI.png)
## 2. Установка и настройка сервера SSH в Linux
### 2.1. Установка пакетов SSH
![](https://i.imgur.com/0lDausk.png)
По завершению установки, автоматически будет запущен SSH-сервер в режиме демона. Это можно проверить командой:
![](https://i.imgur.com/oucdzVO.png)
### 2.2. Настройка SSH
nano /etc/ssh/sshd_config
![](https://i.imgur.com/5spx2wV.png)
Если оставить номер порта стандартным, т. е. 22, то велика вероятность, что он будет слишком часто сканироваться роботами.
![](https://i.imgur.com/hbi3mgJ.png)
Если используются только адреса IPv4, то очень рекомендуется установить для параметра AddressFamily значение inet:
![](https://i.imgur.com/KnIImYE.png)
Поскольку реализация openSSH позволяет работать с протоколами SSH1 и SSH2, то разумно отключить использование SSH1, т. к. эта версия является устаревшей. Работа по SSH1 крайне не рекомендуется: 
![](https://i.imgur.com/WwjekKW.png)
Очень полезным является параметр, позволяющий проводить авторизацию и шифрование трафика с помощью специальных SSH-ключей:
![](https://i.imgur.com/2Rj6sYA.png)
Следует заметить, что в таком случае серверу необходимо явно указывать, где хранятся открытые ключи пользователей. Это может быть как один общий файл для хранения ключей всех пользователей (обычно это файл etc/.ssh/authorized_keys), так и отдельные для каждого пользователя ключи. Второй вариант предпочтительнее в силу удобства администрирования и повышения безопасности:
![](https://i.imgur.com/9ppcAxi.png)
Важно также отключать парольный доступ:
![](https://i.imgur.com/XZWiU8C.png)
Или же, в случае, если всё-таки необходимо использовать доступ по паролю, то обязательно нужно отключать авторизацию по пустому паролю:
![](https://i.imgur.com/tMBvAI3.png)
Следует также отключать root-доступ:
![](https://i.imgur.com/uSdF9RX.png)
Иногда, когда следует задавать мультисерверную конфигурацию, очень удобно использовать алиасы (Aliases), что позволяет настроить сразу несколько режимов доступа (с разными хостами, портами и т. д.) и использовать их, указывая при этом конкретный алиас:
![](https://i.imgur.com/ES4Dx7X.png)
Для применения сделанных настроек необходим перезапуск SSH-сервера:
![](https://i.imgur.com/k8MzxwA.png)
### 2.3. Настройка и использование клиента SSH
Для подключения по к серверу используется команда
$ ssh user_name@host_name
где user_name – имя пользователя в системе, host_name – имя узла, к которому производится подключение
Вход по паролю:
![](https://i.imgur.com/aUFhueO.png)
### 2.4. Для генерации ключей используется утилита ssh-keygen:
На другом linux создаю ssh-ключи:
![](https://i.imgur.com/A97GLiQ.png)
Далее добавил публичный ключ серверу в файл ~/.ssh/authorized_keys
Пробую подключиться:
![](https://i.imgur.com/wZoysnF.png)
Получилось
### 2.5. Создание SSH-ключей на Windows с PuTTYgen
Выберите тип ключа SSH2-RSA и нажмите Generate.
![](https://i.imgur.com/RHU3Q4O.png)
После завершения создания ключей открытый ключ выводится на экран, закрытый хранится в памяти приложения. Чтобы сохранить эти ключи нажмите Save public key и Save private key. Укажите расположение файлов с ключами. 
![](https://i.imgur.com/Su82IKB.png)
Теперь открытый ключ необходимо скопировать на сервер в файл authorized_keys. 
![](https://i.imgur.com/jjd3qLk.png)
При запуске PuTTY укажите путь к закрытому ключу на локальном компьютере. Для этого во вкладке Connections → Auth выберите необходимый путь.
![](https://i.imgur.com/SEjJrNw.png)
Вводим данные:
![](https://i.imgur.com/dn2MgbL.png)
Получилось:
![](https://i.imgur.com/rClpJRg.png)
## 3. Установка и настройка SSH-authorized_keys
### 3.1. Создание ключей SSH
![](https://i.imgur.com/9ygs2ms.png)
### 3.2. Копирование открытого ключа на сервер
Я не догонял до этого времени зачем нужен алиас, а оказывается удобная штука :)
Не надо думать как написать правильно порт для команды ssh-copy-id или пользователя:
![](https://i.imgur.com/6xaL9V0.png)
### 3.3. Аутентификация на сервере с использованием ключей SSH
Как видно, сервер не потребовал пароль, а сразу впустил (ну по ключу, понятное дело):
![](https://i.imgur.com/bDIWyxp.png)
### 3.4. Отключение аутентификации с помощью пароля на сервере
![](https://i.imgur.com/abVC9pt.png)
![](https://i.imgur.com/o39oHSB.png)
## 4. Сбор информации о Linux и WGET
### 1.Базовый сбор информации
Начнём со сбора информации о дистрибутивах
![](https://i.imgur.com/hCBObG3.png)
uname -a
![](https://i.imgur.com/BoXns4I.png)
команда whoami выводит имя пользователя для эффективного идентификатора пользователя. Другими словами, он отображает имя текущего вошедшего в систему пользователя.
![](https://i.imgur.com/q7ucTwR.png)
Команда uptime покажет, когда и сколько система работала и соответственно, если она работала без перерыва 3 года, то злоумышлинник может воспользоваться старыми уязвимостями для получения доступа или внедрения кода.
![](https://i.imgur.com/agoI9rR.png)
Давайте посмотри права директории /home
![](https://i.imgur.com/VpgbAsC.png)
Чтобы ограничить права другим пользователям делаем следующее
![](https://i.imgur.com/WQ7J0V7.png)
ip neigh - показывает с какими компьютерами происходит обмен данными
![](https://i.imgur.com/BtTm0dd.png)
Показал другую kali, через которую устанавливали ssh
sudo ss -tlnp - показывает какие сервисы и с какими портами запущены
![](https://i.imgur.com/RQ3KWKm.png)
sudo -l - позволяет нам понять, что есть в этом машинки и что пользователь может
![](https://i.imgur.com/QPT4KkZ.png)
### 2.Суидные файлы
setuid и setgid являются флагами прав доступа в Unix, которые разрешают пользователям запускать исполняемые файлы с правами владельца или группы исполняемого файла. В Unix-подобных системах приложение запускается с правами пользователя, вызвавшего указанное приложение. Это обеспечивает дополнительную безопасность, так как процесс с правами пользователя не сможет получить доступ на запись к важным системным файлам, например /etc/passwd, который принадлежит суперпользователю root.
В системе могут быть различные закладки
![](https://i.imgur.com/OocPI4j.png)
Базовый сбор информации может происходить не только вручную, давайте разберемся
![](https://i.imgur.com/FwuZZtM.png)
далее необходимо разаархивировать вводим следующее:
![](https://i.imgur.com/zT5hGBJ.png)
затем давайте проверим контрольную сумму с сайта и то, что мы скачали
![](https://i.imgur.com/b11hvmk.png)
Контрольная сумма совпала
далее переходим в директорию lynis
![](https://i.imgur.com/jbGOMbh.png)
далее запускаем утилиту lynis
![](https://i.imgur.com/VOH9VWE.png)
нажимаем Enter
![](https://i.imgur.com/tnw9jT6.png)
Это вывод report-отчёт
![](https://i.imgur.com/8AbOJhy.png)
ещё можно набрать команду
![](https://i.imgur.com/r6qERM8.png)
### 3. Проверка целостностей пакетов
dpkg — это программное обеспечение, являющееся основой системы управления пакетами в Debian и ряде других операционных систем, основанных на Debian, например Ubuntu. dpkg используется для установки, удаления, и получения информации о .deb пакетах.
для просмотра пакетов в системе
![](https://i.imgur.com/J5ekcez.png)
для просмотра установленных утилит необходимо набрать следующую команду
![](https://i.imgur.com/KQY3dDN.png)
она покажет все штатные утилиты
например, рассмотрим утилиту /bin/dir
/bin/dir --help
которая позволяет нам работать по сути как ls
![](https://i.imgur.com/GDIVZr7.png)
что будет, если мы поменяем /bin/false на /bin/dir, тем самым сымитируем подмену или правку кода программы
сделаем backup sudo mv /bin/dir /bin/dir.bak
![](https://i.imgur.com/RxaVYKz.png)
![](https://i.imgur.com/egqNMhI.png)
вводим команду sudo cp /bin/false /bin/dir
![](https://i.imgur.com/CByz4K9.png)
теперь при запуске dir мы можем увидеть, что ничего не будет происходить, кроме как если посмотреть логическую ложь, то будет ошибка
![](https://i.imgur.com/UojIryn.png)
Чтобы проверить этот пакет, необходима утилита debsums:
![](https://i.imgur.com/HuyIXfk.png)
debsums служит,  в  первую  очередь,  для  нахождения  изменённых  администратором  файлов установленных в системе пакетов или повреждённых файлов из-за некачественного носителя и в какой-то мере используется в качестве инструмента обеспечения безопасности.
Используем утилиту для поиска проблемных пакетов:
![](https://i.imgur.com/v4FZqNK.png)
можно также проверить утилитой
![](https://i.imgur.com/hBteKIF.png)
Если кто-то смог проникнуть в систему и что-то деал в ней нам поможет команда find
Например, если нам надо рассмотреть какой либо инцидент:
![](https://i.imgur.com/eO7dVmq.png)
можно указать через пробел, но тогда будет сложно работать с выводом данных:
![](https://i.imgur.com/M1M7XAa.png)
Далее если надо сделать по одному конкретному пользователю необходиму следующие:
![](https://i.imgur.com/bQONJFq.png)
Затем желательно это отсортировать
![](https://i.imgur.com/ZiINTwJ.png)
отсортируем данный файл с помощью команды:
![](https://i.imgur.com/mHZsihk.png)
![](https://i.imgur.com/qy7yGqN.png)
## 5. Переменные окружения в Linux .bashrc, .bash_profile и .bash_login
### 5.1. Просмотр списка системных переменных окружения
![](https://i.imgur.com/Gj9sb5A.png)
Теперь воспользуемся командой, чтобы раскрыть список всех переменных окружения.
![](https://i.imgur.com/keqPOou.png)
### 5.2. Запуск команд с указанием нового значения переменной окружения
![](https://i.imgur.com/YpzgQie.png)
#### 5.2.1. Установка и удаление локальных переменных окружения
Установка
![](https://i.imgur.com/tqLtzuL.png)
Удаление
![](https://i.imgur.com/u5zmUXB.png)
#### 5.2.2. Добавление и удаление пользовательских переменных
![](https://i.imgur.com/aCsvKzs.png)
![](https://i.imgur.com/TBAUCBI.png)
![](https://i.imgur.com/N1OK4vH.png)
#### 5.2.3. Создание и удаление системных переменных окружения
![](https://i.imgur.com/hH31ee5.png)
![](https://i.imgur.com/NqlXctu.png)
