From 517e965bd9d64099d5547a01c5528b1bcc6c0d3f Mon Sep 17 00:00:00 2001 From: vlpr Date: Fri, 6 Oct 2023 20:04:31 +0000 Subject: [PATCH] Uploaded solutions for 03 and 04 lessons. --- module1/03_networking/solutions_task1.md | 59 ++++++ module1/03_networking/solutions_task2.md | 92 ++++++++++ module1/03_networking/solutions_task3.md | 51 ++++++ module1/03_networking/solutions_task4.md | 46 +++++ module1/03_networking/solutions_task5.md | 6 + module1/03_networking/tasks.md | 2 +- module1/04_systemd/solutions.md | 224 +++++++++++++++++++++++ module1/04_systemd/tasks.md | 2 +- 8 files changed, 480 insertions(+), 2 deletions(-) create mode 100644 module1/03_networking/solutions_task1.md create mode 100644 module1/03_networking/solutions_task2.md create mode 100644 module1/03_networking/solutions_task3.md create mode 100644 module1/03_networking/solutions_task4.md create mode 100644 module1/03_networking/solutions_task5.md create mode 100644 module1/04_systemd/solutions.md diff --git a/module1/03_networking/solutions_task1.md b/module1/03_networking/solutions_task1.md new file mode 100644 index 0000000..b262409 --- /dev/null +++ b/module1/03_networking/solutions_task1.md @@ -0,0 +1,59 @@ +# Задание 1 + +Для виртуальных машин `studX-net1` и `studX-net2` настройте статический адрес в помощью `systemd` в подсети `192.168.0.0/24`. Используйте команду `networkctl` и файлы настроек `/etc/systemd/network/ens18.network`. Проверьте, что машины видят друг друга с помощью команды `ping IP-адрес-соседней-машины`. + +0. Узнайте статус сервиса `systemd-networkd`. +``` +# systemctl status systemd-networkd +``` + +1. Активируйте `systemd-networkd`, если он не активирован (disabled). +``` +# systemctl enable systemd-networkd +``` + +2. Запустите `systemd-networkd`, если он не запущен (inactive, dead). +``` +# systemctl start systemd-networkd +``` + +3. Определите имя настраиваемого интерфейса. +``` +# ip link +``` + +4. Для настройки интерфейса `ens18` машин `stud1-net1` и `stud1-net2` создайте или отредактируйте в каждой `/etc/systemd/network/ens18.network`. + +конфигурация `ens18.network` машины `stud1-net1` +``` +[Match] +Name=ens18 + +[Network] +Address=192.168.0.2/24 +``` + +конфигурация `ens18.network` машины `stud1-net2` +``` +[Match] +Name=ens18 + +[Network] +Address=192.168.0.3/24 +``` + +5. Перечитайте конфигурацию сети на обеих машинах. +``` +# networkctl reload +``` + +6. После конфигурации на обеих машинах проверьте их взаимную доступность по сети. +``` +stud@stud1-net1$ ping 192.168.0.3 +stud@stud1-net2$ ping 192.168.0.2 +``` + +7. В случае проблемы, проверьте, что `systemd-networkd` запущен и в его логах нет ошибок. +``` +# systemctl status systemd-networkd +``` \ No newline at end of file diff --git a/module1/03_networking/solutions_task2.md b/module1/03_networking/solutions_task2.md new file mode 100644 index 0000000..fd580b3 --- /dev/null +++ b/module1/03_networking/solutions_task2.md @@ -0,0 +1,92 @@ +# Задание 2 + +На машине `studX-net1` настройте в подсети `192.168.0.0/24` DHCP сервер в файле `/etc/systemd/network/ens18.network`. На другой машине `studX-net2` настройте получение IP адреса по DHCP. Проверьте, что машины видят друг друга. + +0. Узнайте статус сервиса `systemd-networkd`. +``` +# systemctl status systemd-networkd +``` + +1. Активируйте `systemd-networkd`, если он не активирован (disabled). +``` +# systemctl enable systemd-networkd +``` + +2. Запустите systemd-networkd, если он не запущен (inactive, dead). +``` +# systemctl start systemd-networkd +``` + +3. Определите имя настраиваемого интерфейса (не loopback). +``` +# ip link +``` + +4. Для настройки интерфейса `ens18` машин `stud1-net1` и `stud1-net2` создайте +или отредактируйте в каждой` /etc/systemd/network/ens18.network`. + +конфигурация `ens18.network` машины `stud1-net1` с DHCP сервером. +``` +[Match] +Name=ens18 + +[Network] +Address=192.168.0.2/24 +DHCPServer=yes + +[DHCPServer] +EmitDNS=yes +DNS=1.1.1.1 +EmitRouter=yes +Router=192.168.0.1 +PoolOffset=1 +PoolSize=252 +``` +Такой DHCP сервер будет выдавать новым устройствам IP из диапазона 192.168.0.[3-255], адрес шлюза и DNS сервер. При этом, сам машина с DHCP сервером не будет иметь доступ в интернет (у неё не будет шлюза и DNS адреса). + + +конфигурация `ens18.network` машины `stud1-net2`, которая получает адрес от DHCP сервера. +``` +[Match] +Name=ens18 + +[Network] +DHCP=yes +``` + +5. Перечитайте конфигурацию сети на обеих машинах. +``` +# networkctl reload +``` + +6. На машине `stud1-net2` определите выданный DHCP сервером ip адрес для интерфейса `ens18`. +``` +ip a +``` +Срок, на который выдан адрес можно посмотреть командой `ip` в поле `valid_lft`: +``` +ip -4 address show ens18 +``` +а в логах увидеть факт получения адреса +``` +journalctl --unit=systemd-networkd +``` + +После конфигурации на обеих машинах проверьте их взаимную доступность по сети. +``` +stud@stud1-net2$ ping 192.168.0.2 +stud@stud1-net1$ ping 192.168.0.X +``` + + +7. В случае проблемы, проверьте, что `systemd-networkd` запущен и в его логах нет ошибок на обоих машинах. +``` +# systemctl status systemd-networkd +``` + +Изучите логи модуля `systemd-networkd` на ошибки +``` +journalctl --unit=systemd-networkd +``` + +Обратитесь к секциям `[Network]`, `[DHCPServer]` в странице мануала `systemd.network`. Для быстрого поиска можете использовать `/`, по аналогии с поиском в vim. Проверьте настройки `ens18.network` на ошибки. \ No newline at end of file diff --git a/module1/03_networking/solutions_task3.md b/module1/03_networking/solutions_task3.md new file mode 100644 index 0000000..e23c95f --- /dev/null +++ b/module1/03_networking/solutions_task3.md @@ -0,0 +1,51 @@ +# Задание 3 + +На машине `studX-net1` настройте доступ в интернет. В качестве шлюза используйте адрес `192.168.0.1`. + +1. Узнайте статус сервиса `systemd-networkd` +``` +# systemctl status systemd-networkd +``` + +2. Активируйте `system-networkd`, если он не активирован (disabled) +``` +# systemctl enable systemd-networkd +``` + +3. Запустите `system-networkd`, если он не запущен (inactive, dead) +``` +# systemctl start systemd-networkd +``` + +4. Определите имя настраиваемого интерфейса (не loopback). +``` +# ip link +``` + +5. Для настройки интерфейса `ens18` машины `stud1-net1` создайте или отредактируйте в каждой `/etc/systemd/network/ens18.network`. + +конфигурация `ens18.network` машины `stud1-net1` +``` +[Match] +Name=ens18 + +[Network] +Address=192.168.0.2/24 +Gateway=192.168.0.1 +``` + +6. Перечитайте конфигурацию сети +``` +# networkctl reload +``` + +7. Проверьте доступность ip-адреса в сети internet +``` +stud@stud1-net1$ ping 1.1.1.1 +``` + +Наличие маршрута в интернет покажет команда +``` +> ip route +default via 192.168.0.1 dev ens18 ... +``` diff --git a/module1/03_networking/solutions_task4.md b/module1/03_networking/solutions_task4.md new file mode 100644 index 0000000..52c19cb --- /dev/null +++ b/module1/03_networking/solutions_task4.md @@ -0,0 +1,46 @@ +# Задание 4 + +Настройте DNS сервер на виртуальной машине. Пример адреса DNS - `1.1.1.1`. + +1. Узнайте статус сервиса `systemd-resolved` +``` +# systemctl status systemd-resolved +``` + +2. Активируйте `systemd-resolved`, если он не активирован (disabled) +``` +# systemctl enable systemd-resolved +``` + +3. Запустите `systemd-resolved`, если он не запущен (inactive, dead) +``` +# systemctl start systemd-resolved +``` + +4. Для настройки DNS `ens18` машины `stud1-net1` добавьте поле `DNS` в `/etc/systemd/system/ens18.network`. +``` +[Match] +Name=ens18 + +[Network] +Address=192.168.0.2/24 +Gateway=192.168.0.1 +DNS=1.1.1.1 +``` + +5. Перечитайте конфигурацию сети +``` +# networkctl reload +``` + +6. Проверьте доступность адреса по имени +``` +stud@stud1-2v1$ ping yandex.ru +``` + +7. В случае проблемы, проверьте, что `systemd-networkd` запущен, `systemd-resolved` запущен, DNS настроен. +``` +# systemctl status systemd-networkd +# systemctl status systemd-resolved +# resolvectl status +``` \ No newline at end of file diff --git a/module1/03_networking/solutions_task5.md b/module1/03_networking/solutions_task5.md new file mode 100644 index 0000000..007c922 --- /dev/null +++ b/module1/03_networking/solutions_task5.md @@ -0,0 +1,6 @@ +# Задание 5 +``` +tcpdump arp -i ens18 +tcpdump icmp -i ens18 +tcpdump tcp -i ens18 +``` \ No newline at end of file diff --git a/module1/03_networking/tasks.md b/module1/03_networking/tasks.md index 135a7f5..cecaab9 100644 --- a/module1/03_networking/tasks.md +++ b/module1/03_networking/tasks.md @@ -12,7 +12,7 @@ # Задание 4 -Настройте DNS сервер на виртуальной машине. Пример адреса DNS - 1.1.1.1 . +Настройте DNS сервер на виртуальной машине `studX-net1`. Пример адреса DNS - `1.1.1.1`. # Задание 5 diff --git a/module1/04_systemd/solutions.md b/module1/04_systemd/solutions.md new file mode 100644 index 0000000..f288218 --- /dev/null +++ b/module1/04_systemd/solutions.md @@ -0,0 +1,224 @@ + +# Задание 1 + +1. Если у вас есть машина с графической оболочкой, в консоли перейдите в уровень запуска `multi-user.target` без перезагрузки, а затем обратно `graphical.target`. +``` +# systemctl isolate multi-user.target +# systemctl isolate graphical.target +``` + +2. Если у вас есть машина с графической оболочкой, перейдите в уровень запуска `multi-user.target` с перезагрузкой, а затем переключитесь в графическую оболочку обратно. +``` +# systemctl set-default multi-user.target +# reboot +# systemctl set-default graphical.target +# reboot +``` + +3. Выведите модуль, который активируется по-умолчанию. +``` +# systemctl get-default +``` + +4. Выведите возможные состояния модулей командой `systemctl --state=help`. +``` +# systemctl --state=help +``` + +5. Найдите в man странице какие типы модулей есть в `systemd`. +``` +# man systemctl + The following unit types are available: + 1. Service units, which start and control daemons and the processes they consist of. For details, see systemd.service(5). + 2. Socket units, which encapsulate local IPC or network sockets in the system, useful for socket-based activation. For details about socket units, see systemd.socket(5), for details on socket-based activation and other forms of activation, see daemon(7). + 3. Target units are useful to group units, or provide well-known synchronization points during boot-up, see systemd.target(5). + 4. Device units expose kernel devices in systemd and may be used to implement device-based activation. For details, see + systemd.device(5). + 5. Mount units control mount points in the file system, for details see systemd.mount(5). + 6. Automount units provide automount capabilities, for on-demand mounting of file systems as well as parallelized boot-up. See + systemd.automount(5). + 7. Timer units are useful for triggering activation of other units based on timers. You may find details in systemd.timer(5). + 8. Swap units are very similar to mount units and encapsulate memory swap partitions or files of the operating system. They are + described in systemd.swap(5). + 9. Path units may be used to activate other services when file system objects change or are modified. See systemd.path(5). + 10. Slice units may be used to group units which manage system processes (such as service and scope units) in a hierarchical tree for resource management purposes. See systemd.slice(5). + 11. Scope units are similar to service units, but manage foreign processes instead of starting them as well. See systemd.scope(5). +``` + +6. Выведите список установленных модулей. +``` +# systemctl list-unit-files +``` + +7. Деактивируйте сервис `systemd-timesyncd`. +``` +# systemctl disable systemd-timesyncd +``` + +8. Перезагрузите сервис `systemd-timesyncd`. +``` +# systemctl restart systemd-timesyncd +``` + +9. Выведите список модулей в памяти. +``` +# systemctl disable systemd-timesyncd +``` + +10. Проверьте, что сервис `systemd-timesyncd` активирован. +``` +# systemctl is-enabled systemd-timesyncd +``` + +11. Выведите список зависимых модулей для сервиса `systemd-timesyncd`. +``` +# systemctl list-dependencies systemd-timesyncd +``` + +12. Выведите список сокетов в памяти. +``` +# systemctl list-sockets +``` + +13. Выведите список таймеров в памяти. +``` +# systemctl list-timers +``` + +14. Проверьте статус сервиса `systemd-timesyncd`. +``` +# systemctl status systemd-timesyncd +``` + +15. Проверьте, что сервис `systemd-timesyncd` активен. +``` +# systemctl is-active systemd-timesyncd +``` + +16. Выведите список свойств модуля. +``` +# systemctl show systemd-timesyncd +``` + +17. Выведите уровень логирования для сервиса `systemd-timesyncd`. +``` +# systemctl service-log-level systemd-timesyncd +``` + +18. Перезагрузите конфигурацию systemd менеджера: перезапустите генераторы (systemd.generator), все модули и перестройте дерево зависимостей. +``` +# systemctl daemon-reload +``` + +19. Какие префиксы можно использовать при указании исполняемых файлов в файлах .service. +``` +# man systemd.service +Table 1. Special executable prefixes + ┌───────┬──────────────────────────────────────────────────┐ + │Prefix │ Effect │ + ├───────┼──────────────────────────────────────────────────┤ + │"@" │ If the executable path is prefixed with "@", the │ + │ │ second specified token will be passed as │ + │ │ "argv[0]" to the executed process (instead of │ + │ │ the actual filename), followed by the further │ + │ │ arguments specified. │ + ├───────┼──────────────────────────────────────────────────┤ + │"-" │ If the executable path is prefixed with "-", an │ + │ │ exit code of the command normally considered a │ + │ │ failure (i.e. non-zero exit status or abnormal │ + │ │ exit due to signal) is recorded, but has no │ + │ │ further effect and is considered equivalent to │ + │ │ success. │ + ├───────┼──────────────────────────────────────────────────┤ + │":" │ If the executable path is prefixed with ":", │ + │ │ environment variable substitution (as described │ + │ │ by the "Command Lines" section below) is not │ + │ │ applied. │ + ├───────┼──────────────────────────────────────────────────┤ + │"+" │ If the executable path is prefixed with "+" then │ + │ │ the process is executed with full privileges. In │ + │ │ this mode privilege restrictions configured with │ + │ │ User=, Group=, CapabilityBoundingSet= or the │ + │ │ various file system namespacing options (such as │ + │ │ PrivateDevices=, PrivateTmp=) are not applied to │ + │ │ the invoked command line (but still affect any │ + │ │ other ExecStart=, ExecStop=, ... lines). │ + ├───────┼──────────────────────────────────────────────────┤ + │"!" │ Similar to the "+" character discussed above │ + │ │ this permits invoking command lines with │ + │ │ elevated privileges. However, unlike "+" the "!" │ + │ │ character exclusively alters the effect of │ + │ │ User=, Group= and SupplementaryGroups=, i.e. │ + │ │ only the stanzas that affect user and group │ + │ │ credentials. Note that this setting may be │ + │ │ combined with DynamicUser=, in which case a │ + │ │ dynamic user/group pair is allocated before the │ + │ │ command is invoked, but credential changing is │ + │ │ left to the executed process itself. │ + ├───────┼──────────────────────────────────────────────────┤ + │"!!" │ This prefix is very similar to "!", however it │ + │ │ only has an effect on systems lacking support │ + │ │ for ambient process capabilities, i.e. without │ + │ │ support for AmbientCapabilities=. It's intended │ + │ │ to be used for unit files that take benefit of │ + │ │ ambient capabilities to run processes with │ + │ │ minimal privileges wherever possible while │ + │ │ remaining compatible with systems that lack │ + │ │ ambient capabilities support. Note that when │ + │ │ "!!" is used, and a system lacking ambient │ + │ │ capability support is detected any configured │ + │ │ SystemCallFilter= and CapabilityBoundingSet= │ + │ │ stanzas are implicitly modified, in order to │ + │ │ permit spawned processes to drop credentials and │ + │ │ capabilities themselves, even if this is │ + │ │ configured to not be allowed. Moreover, if this │ + │ │ prefix is used and a system lacking ambient │ + │ │ capability support is detected │ + │ │ AmbientCapabilities= will be skipped and not be │ + │ │ applied. On systems supporting ambient │ + │ │ capabilities, "!!" has no effect and is │ + │ │ redundant. │ + └───────┴──────────────────────────────────────────────────┘ +``` + +# Задание 2 + +1. Настройте беспарольный доступ по ssh на localhost. Подтвердите добавление хоста в known_hosts. +``` +# ssh-keygen +# cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys +# ssh localhost +``` + +2. Сконфигурируйте сервис для прокси сервиса +``` +# systemctl edit socksproxy --full --force +``` + +содержимое `/etc/systemd/system/socksproxy.service` +``` +[Unit] +Description=SocksProxy +After=network.target + +[Service] +ExecStart=/usr/bin/ssh -N -D 0.0.0.0:80 localhost +Restart=always +RestartSec=5s + +[Install] +WantedBy=multi-user.target +``` + +3. Активируйте сервис и запустите +``` +# systemctl enable socksproxy +# systemctl start socksproxy +``` + +4. Проверьте, что socks сервер слушает порт 80 +``` +# netstat -tulpn +``` + +5. Определите свой внешний IP адрес на сайте http://ifconfig.me/, предварительно настроив в firefox плагине foxyproxy прокси сервер socks5 с адресом 193.32.63.170 + X к последнему октету, где X ваш идентификатор из studX. \ No newline at end of file diff --git a/module1/04_systemd/tasks.md b/module1/04_systemd/tasks.md index 6b2a399..fe60cee 100644 --- a/module1/04_systemd/tasks.md +++ b/module1/04_systemd/tasks.md @@ -30,7 +30,7 @@ * вызывает команду `ssh -N -D 0.0.0.0:80 localhost`, * запускается после `network.target`, * всегда перезагружается при завершении, но не чаще, чем 1 раз в 5 секунд, -* запуск необходим при уровне `multi-user.target`. +* запуск проивзодится на уровне `multi-user.target`. Проверьте работу прокси сервиса из браузера с помощью плагина `foxyproxy`.