# **Практическая работа № 1.1** **"Работа в командной строке"** Задачи 1-7 ![1-7](https://hackmd.io/_uploads/BybV2eGu6.png) **whoami** выводит текущего пользователя сессии **cd /** перемещение в корневой каталог файловой системы. То есть, вы переходите в самый верхний уровень структуры каталогов. **ls** выводит содержимое текущего каталога. Если вы выполняете ls после cd /, то это будет содержимое корневого каталога. **type ls** показывает, какая команда ls вызывается. В данном случае, это команда ls из системного бинарного файла (обычно /bin/ls). **type cd** показывает, какая команда cd вызывается. В большинстве случаев, cd - это встроенная команда оболочки. **ls /home** выводит содержимое каталога /home, который обычно содержит домашние каталоги пользователей. **cd /tmp** перемещение в каталог /tmp, который обычно используется для временных файлов. **sudo mkdir /pt** создание нового каталога с именем pt в корневом каталоге с использованием привилегий администратора (sudo). Требует ввода пароля администратора для подтверждения прав на создание каталога. Задачи 8-14 ![8-14](https://hackmd.io/_uploads/ByT7aeGOT.png) **touch 1.txt 2.txt 3.txt** создает три пустых текстовых файла: 1.txt, 2.txt и 3.txt. **nano 1.txt** открывает текстовый редактор nano для редактирования файла 1.txt. **sudo cp -r /pt /pt_copy** копирует каталог /pt в новый каталог /pt_copy. Ключ -r используется для рекурсивного копирования. **tar czvf ptarchive.tar.gz /pt_copy** создает архив с именем ptarchive.tar.gz, включая содержимое каталога /pt_copy. Ключи c - создает архив, z - использует gzip для сжатия, v - выводит подробную информацию, f - указает имя архива. **tar -xzvf ptarchive.tar.gz** распаковывает архив ptarchive.tar.gz. Ключи x - извлекает, z - использует gzip, v - выводит подробную информацию, f - указывает имя архива. **ls ~/usr** выводит содержимое каталога ~/usr (домашний каталог пользователя + /usr). **ls -r ~/usr** выводит содержимое каталога ~/usr в обратном порядке. Дополнение к задаче 9 Чтобы внести изменения/добавить в существующий файл pttext.txt С помощью редактора *nano* 1. Открыть файл в редакторе nano. 2. Использовать стрелки для перемещения к нужному месту. 3. Внесите необходимые изменения/добавления. 4. Нажать Ctrl + O, затем Enter, чтобы сохранить изменения. 5. Нажать Ctrl + X, чтобы выйти из редактора. С помощью редактора *vim* 1. Открыть файл в редакторе vim. 2. Нажать клавишу i, чтобы войти в режим вставки (insert mode). 3. Внесите необходимые изменения/добавления. 4. Нажать Esc, чтобы выйти из режима вставки. 5. Для сохранения изменений ввести :w и нажмите Enter. 6. Чтобы выйти из редактора, ввести :q и нажмите Enter. ![vimnano](https://hackmd.io/_uploads/r13ndiR_6.png) Задачи 15-20 ![15-20](https://hackmd.io/_uploads/HkDkkbzuT.png) **ls -ld /pt** выводит информацию о каталоге /pt, но не его содержимое. Ключ -l предоставляет детализированный вывод, а -d отображает информацию о самом каталоге, а не его содержимом. **ls -l 1.txt 2.txt 3.txt** выводит детализированную информацию о файлах 1.txt, 2.txt и 3.txt. **mv 3.txt /tmp/new_name.txt** переименовывает файл 3.txt в /tmp/new_name.txt и перемещает его в каталог /tmp. **mkdir new_dir && echo "Positive Technologies" > new_dir/new_file.txt && mv -i /tmp/new_name.txt new_dir/new_file.txt** создает новый каталог new_dir, создает в нем новый файл new_file.txt с содержимым "Positive Technologies", а затем перемещает файл new_name.txt из /tmp в new_dir, при этом запрашивая подтверждение (-i) в случае перезаписи. **which ls** выводит путь к исполняемому файлу ls. **which cd** команда which не используется для встроенных команд, таких как cd. Эта команда используется для поиска исполняемых файлов в системе. Задача 20 **ls** команда используется для отображения содержимого текущей директории. Она выводит список файлов и поддиректорий. **nano** текстовый редактор в командной строке. Используется для просмотра и редактирования текстовых файлов. Простой в использовании и поддерживает основные функции редактирования. **rm** (remove) команда для удаления файлов или директорий в файловой системе Linux. Довольна опасна по своей природе, так как удаляет файлы без возможности восстановления. Задачи 21-24 ![21-24](https://hackmd.io/_uploads/rJQHxZMd6.png) **ln -s /tmp/pt /tmp/ptlink** создает символическую (мягкую) ссылку на директорию /tmp/pt с именем ptlink в директории /tmp. **ln -s /dev/null /tmp/null_link** создает символическую (мягкую) ссылку на /dev/null (специальный файл, который игнорирует все записанные в него данные) с именем null_link в директории /tmp. **ln /tmp/1.txt /tmp/1link.txt** создает жесткую ссылку (hard link) с именем 1link.txt на файл /tmp/1.txt в директории /tmp. Жесткая ссылка представляет собой дополнительное имя для существующего файла. **alias mycommand=' cd usr; ls; cd -'** создает псевдоним (alias) с именем mycommand для командной строки. Дополнение к задаче 22 ![simboliclink](https://hackmd.io/_uploads/SJM8H3AdT.png) Задачи 25-29 ![25-29](https://hackmd.io/_uploads/BkuFZWzua.png) **cat > pt_new_file.txt** открывает текстовый редактор и позволяет пользователю ввести текст. Введенный текст сохраняется в файле pt_new_file.txt. Для завершения ввода обычно используется комбинация клавиш Ctrl + D. **rm pt_new_file.txt** удаляет файл с именем pt_new_file.txt. **mkdir pt_dir && rmdir pt_dir** создает новую директорию с именем pt_dir. Затем удаляет эту директорию с помощью rmdir. **rm -r /pt** рекурсивно удаляет директорию /pt и все ее содержимое. **sudo adduser ptuser** добавляет нового пользователя с именем ptuser. Задачи 30-32 ![30-32](https://hackmd.io/_uploads/S1YGXWGuT.png) **sudo passwd ptuser** позволяет установить или изменить пароль для пользователя с именем ptuser с использованием команды passwd. **sudo find /tmp/ -name "*.txt"** ищет файлы с расширением .txt в директории /tmp/ и ее поддиректориях. Команда find используется для поиска файлов и директорий. **ping ya.ru && ping google.com** выполняет последовательно две команды ping. Сначала выполняется ping ya.ru, и если эта команда завершится успешно (возвратит код успешного выполнения), тогда выполняется ping google.com. **ping ya.ru || ping google.com** выполняет две команды ping, но если первая команда (ping ya.ru) завершится неуспешно (возвратит код ошибки), тогда выполняется вторая команда (ping google.com). Используется логический оператор "или". Дополнение к задаче 31 Команда *find* для поиска текстовых файлов Она найдет все файлы с расширением .txt и .docx в указанном каталоге и его подкаталогах. ![txtdocx](https://hackmd.io/_uploads/SJFG5hAOp.png) Команда *grep* для поиска слова "test" в файлах формата txt ![grep](https://hackmd.io/_uploads/rkdd2hAd6.png) # **Практическая работа № 1.2** **“GREP”** 1. ![python](https://hackmd.io/_uploads/B13W46AuT.png) Результатом выполнения этой команды можно увидеть список установленных пакетов, в именах которых содержится строка "python" (например, пакеты, связанные с Python, если они установлены) 2. Вывод команды grep "#" /etc/apache2/sites-available/default-ssl и затем результат команды grep –v "#" /etc/apache2/sites-available/default-ssl ![grep](https://hackmd.io/_uploads/SJBXhpRua.png) Команда извлекает строки из файла default-ssl, в которых содержится символ #. Обычно символ # используется в конфигурационных файлах Apache для обозначения комментариев. Таким образом, эта команда может использоваться для вывода всех комментариев в конфигурационном файле default-ssl. 3. ![grep2](https://hackmd.io/_uploads/rJ8th6R_T.png) Результат выполнения этой команды получится список файлов с расширением ".mp3" в текущем каталоге и его подкаталогах, содержащих строку "ABC" и не содержащих строку "remix" 4. ![AB](https://hackmd.io/_uploads/HkNKTp0Oa.png) *ifconfig | grep -A 4 eth0* - команда использует ifconfig для вывода информации об интерфейсах сети, а затем использует grep -A 4 eth0 для поиска строки, содержащей "eth0", и вывода этой строки вместе с последующими 4 строками (после). Это может быть полезно для получения дополнительной информации об интерфейсе "eth0", такой как IP-адрес, маска подсети и другие настройки. *ifconfig | grep -B 2 UP* - команда также использует ifconfig для вывода информации об интерфейсах сети, а затем использует grep -B 2 UP для поиска строки, содержащей "UP", и вывода этой строки вместе с двумя предыдущими строками (перед). Это может быть полезно для нахождения информации об интерфейсах, которые находятся в состоянии "UP" (включены). 5. ![ifconfig](https://hackmd.io/_uploads/B1kAp6C_a.png) Команда использует grep -C 2 lo для поиска строки, содержащей "lo" (локальный интерфейс loopback), и вывода этой строки вместе с двумя строками перед и двумя строками после (перед и после, обозначается опцией -C). Эта команда может быть полезна для вывода информации об интерфейсе "lo" включая его настройки, IP-адреса и другие параметры, а также две строки перед и две строки после для контекста. 6. ![ifconfig2](https://hackmd.io/_uploads/r1JMRpRO6.png) Команда использует grep -c inet6 для подсчета количества строк, содержащих "inet6" (IPv6 адреса). Результатом выполнения этой команды будет числовым значением, указывающим, сколько строк в выводе ifconfig содержат информацию о IPv6-адресах. 7. ![ifconfig3](https://hackmd.io/_uploads/BJcBAaRdp.png) Команда выполняет поиск строки "main" в файле setup.py и выводит результат с номерами строк, в которых найдено соответствие. Опция -n используется для отображения номеров строк. То есть, команда вернет строки из файла setup.py, в которых содержится "main", и к каждой найденной строке будет приписан её номер. 8. ![ifconfig4](https://hackmd.io/_uploads/rJF_A6R_p.png) Команда выдаст строки из файлов, содержащих "function", включая файлы из всех подкаталогов текущего рабочего каталога. 9. ![ifconfig5](https://hackmd.io/_uploads/HkLprCCO6.png) Команда выполняет поиск строки "test" и затем "positive" в содержимом сжатого файла archive.gz. Сам zgrep автоматически распаковывает файл во временный поток для выполнения поиска, не требуя предварительной распаковки файла вручную. # **Практическая работа № 1.3** **“Философия Vim”** 1-2. ![vim](https://hackmd.io/_uploads/Sybh_ACOT.png) Произведем установку Vim, но в большинстве редакций Linux он установлен по умолчанию из коробки 3. ![vim2](https://hackmd.io/_uploads/SJ8Au0CdT.png) Команда vim newfile позволить нам открыть файл при помощи редактора Vim 4-5. ![vim3](https://hackmd.io/_uploads/By-9Y0A_a.png) ![vim4](https://hackmd.io/_uploads/r1bpKRC_6.png) Используя клавиши-команды, позволить нам выполнять операции с текстов в редакторе * i — в текущем положении курсора a — на следующем символе после текущего положения I — в начале текущей строки A — в конце текущей строки* * h — перемещение влево j — перемещение вниз k — перемещение вверх l — перемещение вправо* *Normal Mode* - режим предназначен для перемещения по тексту, выполнения команд и редактирования содержимого. Как войти: После запуска Vim вы попадаете в командный режим по умолчанию. Действия: В командном режиме вы можете перемещаться по тексту, копировать, вставлять, удалять, отменять изменения и выполнять другие операции. Нажатие клавиши : позволяет вводить команды из командной строки. *Insert Mode* - режим в котором вводится текст прямо в документ, как в обычном текстовом редакторе. Как войти: Из командного режима вы можете войти в режим вставки, нажав клавишу i. Действия: В режиме вставки вы можете свободно вводить и редактировать текст. Для возвращения в командный режим, вы нажимаете клавишу Esc. 6. ![vim5](https://hackmd.io/_uploads/rk0h9AAu6.png) ![vim6](https://hackmd.io/_uploads/rJ1qo0A_p.png) x — удалить символ на позиции курсора d — удалить в заданном командой перемещения направлении. Например, “dl” удаляет один символ справа dd — удалить строку Практическая работа 1 5 D — удалить все символы от положения курсора до окончания строки 7. ![vim](https://hackmd.io/_uploads/B1T3ffQKp.png) # **Практическая работа № 2.1** **“Основы мониторинга OS Linux с помощью утилит df, du, free, iostat, mpstat, vmstat, w, htop”** *df - отображение информации о месте на файловых системах* ![df1](https://hackmd.io/_uploads/rJVy9zQF6.png) ![df2](https://hackmd.io/_uploads/B1ck5GmK6.png) **df -h** отображает информацию о месте на файловой системе с человекочитаемыми размерами (в килобайтах, мегабайтах, гигабайтах и т.д.). Пример: df -h **df -T** выводит информацию о типе файловой системы для каждой точки монтирования. Пример: df -T **df -i** отображает информацию о использовании индексных узлов (inodes) на файловой системе. Пример: df -i **df -a** выводит информацию о всех файловых системах, включая псевдо-файловые системы. Пример: df -a **df -m** показывает размеры в мегабайтах. Пример: df -m **df -x <тип_файловой_системы>** исключает указанный тип файловой системы из вывода. Пример: df -x tmpfs **df -P** использует фиксированную ширину для вывода, что делает его удобным для обработки вывода в скриптах. Пример: df -P *du - оценка использования дискового пространства* ![du1](https://hackmd.io/_uploads/rJ0dnMXta.png) ![du2](https://hackmd.io/_uploads/Hy4tnfXYT.png) ![du3](https://hackmd.io/_uploads/Hk9YnGXKa.png) ![du4](https://hackmd.io/_uploads/rJzqnfXtT.png) ![du5](https://hackmd.io/_uploads/B1tc3zmtT.png) ![du6](https://hackmd.io/_uploads/BkljhGXtT.png) **du -h** отображает размеры каталогов в человекочитаемом формате (в килобайтах, мегабайтах, гигабайтах и т.д.). Пример: du -h **du -s** выводит только общий размер каждого указанного каталога, без подробностей по подкаталогам. Пример: du -s **du -c** подсчитывает и выводит общий размер всех указанных каталогов в конце списка. Пример: du -c **du -a** показывает размер каждого файла в указанных каталогах, включая размер подкаталогов. Пример: du -a **du -d <глубина>** указывает максимальную глубину для анализа подкаталогов. Пример: du -d 2 **du -k** выводит размеры в килобайтах. Пример: du -k **du --exclude=<паттерн>** исключает файлы или каталоги, соответствующие заданному паттерну, из вывода. Пример: du --exclude=*.log *free - используется для отображения информации о использовании оперативной памяти и подкачке* ![free](https://hackmd.io/_uploads/H1CYRzmY6.png) **free** Выводит общее количество свободной и используемой памяти в системе. Пример: free **free -h** отображает размеры памяти в человекочитаемом формате (в килобайтах, мегабайтах, гигабайтах и т.д.). Пример: free -h **free -m** выводит размеры памяти в мегабайтах. Пример: free -m **free -g** выводит размеры памяти в гигабайтах. Пример: free -g **free -s <время_в_секундах>** периодически выводит статистику о памяти с указанным интервалом времени. Пример: free -s 5 (обновление каждые 5 секунд) **free -t** выводит дополнительную строку с общим количеством памяти, включая количество обменной памяти. Пример: free -t **free -l** отображает дополнительную информацию о кэше, буферах и других параметрах. Пример: free -l **iostat - предоставляет информацию о использовании процессора, дисковой подсистеме и устройствах ввода-вывода.** ![iostat1](https://hackmd.io/_uploads/Sk0xW7mYp.png) ![iostat2](https://hackmd.io/_uploads/SJSbW7Xt6.png) **iostat** выводит общую статистику использования процессора, дисков и сети. Пример: iostat **iostat -c** отображает статистику использования процессора, включая процент загрузки по ядрам. Пример: iostat -c **iostat -d** показывает статистику использования дисков, включая показатели о пропускной способности и задержках. Пример: iostat -d **iostat -t** выводит временные метки в столбцах, обеспечивая временную шкалу. Пример: iostat -t **iostat -m** отображает статистику использования дисков в мегабайтах в секунду. Пример: iostat -m **iostat -n** показывает статистику использования сети, включая количество и объем переданных и принятых байт. Пример: iostat -N **iostat -p** позволяет указать идентификаторы дисков для мониторинга, например, iostat -p sda sdb. Пример: iostat -p *mpstat - используется для отображения информации о использовании процессора* ![mpstat1](https://hackmd.io/_uploads/HJKa7XXta.png) ![mpstat2](https://hackmd.io/_uploads/SJk07QQYp.png) **mpstat** выводит статистику использования процессора по всем ядрам. Пример: mpstat **mpstat -P ALL** показывает статистику использования процессора для каждого ядра отдельно. Пример: mpstat -P ALL **mpstat -u** выводит информацию о загрузке процессора, включая процент использования. Пример: mpstat -u **mpstat -V** отображает информацию о версии mpstat. Пример: mpstat -V **mpstat -I <название_прерывания>** выводит информацию о прерываниях для указанного типа (например, таймер, сеть, процессор). Пример: mpstat -I CPU **mpstat -P** <номер_ядра> показывает статистику использования процессора для конкретного ядра. Пример: mpstat -P 1 **mpstat -P ALL -I ALL** комбинирует вывод статистики использования процессора для каждого ядра с информацией о прерываниях. Пример: mpstat -P ALL -I ALL *vmstat - предоставляет информацию о использовании памяти, процессора, ввода-вывода и других системных ресурсов.* ![vmstat1](https://hackmd.io/_uploads/B1QQLXQKp.png) ![vmstat2](https://hackmd.io/_uploads/SkRQIQXFT.png) ![vmstat3](https://hackmd.io/_uploads/HkzNLXQt6.png) **vmstat** выводит статистику использования виртуальной памяти, процессора, блочных устройств и других ресурсов системы с интервалом времени. Пример: vmstat **vmstat 1** обновляет статистику каждую секунду, предоставляя динамические данные об использовании системы. Пример: vmstat 1 **vmstat -s** выводит сводную информацию об использовании ресурсов системы. Пример: vmstat -s **vmstat -m** выводит информацию о использовании памяти по категориям. Пример: vmstat -m **vmstat -d** показывает статистику использования блочных устройств (дисков). Пример: vmstat -d **vmstat -p <процесс_ID>** выводит статистику использования ресурсов для указанного процесса. Пример: vmstat -p sda1 **vmstat -w** <ширина> задает ширину вывода для легкого анализа в скриптах. Пример: vmstat -w 120 (устанавливает ширину вывода в 120 символов) *w - используется для отображения информации о текущих пользователях и их активности на системе* **w** выводит информацию о текущих пользователях, их активности, загрузке системы и т.д. ![w](https://hackmd.io/_uploads/H1YpDmXFp.png) Пример: w **w -h** сокращенный вывод без отображения заголовков. Пример: w -h **w -u** выводит дополнительную информацию, включая статистику использования процессора каждым пользователем. Пример: w -u **w -s** отображает только информацию о загрузке системы, без подробностей о пользователях. Пример: w -s **w -f** показывает дополнительные поля с информацией о засыпающих процессах. Пример: w -f **w -o** позволяет настроить вывод, указывая интересующие поля. Пример: w -o USER,PID,%CPU,%MEM **w -i** показывает время простоя системы, когда не было активности от пользователей. Пример: w -i *htop - представляет улучшенный интерактивный монитор системных процессов в Linux.* **htop** запускает интерактивный монитор процессов с динамическим обновлением. ![htop](https://hackmd.io/_uploads/SJL7sXmtT.png) Пример: htop **htop -u <пользователь>** отображает только процессы, принадлежащие указанному пользователю. ![htop2](https://hackmd.io/_uploads/Sy4Es7mFa.png) Пример: htop -u kali **htop -p <PID>** отображает только конкретный процесс по его идентификатору. ![htop3](https://hackmd.io/_uploads/rJ1SiQmYp.png) Пример: htop -p 1111 **htop -s <поле>** сортирует процессы по указанному полю (например, %CPU, %MEM, TIME+). ![htop4](https://hackmd.io/_uploads/HJiHsmmYT.png) Пример: htop -s TIME **htop -t** отображает дерево процессов, показывая их иерархию. ![htop5](https://hackmd.io/_uploads/H1iUsQmtp.png) Пример: htop -t **htop -C** монохромное отображение. ![htop6](https://hackmd.io/_uploads/HJwvoQmKT.png) Пример: htop -C **htop -d** <задержка> устанавливает задержку между обновлениями в секундах. ![htop7](https://hackmd.io/_uploads/SJ-OiXQFa.png) Пример: htop -d 5 (обновление каждые 5 секунд) # **Практическая работа № 2.2** **“Установка и настройка сервера SSH в Linux”** 1. Произведем установлку сервера и клиента SSH, используя команду apt-get, а затем добавим SSH в автозагрузку, чтобы служба запускалась автоматически при старте ОС ![ssh1](https://hackmd.io/_uploads/Hy5Zuhmta.png) 2. Чтобы отключить root доступ, необходимо в файле /etc/ssh/sshd_config присвоить параметру PermitRoootLogin значение No ![ssh2](https://hackmd.io/_uploads/r1VhdnXYa.png) Необходимо перезапустить сервис, чтобы изменения вступили в силу *sudo systemctl restart sshd** 3. Чтобы заменить порт на другой, необходио в файле sshd_config и изменить знанение Port *Port 2020* ![ssh2](https://hackmd.io/_uploads/HJMGFnQF6.png) И применить изменения перезапустив сервис *sudo systemctl restart sshd* 4. Подключение с машины Windows 10 к серверу по SSH с помощью Putty ![kali](https://hackmd.io/_uploads/SyDZuNEda.png) # **Практическая работа № 2.3** **"Установка и настройка SSH-authorized_keys"** 1. Доступ по ключам в SSH представляет собой метод аутентификации, который использует пару асимметричных ключей: приватный и публичный. Этот метод предоставляет более безопасный способ входа в систему по сравнению с использованием пароля. 2. Настройка файла authorized_keys в SSH позволяет указать список публичных ключей, которые могут использоваться для аутентификации на сервере. Когда пользователь пытается подключиться к серверу по SSH, система проверяет его приватный ключ на клиентской стороне с публичными ключами, указанными в файле authorized_keys 3. Чтобы авторизоваться на сервере по ключам, в том числе и без ввода пароля для начала необходимо настроить на стороне сервера файл /etc/ssh/sshd_config если иное, параметр должен быть изменен *PasswordAuthentication no* Не забыть отключать или проверить параметр root-доступа *PermitRootLogin no* Параметр по пустому паролю тоже должен быть отключен *PermitEmptyPasswords no* И главный параметр позволяющий авторизоваться по ключам должен быть включен *PubkeyAuthentication yes* ![ssh1](https://hackmd.io/_uploads/r1uoirEYp.png) Затем на стороне клиента необходимо сгенерировать ключи, переместим от туда публичный ключ на сервер При помощи команды ssh-keygen мы получим публичный ключ с именен ida_key.pub ![ssh4](https://hackmd.io/_uploads/B1FGxfPt6.png) ![ssh2](https://hackmd.io/_uploads/SkYD3rEKp.png) Данный ключ необходимо разместить на сервере по пути ~/.ssh/authorized_keys Затем протестируем логин на сервер при помощи ключа ![ssh3](https://hackmd.io/_uploads/S1x-pSEYT.png) # **Практическая работа № 2.4** **"Сбор информации о Linux и WGET"** 1. Скачивание файла с помощью утилиты wget Скачаем файл при помощи утилиты с сервера Hetzner ![wget](https://hackmd.io/_uploads/SJWgbL4YT.png) 2. Для создания и проверки контрольной суммы MD5 используются команды Создание контрольной суммы MD5 *md5sum имя_файла > имя_файла.md5* Проверка целостности файла *md5sum -c имя_файла.md5* ![mb5](https://hackmd.io/_uploads/rkmDGI4Ya.png) Создание контрольной суммы SHA-256 *sha256sum имя_файла > имя_файла.sha256* Проверка целостности файла *sha256sum -c имя_файла.sha256* ![sha256](https://hackmd.io/_uploads/ByyeQLVKp.png) 3. Информация о версии ядра *uname -a* Информация о дистрибутиве и версии *lsb_release -a* ![sysinfo1](https://hackmd.io/_uploads/Hks3ELVta.png) Информация о системе и аппаратном обеспечении *lshw* ![sysinfo2](https://hackmd.io/_uploads/SJa64I4tp.png) Информация о процессоре *cat /proc/cpuinfo* Список USB-устройств *lsusb* Список загруженных модулей ядра *lsmod* ![sysinfo3](https://hackmd.io/_uploads/rylJSUEF6.png) # **Практическая работа № 2.5** Файл .bashrc в Linux предназначен для настройки окружения командной оболочки Bash для конкретного пользователя. В этом файле можно устанавливать переменные окружения, настраивать псевдонимы (alias), добавлять директории в переменную PATH и выполнять другие настройки. Открыть файл .bashrc для редактирования *nano ~/.bashrc* Добавить новую переменную окружения *export MY_VARIABLE="Hello, Positive Technologies!"* Установка псевнодима *alias ll="ls -la"* Добавить директорию в переменную PATH export PATH=$PATH:/new/folder Применить изменения командой *source ~/.bashrc* ![bashrc](https://hackmd.io/_uploads/HkHf58Ntp.png) Работа с *.bash_profile* идентична, отличие лишь в том что *.bash_profile* выполняется только при входе в систему, в отличие от .bashrc, который выполняется при каждом запуске новой оболочки Bash. Это позволяет разделять настройки, которые должны выполняться один раз при входе, от тех, которые нужно выполнять при каждом новом запуске оболочки. Работа *.bash_login* будет аналогичной *.bash_profile* но в отличии от *.bash_profile* редко используется в продакшине # **Практическая работа № 3.1** **"Cron"** ![cron](https://hackmd.io/_uploads/HkEhywVFp.png) Проверка состояния того что сервис запущен в системе и работает исправно Создаем и запускаем скрипт из методического пособия ![pwd](https://hackmd.io/_uploads/B1OTumrFp.png) Пусть он запускается каждые 2 минуты ![cron2](https://hackmd.io/_uploads/HJXLmwVtT.png) Не забудем дать права на исполнение скрипта ![chmodx](https://hackmd.io/_uploads/B14FY7SY6.png) Проверим что скрипт исполняется и результат выполняется записывается в лог файл ![cat](https://hackmd.io/_uploads/H1HAK7SFp.png) Напишем четыре скрипта которые будет выполняться в системе с различными целями ![scripts](https://hackmd.io/_uploads/rkF0j7SYa.png) Скрипт backup.sh будет делать резерную копию папки /var/log/apache2 создавая архив tar и размещая его в папку /home/pt/backups с текущий датой на момент исполнения ![scripts2](https://hackmd.io/_uploads/ByWqrfwYT.png) Скрипт sync.sh будет синхронизировать две папки с помощью утилиты rsync, а именно папку /var/log/journals и /home/pt/alljournals ![scripts3](https://hackmd.io/_uploads/ryjhwMPtT.png) Скрипт oldlogs.sh будет брать файлы с логами в папкe apache2 и добавлять к ним приставку old ![scripts4](https://hackmd.io/_uploads/rJ8IiGwFT.png) Скрипт removedwn.sh будет искать и удалять с папки /home/pt/Downloads файлы старше 7 дней ![scripts5](https://hackmd.io/_uploads/B1x96zPY6.png) К примеру скрипт sync.sh будет исполняться один раз в 15 минут постоянно */15 * * * * /home/skripts/sync.sh Скрипт oldlogs.sh один раз в сутки 0 0 * * * /home/skripts/oldlogs.sh Скрипт removedwn.sh 15:00 в среду 0 15 * * 3 /home/skripts/removedwn.sh Скрипт backup.sh 20:00 в воскресенье 0 20 * * 0 /home/skripts/backup.sh ![scripts6](https://hackmd.io/_uploads/BJaSemwFa.png) Открытие редактора crontab *crontab -e* Структура строки cron *МИНУТА ЧАС ДЕНЬ_МЕСЯЦА МЕСЯЦ ДЕНЬ_НЕДЕЛИ КОМАНДА* Просмотр текущих заданий *crontab -l* # **Практическая работа № 3.2** **“SFTP и FileZilla”** 1. Установим SFTP при помощи OpenSSH-Server ![sftp](https://hackmd.io/_uploads/S1qS_Irtp.png) 2. Добавим в /etc/ssh/sshd_config соответствующие строчки для настройки SFTP ![sftp2](https://hackmd.io/_uploads/HJ3i_LSF6.png) Далее необходимо создать группу sftp командой sudo addgroup sftp и добавить туда пользователя sudo usermod -aG sftp pt Не забыть перезагрузить сервис ![sftp4](https://hackmd.io/_uploads/ryvxf7wYa.png) 3. Простериуем авторизацию на сервере с помощью FileZilla ![sftp3](https://hackmd.io/_uploads/HJ0qK8BFp.png) # **Практическая работа № 3.3** **"Сервисы в Linux"** Проверим какие сервисы у нас установлены ![services](https://hackmd.io/_uploads/ByChnUrKa.png) 1. Установим Apache2 ![apache2](https://hackmd.io/_uploads/ryxJAUHtT.png) Добавим apache2 в автозагрузку, чтобы служба запускалась при старте системы, перейдем в катал с веб-севером и выведен html код страницы в терминале ![apache2-3](https://hackmd.io/_uploads/S1GYCUSKp.png) 2. Установим Telnet и попробуем послать запрос к хосту opennet.ru на порту 80 и получим ответ ![telnet](https://hackmd.io/_uploads/ry3BkPBtT.png) 3. Установим FTP ![ftp](https://hackmd.io/_uploads/BJoCkwrF6.png) Настроим FTP сервер в соответствии с нашими потребностями, отредактировов файл */etc/vsftpd.conf* Далее добавим старт данного сериса в автозагрузку при старте системы и проверим его состояние ![ftp2](https://hackmd.io/_uploads/HJhEWwBK6.png) Проверяем что FTP сервер работает с анонимным пользователем ![ftp3](https://hackmd.io/_uploads/Hkv2MvHKT.png) 4. Установим сервис Samba ![samba](https://hackmd.io/_uploads/ByyOmDSYp.png) Отредактируем /etc/samba/smb.conf в соответствии с нашими потребностями, добавив папку John, протестируем правильность конфигурации командой *sudo testparm* Затем добавим сервис в автозагрузку и запустим его ![samba2](https://hackmd.io/_uploads/SkDqHwBYa.png) Проверим работу сервиса на Windows машине ![samba3](https://hackmd.io/_uploads/ryvoBwSKT.png) # **Практическая работа № 4.1** **“Настройка файлового сервера в корпоративной инфраструктуре”** Установим недостающие компоненты из главного репозитория, сделаем резервную копию конфигурационноо файла Samba и создадим директорию public в /samba/ ![samba01](https://hackmd.io/_uploads/S1qnDvHta.png) Установим права на папку public, затем создадим директорию private для приватного доступа пользователей ![samba02](https://hackmd.io/_uploads/H1_RdPSY6.png) Создадим группу smbgrp и добавим туда пользователя user1 ![samba03](https://hackmd.io/_uploads/HJe3tDSYT.png) Измен группу, которой принадлежит приватная директория И не забудем установить пароль для пользователя user1 И отредактируем файл smb.conf добавив соответствующие строчки для формирования папок и доступа ![samba04](https://hackmd.io/_uploads/Hkh25wBYT.png) Добавим правила ACCEPT для портов 445, 139, 137, 138 из нашего локального диапазона 192.168.10.0/24 и проверим командой iptables -l как это все записалось ![iptables](https://hackmd.io/_uploads/HyknE7wKa.png) Далее необходимо сохранить внесенные изменения после перезагрузки, используем команду iptables-save ![iptables2](https://hackmd.io/_uploads/H1g487Dtp.png) И затем установим iptables-persistent который далее необходимо включить автозагрузку и запустить ![iptables3](https://hackmd.io/_uploads/rJo8Y7PKT.png) Проверим работу папки public ![samba05](https://hackmd.io/_uploads/rkiS2wrKT.png) Проверяем работу приватной папки private закрытой логином user1 и паролем ![samba06](https://hackmd.io/_uploads/Hy4qpDrt6.png) Внесем изменения в файл /etc/samba/smb.conf Для добавление Samba ресурса с названием share и даем права на чтение группе пользователей users, но и также предоставляем возможность записи для группы с именем admins, а также пользователю PT ![samba07](https://hackmd.io/_uploads/SJZ_eOHt6.png) Проверяем что ресурс доступен и все работает ![samba08](https://hackmd.io/_uploads/ryM3g_rtp.png) Также проверим доступность ресурса с Linux машины ![smbclient](https://hackmd.io/_uploads/ryapRXvKp.png) Добавим сервис Samba и NetBIOS в автозагрузку и перезапустим ![samba10](https://hackmd.io/_uploads/rkp6kNPF6.png) Расшарить корзину не получилось :( Вывод smbstatus сохраняем в файл smbstatus.txt ![samba09](https://hackmd.io/_uploads/B1w1HdHtp.png) *PID (Process ID)* идентификатор процесса сервера Samba. *Username* имя пользователя, под которым установлен текущий сеанс. *Group* Группа пользователя. *Machine* IP-адрес и имя машины, с которой установлен сеанс. *Protocol Version* версия протокола, используемая для текущего сеанса. *Encryption* уровень шифрования (если активирован). *Signing* уровень подписывания (если активирован). После этого следует информация о текущих ресурсах, которые предоставляет сервер Samba, а также информацию о том, какие пользователи и машины подключены к этим сервисам. # **Практическая работа № 4.2** **"Fail2Ban-SSH и Brute-force attack"** Установим fail2ban и запустим его ![fail2ban](https://hackmd.io/_uploads/HyrRI_St6.png) Проверим надстройку для SSH и по необходимости закомментируем ее ![fail2ban2](https://hackmd.io/_uploads/SkH4D_BFT.png) Создадим файл .local чтобы после обновления у нас не слетели настройки и впишем туда настройку по SSH ![fail2ban3](https://hackmd.io/_uploads/ry7nwOHtT.png) Проверяем статус сервиса fail2ban и убеждаемся что все хорошо ![fail2ban4](https://hackmd.io/_uploads/SJP1KuBtT.png) Произведем атаку на SSH при помощи Hydra, предварительно установив её ![hydra](https://hackmd.io/_uploads/rk3L5YHYa.png) Проверим статус SSH в fail2ban ![hydra2](https://hackmd.io/_uploads/rkEccKHY6.png) Исключим IP адрес из бан-листа и произведен атаку снова ![hydra3](https://hackmd.io/_uploads/ry9x2KBYp.png) ![hydra4](https://hackmd.io/_uploads/HyvE2tSKa.png) Затем отключим fail2ban и произведен атаку снова ![hydra5](https://hackmd.io/_uploads/HJ9R3tHYT.png) ![hydra6](https://hackmd.io/_uploads/Sy4GatBtp.png) # **Практическая работа № 4.3** **"Fail2Ban и Dos/DDoS attack" на примере nginx.** Установим nginx, а также дополнение ipset чтобы эффективнее блокировать большое количество запросов ![nginx](https://hackmd.io/_uploads/BJYSk5SFp.png) Чтобы защититься от DoS/DDoS атак через встроенные возможности nginx, внесем изменения в файл default настройки nginx ![nginx2](https://hackmd.io/_uploads/H1NlB9St6.png) Далее в файле /etc/nginx/nginx.conf необходимо ввести определенные лимиты ![nginx3](https://hackmd.io/_uploads/SkMvfjBYp.png) Проверим что лимиты на стороне nginx работает, посылаем множественные запросы в браузере Firefox ![nginx4](https://hackmd.io/_uploads/ryHYGsBYT.png) Также увидим запросы в log файле ![nginx5](https://hackmd.io/_uploads/r1uKXiHKa.png) Настроим fail2ban для nginx ![nginx6](https://hackmd.io/_uploads/BkJf4sBF6.png) Затем рассмотрим блокировку при помощи iptables, для этого создадим iptables-blocktype.local и внесем следующую настройку ![nginx7](https://hackmd.io/_uploads/rJhRVsrFT.png) Проверим что наши фильтры работают исправно ![nginx8](https://hackmd.io/_uploads/rJN_LsSF6.png) Теперь проверим работу iptables путем отправки множественных запросов через браузер и далее с помощью команды *iptables - L -v* посмотрим работу фильтра-надстройки в iptables ![nginx9](https://hackmd.io/_uploads/H1NxOjBtT.png) Для защиты сервера от DoS/DDoS атак с помощью fail2ban при помощи iptables в автоматическом режиме создадим в jail.conf дополнительную конфигурацию dos ![nginx10](https://hackmd.io/_uploads/SJsITiBYp.png) И еще необходимо создать фильтр который реагирует на POST запросы /etc/fail2ban/filter.d/dos.conf ![nginx11](https://hackmd.io/_uploads/SJn3ToSt6.png) И перезагрузить fail2ban Чтобы защитить сервер от DoS/DDoS атак с помощью fail2ban при помощи ipset в автоматическом режиме Добавим в /etc/fail2ban/jail.local дополнительный блок ipset ![ipset](https://hackmd.io/_uploads/r1w7z4vY6.png) Далее создадим новый фильтр /etc/fail2ban/filter.d/ipset.conf и добавим туда строчки ![ipset2](https://hackmd.io/_uploads/r1anzVDK6.png) Затем внесем изменения в файл /etc/fail2ban/action.d/iptables-ipset-proto4.conf добавив строчки ![ipset3](https://hackmd.io/_uploads/rkmimVDF6.png) Далее необходимо работать с iptables и ipset, для этого создадим набор плавил ipset, затем добавим туда правила iptables для использования ipset, сохраним правила iptables и перезагрузим fail2ban ![ipset4](https://hackmd.io/_uploads/HkbCrNwYp.png) # **Практическая работа 5** **“Работа с файловой системой Linux”** 1. Установка двух стендов Debian и снепшот ![debian](https://hackmd.io/_uploads/S1LepUIFp.png) ![debian2](https://hackmd.io/_uploads/HJ1rTIItp.png) 2. Создадим пользователя user1 и добавим его в группу sudo ![debian3](https://hackmd.io/_uploads/HygBNDLFa.png) 3-4. Выделить место под новый HDD ![debian4](https://hackmd.io/_uploads/SyKZHPLFT.png) 5. Создадим папки Data и biData ![debian23](https://hackmd.io/_uploads/SyKVVpvta.png) Необходимо отформотирвать Disk1 и Disk2 с помощью утилиты fdisk создать раздел ![debian5](https://hackmd.io/_uploads/BJce1uUKp.png) ![debian6](https://hackmd.io/_uploads/r1bDfd8Fa.png) 5.1 Далее монтируем Disk1 как файловую систему только для чтения ![debian7](https://hackmd.io/_uploads/SJKofu8YT.png) 5.2 Далее монтируем Disk2 стандартно ![debian8](https://hackmd.io/_uploads/Hyaom_8tp.png) 6. Монтируем первый HDD в Linux системе к вновь созданной директории “biData”. ![debian24](https://hackmd.io/_uploads/SJn5JAvKT.png) 7. Монтируем второй новый HDD в Linux системе к вновь созданной директории Data”. ![debian25](https://hackmd.io/_uploads/S1O01Awtp.png) ![debian9](https://hackmd.io/_uploads/Sk-5tdIFT.png) 8. Монтировать одну папку в другую, для этого используйте опцию --bind. ![debian10](https://hackmd.io/_uploads/HyHvsdLKp.png) 9. Создаем группу PT ![debian11](https://hackmd.io/_uploads/ryI_j_8tT.png) 10. Создаем папку “23” в директории “Data” ![debian12](https://hackmd.io/_uploads/B1QKnuUtp.png) 11. Назначим на папку “23” группу “PT” ![debian13](https://hackmd.io/_uploads/Sy2Vp_Utp.png) 12-13 Создадим пользователя user2 и назначим ему пароль ![debian14](https://hackmd.io/_uploads/BJxmyKLtp.png) 14. Включаем нового пользователя в группу “PT”. ![debian15](https://hackmd.io/_uploads/S12K1KUY6.png) 15. Убедимся что в домашнем каталоге создан каталог пользователя user2 ![debian16](https://hackmd.io/_uploads/S1xLxYIKT.png) 16. Назначим права доступа для пользователя user2 так, чтобы результат работы команды ls для директории "Data" был отрицательным (permission denied) можно использовать chmod. Для директории Data мы хотим, чтобы только владелец имел доступ к этой директории. sudo chmod 700 /home/debian/Data Тут только владелец имеет полный доступ, а другим пользователям ничего не разрешено (permission denied). ![debian26](https://hackmd.io/_uploads/B16SM0wFT.png) 17. Проверяем работу пункта 16 ![debian17](https://hackmd.io/_uploads/SkOWNYIFa.png) 18. Установим сервер SSH и защитим его с с помощью authorized_keys внеся настройки в /etc/ssh/sshd_config ![debian18](https://hackmd.io/_uploads/H1f5rYIYp.png) ![debian19](https://hackmd.io/_uploads/SkAxIFLYp.png) Не забудем сменить стандартный порт на 2020 ![debian27](https://hackmd.io/_uploads/SyyUXRvYp.png) 19. Проверим авторизацию через Putty на Windows машину, предварительно прикрепив публичный ключ к клиенту ![debian20](https://hackmd.io/_uploads/S1PopKItp.png) 20. Проверить работу после перезапуска системы, что все настройки в fstable сохранились, для этого проверим корректность их внесения командой *sudo mount -a* и применим настройки еще до перезагрузки. Перезагрузим и убедимся что диска на месте при помощи команды *df -h* ![fstab](https://hackmd.io/_uploads/Sy_Ty1dKT.png)