# Занятие 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)