# Linux basics 2 # Практика 2 Администрирование Linux *Выполнил Андреев Игорь Константинович* # Практика 2.1 - Основы мониторинга OS Linux с помощью утилит df, du, free, iostat, mpstat, vmstat, w, htop. ## Часть 1 - команда df ### 1.1 Команда df в linux ### Чтобы посмотреть доступное пространство на всех примонтированных разделах и информацию о них достаточно набрать ![](https://i.imgur.com/auOzUKA.png) ### 1.2 Утилита отображает стандартный набор колонок, но понять в ее выводе что-то с первого раза сложно. Все данные выводятся в килобайтах. Теперь давайте попросим утилиту выводить данные в более читаемом формате ![](https://i.imgur.com/LyjDYom.png) ### 1.3 Если задать опцию -a, вы можете получить информацию обо всех файловых системах известных ядру, которые были смонтированы ![](https://i.imgur.com/Q8zKb6M.png) ### 1.4 Если вы хотите вывести только информацию про реальные файловые системы на жестком диске можно использовать опцию -x чтобы отфильтровать все tmpfs ![](https://i.imgur.com/mMDATJ7.png) ### 1.5 Также можно указать файловую систему, которую нужно отображать ![](https://i.imgur.com/9zM3ZlK.png) ### 1.6 Также можно указать интересующий вас раздел, как вы видели в синтаксисе команды ![](https://i.imgur.com/DmwDax8.png) ### 1.7 С помощью опции -i вы можете посмотреть информацию про состояние inode в вашей файловой системе ![](https://i.imgur.com/ttD92ls.png) ### 1.8 Вывести объем доступного пространства в каталоге ![](https://i.imgur.com/fMW4RfV.png) ## Часть 2 - команда du ### 2.1 При выполнении без какой-либо опции du отображает использование диска для данного файла или каталога и каждого из его подкаталогов в байтах ![](https://i.imgur.com/0147NXk.png) ### 2.2 Вы также можете передать команде du несколько файлов и каталогов в качестве аргументов ![](https://i.imgur.com/T1AC2i3.png) ### 2.3 Параметр -a указывает du сообщать об использовании дискового пространства каждым файлом в каталоге ![](https://i.imgur.com/wmWGdUD.png) ### 2.4 Обычно вы хотите отображать только пространство, занимаемое данным каталогом, в удобочитаемом формате. Для этого используйте параметр -h ![](https://i.imgur.com/rVzul8s.png) ### 2.5 Чтобы сообщить только общий размер указанного каталога, а не подкаталогов, используйте параметр -s ![](https://i.imgur.com/d7vZACp.png) ### 2.6 Параметр -c указывает du сообщать общую сумму. Это полезно, когда вы хотите получить объединенный размер двух или более каталогов ![](https://i.imgur.com/fxIar6b.png) ### 2.7 Если вы хотите отобразить использование диска подкаталогами n-уровня, используйте параметр --max-depth и укажите уровень подкаталогов. Например, чтобы получить отчет о каталогах первого уровня, вы должны использовать ![](https://i.imgur.com/qmhzu56.png) ### 2.8 По умолчанию утилита du повторно использует дисковое пространство, используемое каталогом или файлом. Чтобы узнать очевидный размер файла, используйте переключатель --apparent-size . «Видимый размер» файла — это фактический объем данных в файле ![](https://i.imgur.com/13FCcJb.png) ### 2.9 du также позволяет использовать шаблон оболочки. Например, чтобы получить размер всех каталогов, начинающихся с «Do» в вашем домашнем каталоге ![](https://i.imgur.com/NkeVRRw.png) ### 2.10 Команду du можно комбинировать с другими командами с конвейерами. Например, чтобы напечатать 5 самых больших каталогов внутри каталога /var вы должны передать вывод du в команду sort чтобы отсортировать каталоги по их размеру, а затем передать результат в команду head которая распечатает только 5 верхних каталогов ![](https://i.imgur.com/oFjk5lZ.png) ## Часть 3 - команда free ### Команда free предоставляет информацию об общем объеме физической памяти и памяти подкачки , а также о свободной и используемой памяти ### 3.1 При использовании без какой-либо опции команда free будет отображать информацию о памяти и подкачке в килобайтах. Вывод будет включать три строки, заголовок, одну строку для памяти и одну для свопа ![](https://i.imgur.com/RqMGt6K.png) ### 3.2 По умолчанию команда free показывает информацию о памяти в килобайтах. Чтобы просмотреть информацию в удобочитаемом формате (обычно в мегабайтах и гигабайтах), используйте параметр -h ![](https://i.imgur.com/BB04gMf.png) ### Команда free также позволяет вам указать единицы измерения памяти. Допустимые варианты: - b , --bytes — отображать вывод в байтах. - -kilo — отображать вывод в килобайтах (1 КБ = 1000 байт). - -mega — отображать вывод в мегабайтах. - -giga — Показать вывод в гигабайтах. - -tera — Показать вывод в терабайтах. - k , --kibi — Показать вывод в килобайтах. (1 КБ = 1024 байта). Это единица измерения по умолчанию. - m , --mebi — Показать вывод в мегабайтах. - g , --gibi — Показать вывод в гигабайтах. - -tebi — отображать вывод в теробайтах. - -pebi — Показать вывод в перобайтах. - -si — вместо 1024 используйте --mebi --si 1000. Например, --mebi --si равно --mega ### 3.3 Чтобы отобразить строку, показывающую итоги столбца, используйте параметр -t . Это дает вам сумму памяти и свопа в столбцах total, used и free ![](https://i.imgur.com/Gcl2PVU.png) ### 3.4 Чтобы постоянно отображать информацию о памяти на экране, вызовите free с параметром -s ( --seconds ), за которым следует число, определяющее задержку. Например, чтобы распечатывать информацию о памяти каждые пять секунд: ![](https://i.imgur.com/gztSqII.png) ### 3.5 Чтобы отображать результат определенное количество раз, используйте параметр -c ( --count ) ![](https://i.imgur.com/jVt27OE.png) ### 3.6 Допустим, вы хотите открыть серию приложений и посмотреть, как влияет ваша память. Для тестового вывода мы будем использовать читаемый человеком формат, используя степени 1000 (Gb) вместо 1024 (GiB). Мы собираемся записать в течение 20 секунд, чтобы проанализировать воздействие. Мы собираем данные каждые 5 секунд, и будем делать это за 4 цикла. Вот этот пример, отформатированный для командной строки и ее вывода: ![](https://i.imgur.com/IIwL88X.png) ### 3.7 Если вы хотите постоянно отслеживать использование памяти командой free, но не хотите, чтобы ее вывод загромождал экран, вы можете использовать команду watch вместе с командой free. Это покажет вам только один вывод для команды free, но этот вывод будет изменяться через регулярные промежутки времени ![](https://i.imgur.com/qkGbKEU.png) ## Часть 4 - команда iostat ### 4.1 Устанавливаем пакет sysstat ![](https://i.imgur.com/TsqWTwM.png) ### 4.2 Результат выполнения команды iostat ![](https://i.imgur.com/a1nfn1b.png) ### Опции iostat - с - отобразить только информацию об использовании процессора; - d - отобразить только информацию об использовании устройств; - h - выводить данные в отчёте в удобном для чтения формате; - k - выводить статистику в килобайтах; - m - выводить статистику в мегабайтах; - o JSON - выводить статистику в формате JSON; - p - вывести статистику по устройству и всех его разделам; - x - вывести расширенную статистику; - y - отображать статистику с момента запуска утилиты, а не системы; - z - спрятать информацию о дисках, у которых нет активности. ### Что означает вывод команды - tps - означает количество запросов на чтение или запись к устройству в секунду; - KB_read/s, MB_read/s - количество килобайт или мегабайт, прочитанных с устройства за секунду; - KB_wrtn/s, MB_wrtn/s - количество килобайт или мегабайт записанных на устройство в секунду; - KB_dscd/s, MB_dscd/s - скорость освобождения блоков данных на устройстве, килобайт или мегабайт в секунду; - KB_read, MB_read - общее количество прочитанных данных с диска с момента загрузки системы; - KB_wrtn, MB_wrtn - количество записанных данных с момента загрузки системы; - KB_dscd, MB_dscd - количество освобождённых блоков на диске в результате выполнения операции trim в килобайтах или мегабайтах ### 4.3 Для просмотра данных в удобном формате выполните: ![](https://i.imgur.com/TEa6xpJ.png) ### 4.4 Чтобы посмотреть данные по нужному устройству просто укажите это устройство ![](https://i.imgur.com/uYBDifr.png) ### 4.5 Можно посмотреть статистику по каждому разделу устройства, тогда надо воспользоваться опцией -p ![](https://i.imgur.com/ERypBQI.png) ### 4.6 Чтобы утилита автоматически обновляла данные каждую секунду просто добавьте интервал ![](https://i.imgur.com/onoe1yg.png) ### 4.7 Если вы не хотите чтобы утилита суммировала все данные с момента запуска операционной системы, то можно использовать опцию -y. Но работает она только если задан интервал ![](https://i.imgur.com/Upe3kro.png) ### 4.8 Профилирование нагрузки на файловую систему с помощью iostat #### 4.8.1 Для начала разумно сохранить df -hl для того чтобы понимать о каких разделах идет речь ![](https://i.imgur.com/Gzew70C.png) #### 4.8.2 В отличии от других утилит iostat не очень приспособлен для логирования с учетом времени. Для решения проблемы используем awk. Строчка для получения лог файла: ![](https://i.imgur.com/KOe8Zk9.png) #### 4.8.3 Вывод лога ![](https://i.imgur.com/FfwuFKi.png) #### 4.8.4 Анализ #### В первую очередь обратим внимание на последнюю колонку %util. Хотя бы потому, что большое значение этого параметра (90%-100%) для пользователя выглядит как «сервер висит». У нас sda загружен менее чем на 5%. Круто :) #### пропускная способность колонки rkB/s, wkB/s. Пишем 677 KБ/с #### iops колонки r/s, w/s — ~10 запросов в секунду ## Часть 5 - mpstat ### mpstat — отчет о использовании процессоров. Команда mpstat пишет в стандартный вывод на экран о каждом имеющемся процессоре, 0-й процессор будет выведен на первое место. Параметр «interval» определяет количество времени в секундах между каждым отчетом. Значение 0 (или без параметров) показывает статистику о процессорах и отчетность будет представляться с момента запуска системы (загрузки) ### 5.1 Отображение всей информации ![](https://i.imgur.com/VyoERXg.png) ### 5.2 Показать статистику CPU индивидуального процессора (или) ядра ![](https://i.imgur.com/bL3y48p.png) ### 5.3 Для отображения статистически о конкретном CPU или ядре, используйте опцию «-P» ![](https://i.imgur.com/1pY8stO.png) ### 5.4 Можно выполнить «mpstat -V» чтобы показать версию утилиты ![](https://i.imgur.com/b0iEl9r.png) ## Часть 6 - vmstat ### 6.1 Результат выполнения vmstat ![](https://i.imgur.com/ORRyntM.png) ### Результат предоставляет краткую информацию о различных ресурсах системы и связанных с ними неполадках, приводящих к снижению производительности ### Отчет команды vmstat содержит статистическую информацию о нитях ядра, находящихся в очереди выполнения и ожидающих запуска, а также об оперативной памяти, подкачке, дисках, прерываниях, системных вызовах, переключении контекста и работе процессора. В информации о процессоре указывается доля времени, в течение которой процессор работал в пользовательском режиме, системном режиме, простаивал и ожидал завершения операции дискового ввода-вывода ### Для получения информации о работе процессора удобнее использовать команду vmstat, а не iostat, так как ее построчный вывод проще анализировать, а в случае, когда к системе подключено много дисков, ее вывод намного менее объемный. Приведенный ниже пример иллюстрирует применение vmstat для обнаружения программ, которые потребляют слишком много ресурсов CPU. ### 6.2 vmstat -a - активная/неактивная память ![](https://i.imgur.com/Lvv5jas.png) ### 6.3 vmstat -f (number of forks since boot) - количество fork'ов с момента загрузки ![](https://i.imgur.com/t7MKRWg.png) ### 6.4 vmstat -d (disk statistics) - статистика диска ![](https://i.imgur.com/0U0H4DA.png) ### 6.5 vmstat -D (summarize disk statistics) - (общая статистика диска) ![](https://i.imgur.com/aRliiWH.png) ## Часть 7 - утилита/команда w ### Выводит краткую сводку о работающих в системе в данный момент пользователях (залогиненных пользователях), а также о том, какие процессы у них запущены ### 7.1 Результат выполнения команды w ![](https://i.imgur.com/PUp7c51.png) ### В таблице для каждого пользователя выводятся следующие поля: - USER — имя пользователя. - TTY — название терминала. - FROM — название удаленного компьютера или IP-адрес. - LOGIN — время входа в систему. - IDLE — время бездействия. - JCPU — время, использованное всеми процессами, подключенными к tty. Оно не включает завершенные фоновые задания, но включает фоновые задания, работающие в данный момент. - PCPU — время, использованное текущим процессом, который указан в поле WHAT. - WHAT — текущий процесс (командная строка текущего процесса). ### 7.2 w -h Не выводить заголовок у таблицы ![](https://i.imgur.com/nlR9xKX.png) ### 7.3 w -u Игнорировать имена пользователей при определении времени текущего процесса и времени CPU ![](https://i.imgur.com/zlhMOjH.png) ### 7.4 w -s Использовать сокращенный формат вывода. Не выводить колонки JCPU и PCPU ![](https://i.imgur.com/Zchhzwt.png) ### 7.5 w -f Включить или выключить вывод поля from, которое соответствует имени удаленного хоста (remote hostname). В зависимости от дистрибутива Linux (версии утилиты w), поле from может выводиться или не выводиться по умолчанию ![](https://i.imgur.com/nOBh4vU.png) ### 7.6 w -i Выводить в поле from IP-адрес вместо имени хоста (hostname), если это возможно ![](https://i.imgur.com/GSkHIWq.png) ### 7.7 w -o Выводить информацию в старом формате. Время, которое меньше 1 минуты, не выводится ![](https://i.imgur.com/J7KWSFG.png) ### 7.8 w -V Вывести версию утилиты w ![](https://i.imgur.com/MEJAAEr.png) ## Часть 8 - утилита htop ### 8.1 Установка утилиты ![](https://i.imgur.com/0ShHP3p.png) ### 8.2 Результат выполнения htop ![](https://i.imgur.com/MWFFCoh.png) ### В самом верху показана нагрузка на каждое ядро центрального процессора (цифры от 1 до 12) - Mem — это общее количество оперативной памяти и используемая память. - Task — обобщённая статистика по процессам - Swp — уровень занятости файла подкачки (если он есть) - Load average — средняя загрузка центрального процессора - Uptime — время работы операционной системы с момента последней загрузки ### Значение столбцов htop *PID* Идентификатор процесса. *USER* Имя пользователя владельца процесса или ID если имя не может быть определено. *PRI* Приоритет — внутренний приоритет ядра для процесса, обычно это просто значение nice плюс двадцать. Отличается для процессов имеющих приоритет выполнения real-time. *NI* NICE значение процесса от 19 (низкий приоритет) до -20 (высокий приоритет). Более высокое значение означает, что процесс «приятный» для других и позволяет им иметь более высокий приоритет выполнения. *VIRT* Размер виртуальной памяти процесса (M_SIZE). *RES* Размер резидентного набора (text + data + stack) процесса (т.е. размер используемой физической памяти процесса, M_RESIDENT). *SHR* Размер общих страниц процесса (M_SHARE). *S* STATE, состояние процесса, может быть: - S для спящих (в простое) - R для запущенных - D для сна диска (бесперебойный) - Z для зомби (ожидает родитель считает его статус выхода) - T для отслеживания или приостановки (т. е. от SIGTSTP) - W для подкачки *CPU%* Процент процессорного времени, которое процесс использует в данный момент. *MEM%* Процент памяти, используемой процессом в данный момент (в зависимости от размера резидентной памяти процесса, см. M_RESIDENT выше). *TIME+* Время, измеренное в часах, указывает на то, сколько процесс провёл в пользовательском и системном времени. *Command* Полная командная строка процесса (то есть имя программы и аргументы) ### 8.3 Для установки времени обновления htop используйте опцию -d после которой укажите время обновления в десятой части секунд. *Например, чтобы программа обновляла окно каждую 1/10 секунды:*`sudo htop -d 1` *Чтобы программа выводила новые данные раз в 5 секунд:*`sudo htop -d 50` ![](https://i.imgur.com/t1hVfkI.png) ![](https://i.imgur.com/c9MMMxx.png) ### 8.4 **Как вывести процессы в виде дерева** *Для вывода процессов в виде дерева используйте опцию -t:*`sudo htop -t` ![](https://i.imgur.com/dXF3XuP.png) ### # Практика 2.2 - Установка и настройка сервера SSH в Linux ## Часть 1 - Установка пакетов SSH ### 1.1 Устанавливаем все требуемые утилиты ![](https://i.imgur.com/XlkvYt3.png) ### 1.2 Проверяем запуск в режиме демона ![](https://i.imgur.com/3XcfNoP.png) ### 1.2 Конфиг sshd ![](https://i.imgur.com/VdPackP.png) ### В первую очередь следует обратить внимание на следующие параметры: Port, AddressFamily, ListenAddress. Первый глобально задаёт номер порта, через который будет работать соединение и если оставить его стандартным, т. е. 22, то велика вероятность, что он будет слишком часто сканироваться роботами ### Поскольку реализация openSSH позволяет работать с протоколами SSH1 и SSH2, то разумно отключить использование SSH1, т. к. эта версия является устаревшей. Работа по SSH1 крайне не рекомендуется: Protocol 2 ### Второй параметр задаёт семейство используемых IP-адресов — IPv4 и IPv6. Если, к примеру, используются только адреса IPv4, то очень рекомендуется установить для параметра - AddressFamily значение inet: - AddressFamily inet - Для адресов семейства IPv6 используется значение inet6. ### Параметр ListenAddress позволяет задавать порты для отдельных сетевых интерфейсов: - ListenAddress 10.24.205.75:2123 - ListenAddress 10.24.205.76:2124 ### Поскольку реализация openSSH позволяет работать с протоколами SSH1 и SSH2, то разумно отключить использование SSH1, т. к. эта версия является устаревшей. Работа по SSH1 крайне не рекомендуется: Protocol 2 ### Очень полезным является параметр, позволяющий проводить авторизацию и шифрование трафика с помощью специальных SSH-ключей: `PubkeyAuthentication yes` ### Следует заметить, что в таком случае серверу необходимо явно указывать, где хранятся открытые ключи пользователей. Это может быть как один общий файл для хранения ключей всех пользователей (обычно это файл `etc/.ssh/authorized_keys`), так и отдельные для каждого пользователя ключи. Второй вариант предпочтительнее в силу удобства администрирования и повышения безопасности: `AuthorizedKeysFile etc/ssh/authorized_keys # Для общего файлаAuthorizedKeysFile %h/.ssh/authorized_keys # Файл -> пользователь` ### Во втором варианте благодаря шаблону автоподстановки с маской «%h» будет использоваться домашний каталог пользователя. ### Важно также отключать парольный доступ: `PasswordAuthentication no` ### Или же, в случае, если всё-таки необходимо использовать доступ по паролю, то обязательно нужно отключать авторизацию по пустому паролю: `PermitEmptyPasswords no` ### Для указания разрешённых или запрещённых пользователей и групп служат директивы DenyUsers, AllowUsers, DenyGroups, и AllowGroups. Значениями для них являются списки имён, разделяемых пробелами, например: ``` DenyUsers fred john AllowGroups root clients administrators ``` ### Следует также отключать root-доступ: `PermitRootLogin no` ### Иногда, когда следует задавать мультисерверную конфигурацию, очень удобно использовать алиасы (Aliases), что позволяет настроить сразу несколько режимов доступа (с разными хостами, портами и т. д.) и использовать их, указывая при этом конкретный алиас: `$ ssh alias_name` Настройки для алиасов хранятся либо глобально в `/etc/ssh/ssh_config`, либо раздельно для пользователей в `~/.ssh/config`. Здесь нужно не спутать с `ssh_config!` Пример: ``` Host your_alias Port your_ssh_port HostName 0.0.0.0 # IP или имя хоста User your_user_name ``` ### Для применения сделанных настроек необходим перезапуск SSH-сервера и рекомендации по настройке ## Часть 2 - Настройка и использование клиента SSH ### 2.1 Для подключения по к серверу используется команда $ ssh user_name@host_name ![](https://i.imgur.com/8fzJJiK.png) ### В случае авторизации по ключу, должна быть предварительно сгенерирована пара SSH-ключей — открытый, который хранится на стороне сервера, обычно в файле .ssh/authorized_keys в домашнем каталоге пользователя, и закрытый — используется для авторизации клиента и хранится, как правило, в каталоге .ssh/ домашней директории пользователя. Открытый ключ представляет собой «цифровой слепок» закрытого ключа благодаря которому сервер «знает», кто «свой», а кто «чужой» ## Часть 3 - генерация ключа ### 3.1 Для генерации ключей используется утилита ssh-keygen ![](https://i.imgur.com/LKgierD.png) ### 3.2 После чего будут сгенерированы открытый ключ id_rsa.pub и закрытый — id_rsa. Теперь нужно скопировать открытый ключ, т. е. «слепок» закрытого на сервер. Проще всего этого можно добиться командой ssh-copy-id -i ~/.ssh/id_rsa.pub user_name@host_name ### Теперь можно выполнить подключение командой ssh и запустить защищённый сеанс удалённого управления. ### Важно заметить, что использование сгенерированных `openSSH`-ключей несовместимо с PPK-форматом, используемым по-умолчанию в таких комплексах как PuTTY. Поэтому необходимо конвертировать имеющиеся `openSSH`-ключи в формат PPK. Удобнее всего это делать с помощью утилиты **PuTTY – puttygen.exe.** ## Часть 4 - задания ### 4.1 Отлючаем доступ по root пользователю ![](https://i.imgur.com/IbBFFZT.png) ### 4.2 Меняем порт по умолчанию ![](https://i.imgur.com/kwhhdGV.png) ### 4.3 Подключение к Linux через putty ![](https://i.imgur.com/SzKfTNh.png) ![](https://i.imgur.com/8vRiKN3.png) ![](https://i.imgur.com/ubOipbf.png) ![](https://i.imgur.com/MlvoZd9.png) # Практика 2.3 - Установка и настройка SSH authorized_keys ## Часть 1 - Создание ключей SSH ### 1.1 Создаём ключи на windows ![](https://i.imgur.com/Mi4FUZF.png) ![](https://i.imgur.com/KFF6VXV.png) ### 1.2 Создаём временную папку для ключа ![](https://i.imgur.com/cPmm2Gc.png) ### 1.3 Отправляем ключ ![](https://i.imgur.com/CJAi9jW.png) ### 1.4 Перекидываем ключ в authorized_keys ![](https://i.imgur.com/35ykJ8N.png) ### 1.5 Выбираем приватный ключ ![](https://i.imgur.com/scRLtkb.png) ### 1.6 Подключаемся ![](https://i.imgur.com/hwLUIy6.png) ## Часть 2 - Отключение аутентификации с помощью пароля на сервере ### 2.1 Изменяем конфиг ![](https://i.imgur.com/tMhECsY.png) ### 2.2 Не удаётся подключиться по паролю! ![](https://i.imgur.com/hSoH2uc.png) # Практика 2.4 - Сбор информации о Linux и WGET ## Часть 1 - Базовый сбор информации ### 1.1 Начнём со сбора информации о дистрибутивах ![](https://i.imgur.com/i9w7b03.png) ### 1.2 По ядру linux можно понять следующее ![](https://i.imgur.com/l5J4L87.png) ### 1.3 whoami, uptime ![](https://i.imgur.com/7RsROf6.png) ### 1.4 Посмотрим права директории /home ![](https://i.imgur.com/HE8Pupo.png) ### 1.5 Чтобы ограничить права другим пользователям делаем следующее ![](https://i.imgur.com/zLSARYP.png) ### 1.6 Посмотрим с какими устройствами идёт обмен данными ![](https://i.imgur.com/TUusjjQ.png) ### 1.7 Посмотрим какие сервисы и с какими портами запущены ![](https://i.imgur.com/CfIIccj.png) ### 1.8 Посмотрим, что пользователь может ![](https://i.imgur.com/HAlt5JX.png) ### в данном случае мы можем запускать любые команды от любого user ## Часть 2 - Суидные файлы ### 2.1 В системе могут быть различные закладки ![](https://i.imgur.com/ifUfPx6.png) ### 2.2 Скачиваем утилиту lynis ![](https://i.imgur.com/daCznYm.png) ### 2.3 Разархивируем её ![](https://i.imgur.com/q8DCbPR.png) ### 2.4 Переходим в директорию ![](https://i.imgur.com/j20kS64.png) ### 2.5 Запускаем и жмём enter ![](https://i.imgur.com/S7zsdqd.png) ### 2.6 Результат аудита lynis ![](https://i.imgur.com/4uiegcA.png) ## Часть 3 - Проверка целостностей пакетов ### 3.1 Для просмотра пакетов в системе dpkg -l ![](https://i.imgur.com/3Uw4wWu.png) ### 3.2 для просмотра установленных утилит dpkg -L coreutils ![](https://i.imgur.com/g1N0FLI.png) ### 3.3 сделаем backup sudo mv /bin/dir /bin/dir.bak и попытаемся сделать подмену вводим команду sudo cp /bin/false /bin/dir ![](https://i.imgur.com/D7VvNAm.png) ### 3.4 dir Больше не работает ![](https://i.imgur.com/PGX8WYb.png) ### 3.5 Устанавливаем debsums ![](https://i.imgur.com/cHUkcWv.png) ### 3.6 Видим наше изменение ![](https://i.imgur.com/CprC3rt.png) ### 3.7 Можно так же воспользоваться dpkg ![](https://i.imgur.com/LH1MPSp.png) ### 3.8 Если кто-то смог проникнуть в систему и что-то деал в ней нам поможет команда find - sudo find / -printf "%T@;%Tc;%p\\n" ![](https://i.imgur.com/KxIgfsG.png) ### 3.9 Далее если надо сделать по одному конкретному пользователю необходиму следующие: - sudo find /home/igor/ -printf "%T@;%Tc;%p\\n" > timeline.csv ![](https://i.imgur.com/ghVSpIa.png) ### 3.10 Затем желательно это отсортировать, например: - sort -rn timeline.csv | less ![](https://i.imgur.com/lnpCmvL.png) ### 3.11 # Пратика 2.5 - Переменные окружения в Linux .bashrc, .bash_profile и .bash_login ## Часть 1 - Просмотр списка системных переменных окружения ### 1.1 Проверяем наличие coreutils, при отсутствии устанавливаем ![](https://i.imgur.com/gojcNj4.png) ### 1.2 Посмотрим переменные окружения ![](https://i.imgur.com/dgZrkwD.png) - 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 - Запуск команд с указанием нового значения переменной окружения ### 2.1 Можно самостоятельно на время изменить опцию любого параметра, чтобы запустить с ним определенную программу или выполнить любые другие действия. В таком случае в консоли вам будет достаточно прописать env VAR=VALUE, где VAR — название переменной, а VALUE — ее значение, например, путь к папке /home/igor. ![](https://i.imgur.com/MjXtJfo.png) ### 2.2 Установка и удаление локальных переменных окружения ### Из проделанного выше вы уже знаете о том, что локальные параметры не сохраняются в файлах и активны только в рамках текущей сессии, а после ее завершения удаляются. Если вас интересует собственное создание и удаление таких опций, сделать нужно следующее: ### Запустите «Терминал» и напишите команду `VAR=VALUE`, после чего нажмите на клавишу `Enter`. Как обычно, VAR — любое удобное название переменной одним словом, а `VALUE` — значение. ![](https://i.imgur.com/XGSSHka.png) ### 2.3 Проверяем выполнение ![](https://i.imgur.com/XcW9ox6.png) ### 2.4 Удаляем с помощью команды unset и проверяем удаление ![](https://i.imgur.com/4EEPoBl.png) ### 2.5 Изменение пользовательских переменных происходит с помощью изменения файла bashrc ![](https://i.imgur.com/agUkyDC.png) ### 2.6 Перезапускаем файл с помощью source .bashrc ![](https://i.imgur.com/CF9MQ2T.png) ### 2.7 Создание и удаление системных переменных окружения ### Редактироваться для этого будет файл /ETC/PROFILE, который остается активным даже при удаленном подключении, например, через известный многим менеджер SSH. Открытие конфигурационного элемента осуществляется примерно так же, как и в предыдущем варианте nano /etc/profile ![](https://i.imgur.com/gGMV0C9.png) ### 2.8 Перезапускаем и проверяем ![](https://i.imgur.com/oa1J1kg.png)