diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 00000000..e59a5186 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,13 @@ +## Goal +Что делает этот PR? + +## Changes +- Что было изменено? + +## Testing +- Как он был проверен? + +## Checklist +- [ ] Понятное, описательное название PR +- [ ] Обновлена документация/README (если необходимо) +- [ ] В репозиторий не попали секреты или временные большие файлы diff --git a/.github/workflows/lab3-workflow.yml b/.github/workflows/lab3-workflow.yml new file mode 100644 index 00000000..4fe1653b --- /dev/null +++ b/.github/workflows/lab3-workflow.yml @@ -0,0 +1,41 @@ +name: lab3 + +on: + push: + branches: + - feature/lab3 + workflow_dispatch: + +jobs: + lab3: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Basic info + run: | + echo "Hello from GitHub Actions!" + echo "Triggered by: $GITHUB_EVENT_NAME" + echo "Branch: $GITHUB_REF_NAME" + + - name: System info + run: | + echo "OS" + uname -a + + echo "CPU" + lscpu | head -n 30 + + echo "RAM" + free -h + + echo "Disk" + df -h + + - name: Runner Environment + run: | + echo "Runner OS: $RUNNER_OS" + echo "Runner Architecture: $RUNNER_ARCH" + echo "Workflow: $GITHUB_WORKFLOW" + echo "Action: $GITHUB_ACTION" diff --git a/images/git-signing-key.png b/images/git-signing-key.png new file mode 100644 index 00000000..21d1f316 Binary files /dev/null and b/images/git-signing-key.png differ diff --git a/images/git-verified-badge.png b/images/git-verified-badge.png new file mode 100644 index 00000000..0f03dce7 Binary files /dev/null and b/images/git-verified-badge.png differ diff --git a/labs/submission1.md b/labs/submission1.md new file mode 100644 index 00000000..6ffebc4d --- /dev/null +++ b/labs/submission1.md @@ -0,0 +1,28 @@ +# Лабораторная работа 1 — Подпись коммитов и шаблон PR + +## Task 1 — SSH Commit Signature Verification + +### 1. Краткое объяснение преимуществ подписанных коммитов + +Подписанные коммиты позволяют однозначно подтвердить, что автором изменения является конкретный разработчик, а не кто‑то посторонний, кто знает его имя/email. +Также подпись защищает от подмены истории: если кто‑то попытается изменить коммит или его автора, подпись станет недействительной, и это будет заметно в системе контроля версий. +Ещё, в командной работе подписанные коммиты повышают уровень доверия и прозрачности: ревьюеры видят значок **Verified** и понимают, что изменения пришли из доверенного источника. + +### 2. Доказательство успешной настройки SSH‑ключа и подписанного коммита +Скриншот привязанного в git SSH-ключа для подписи коммитов + +![Скриншот привязанного в git SSH-ключа для подписи коммитов](../images/git-signing-key.png) + +Скриншот подписанных коммитов с verified меткой на GitHub + +![Скриншот подписанных коммитов с verified меткой на GitHub](../images/git-verified-badge.png) + +Этот значок подтверждает, что GitHub распознал подпись коммита, ассоциировал её с моим аккаунтом и считает коммит проверенным. + +### 3. Почему подпись коммитов важна в DevOps‑воркфлоу? + +Подпись коммитов помогает гарантировать, что код, который отправляется в этом коммите, действительно был создан и одобрен известными участниками команды. +Это снижает риск внедрения вредоносных изменений: если неизвестный пользователь попытается внести правку без корректной подписи, такие коммиты можно автоматически блокировать или помечать как недоверенные. +Кроме того, в бигтехах часто следят за изменениями. Подписанные коммиты упрощают отслеживание того, кто и когда внёс конкретное изменение. Это важно для безопасности и разборов инцидентов. + +--- \ No newline at end of file diff --git a/labs/submission4.md b/labs/submission4.md new file mode 100644 index 00000000..3204cb37 --- /dev/null +++ b/labs/submission4.md @@ -0,0 +1,213 @@ +# Lab 4 Submission: Operating Systems & Networking + +## Task 1 — Operating System Analysis + +### 1.1: Boot Performance Analysis +`systemd-analyze` +``` +Startup finished in 982ms (userspace) +graphical.target reached after 974ms in userspace. +``` + +`systemd-analyze blame | head -n 5` +``` +600ms landscape-client.service +196ms snapd.seeded.service +152ms snapd.service +131ms dev-sdc.device +128ms wsl-pro.service +``` + +`uptime` и `w` +``` +22:08:29 up 3 min, 1 user, load average: 0.00, 0.00, 0.00 + 22:08:29 up 3 min, 1 user, load average: 0.00, 0.00, 0.00 +USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT +amust pts/1 - 22:04 3:30 0.01s 0.01s -bash +``` +Наблюдения: Система загрузилась чрезвычайно быстро (менее чем за 1 секунду). Это типично для WSL, так как ей не нужно загружать полноценное ядро оборудования. Load average равна 0.00, что означает, что она пуста. + +### 1.2: Process Forensics +`ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 6` +``` + PID PPID CMD %MEM %CPU + 224 1 /usr/bin/python3 /usr/share 0.2 0.0 + 175 1 /usr/libexec/wsl-pro-servic 0.1 0.0 + 39 1 /usr/lib/systemd/systemd-jo 0.1 0.0 + 1 0 /sbin/init 0.1 0.1 + 140 1 /usr/lib/systemd/systemd-re 0.1 0.0 +``` + +`ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head -n 6` +``` + PID PPID CMD %MEM %CPU + 1 0 /sbin/init 0.1 0.1 + 148 1 @dbus-daemon --system --add 0.0 0.0 + 39 1 /usr/lib/systemd/systemd-jo 0.1 0.0 + 224 1 /usr/bin/python3 /usr/share 0.2 0.0 + 84 1 /usr/lib/systemd/systemd-ud 0.0 0.0 +``` +Ответ: Процесс, потребляющий больше всего памяти — python3 (0.2%). + +### 1.3: Service Dependencies +`systemctl list-dependencies | head -n 6` +``` +default.target +○ ├─display-manager.service +○ ├─systemd-update-utmp-runlevel.service +○ ├─wsl-binfmt.service +● └─multi-user.target +○ ├─apport.service +``` +Наблюдения: `default.target` зависит от `multi-user.target`. + +`systemctl list-dependencies multi-user.target | head -n 6` +``` +multi-user.target +○ ├─apport.service +● ├─console-setup.service +● ├─cron.service +● ├─dbus.service +○ ├─dmesg.service +``` +Наблюдения: `multi-user.target` зависит от нескольких важных фоновых служб, таких как `cron` и `dbus`. + +### 1.4: User Sessions +`who -a` и `last -n 5` +``` + system boot 2026-02-26 22:04 + run-level 5 2026-02-26 22:04 +LOGIN console 2026-02-26 22:04 203 id=cons +LOGIN tty1 2026-02-26 22:04 218 id=tty1 +amust - pts/1 2026-02-26 22:04 00:16 462 +reboot system boot 5.15.167.4-micro Thu Feb 26 22:04 still running +reboot system boot 5.15.167.4-micro Sat Feb 21 16:27 still running +reboot system boot 5.15.167.4-micro Tue Feb 3 23:04 still running +reboot system boot 5.15.167.4-micro Tue Feb 3 22:41 still running +reboot system boot 5.15.167.4-micro Sun Dec 21 22:24 still running + +wtmp begins Mon Sep 29 04:27:12 2025 +``` +Наблюдения: Пользователь amust (я) успешно вошел в систему через псевдотерминал (pts/1), что стандартно для WSL. Команда last показывает историю последних загрузок системы. + +### 1.5: Memory Analysis +`free -h` +``` + total used free shared buff/cache available +Mem: 7.6Gi 593Mi 7.1Gi 3.2Mi 124Mi 7.0Gi +Swap: 2.0Gi 0B 2.0Gi +``` + +`cat /proc/meminfo | grep -e MemTotal -e SwapTotal -e MemAvailable` +``` +MemTotal: 7993712 kB +MemAvailable: 7387316 kB +SwapTotal: 2097152 kB +``` +Наблюдения: В системе много доступной памяти (~7.3 ГБ из 7.9 ГБ). Файл подкачки совершенно не используется, что означает отсутствие нехватки памяти в системе. + +#### Resource Utilization Patterns: +В целом, использование ресурсов крайне низкое. Система потребляет минимум процессора (максимум 0.1%) и памяти (максимум 0.2%). Это говорит о том, что у меня на компьютере чистая, простаивающая среда WSL без запущенных тяжелых фоновых приложений. + +## Task 2 — Networking Analysis + +### 2.1: Network Path Tracing +`traceroute github.com | head -n 3` +``` +traceroute to github.com (20.205.243.166), 64 hops max + 1 172.17.208.1 0.323ms 0.318ms 0.110ms + 2 * * * + 3 * * * +``` + +`dig github.com` +``` + +; <<>> DiG 9.18.39-0ubuntu0.24.04.2-Ubuntu <<>> github.com +;; global options: +cmd +;; Got answer: +;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29405 +;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 + +;; OPT PSEUDOSECTION: +; EDNS: version: 0, flags:; udp: 1232 +;; QUESTION SECTION: +;github.com. IN A + +;; ANSWER SECTION: +github.com. 1692 IN A 140.82.113.3 + +;; Query time: 689 msec +;; SERVER: 10.255.255.254#53(10.255.255.254) (UDP) +;; WHEN: Thu Feb 26 22:36:21 MSK 2026 +;; MSG SIZE rcvd: 55 + +``` +Анализ сетевых путей: Traceroute успешно достигла первого узла `172.17.208.1`, который является внутренним виртуальным шлюзом для WSL. Последующие узлы скрыты (* * *). Несмотря на это, разрешение DNS с помощью команды dig прошло успешно, определив IP домена через локальный DNS-резолвер `10.255.255.254`. + +### 2.2: Packet Capture +`sudo timeout 10 tcpdump -c 5 -i any 'port 53' -nn` +``` +tcpdump: data link type LINUX_SLL2 +tcpdump: verbose output suppressed, use -v[v]... for full protocol decode +listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes +23:13:56.745480 eth0 Out IP 172.17.222.XXX.44383 > 8.8.8.8.53: 17629+ [1au] A? github.com. (51) +23:13:57.401763 eth0 In IP 8.8.8.8.53 > 172.17.222.211.44383: 17629 1/0/1 A 20.205.243.166 (55) +``` +#### DNS query/response patterns: +- Example DNS query: `Out IP 172.17.222.XXX.44383 > 8.8.8.8.53: 17629+ [1au] A? github.com.` +Моя локальная машина WSL (с затёртым IP-адресом 172.17.222.XXX) отправила исходящий запрос к публичному DNS-серверу Google (8.8.8.8) по порту 53, запрашивая 'A' запись (IPv4 адрес) для github.com. +- Example response: `In IP 8.8.8.8.53 > 172.17.222.XXX.44383: ... A 20.205.243.166` +DNS-сервер успешно ответил, преобразовав доменное имя в IP-адрес 20.205.243.166. + +### 2.3: Reverse DNS +`dig -x 8.8.4.4` +``` + +; <<>> DiG 9.18.39-0ubuntu0.24.04.2-Ubuntu <<>> -x 8.8.4.4 +;; global options: +cmd +;; Got answer: +;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56822 +;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 + +;; OPT PSEUDOSECTION: +; EDNS: version: 0, flags:; udp: 1232 +;; QUESTION SECTION: +;4.4.8.8.in-addr.arpa. IN PTR + +;; ANSWER SECTION: +4.4.8.8.in-addr.arpa. 5755 IN PTR dns.google. + +;; Query time: 1021 msec +;; SERVER: 10.255.255.254#53(10.255.255.254) (UDP) +;; WHEN: Thu Feb 26 22:40:51 MSK 2026 +;; MSG SIZE rcvd: 73 + +``` + +`dig -x 1.1.2.2` +``` +;; communications error to 10.255.255.254#53: timed out +;; communications error to 10.255.255.254#53: timed out + +; <<>> DiG 9.18.39-0ubuntu0.24.04.2-Ubuntu <<>> -x 1.1.2.2 +;; global options: +cmd +;; Got answer: +;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 23100 +;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1 + +;; OPT PSEUDOSECTION: +; EDNS: version: 0, flags:; udp: 1232 +;; QUESTION SECTION: +;2.2.1.1.in-addr.arpa. IN PTR + +;; AUTHORITY SECTION: +1.in-addr.arpa. 3590 IN SOA ns.apnic.net. read-txt-record-of-zone-first-dns-admin.apnic.net. 23597 7200 1800 604800 3600 + +;; Query time: 1803 msec +;; SERVER: 10.255.255.254#53(10.255.255.254) (UDP) +;; WHEN: Thu Feb 26 22:41:20 MSK 2026 +;; MSG SIZE rcvd: 160 + +``` +Comparison of reverse lookup results: Reverse lookup для 8.8.4.4 успешно разрешился в dns.google., подтверждая, что Google настроил действительную PTR-запись для этого IP. С другой стороны, поиск для 1.1.2.2 завершился по тайм-ауту и вернул NXDOMAIN (несуществующий домен), что означает отсутствие обратной DNS (PTR) записи, связанной с этим IP-адресом. diff --git a/labs/submission5.md b/labs/submission5.md new file mode 100644 index 00000000..cadb29b5 --- /dev/null +++ b/labs/submission5.md @@ -0,0 +1,158 @@ +# Lab 5: Virtualization & System Analysis + +## Task 1: VirtualBox Installation + +- Основная операционная система: Windows 11 Home +- Версия VirtualBox: 7.2.4 +- Проблемы при установке: VirtualBox уже был установлен на моем компьютере для курса по компарчу и ОСям, поэтому новая установка не потребовалась. Никаких проблем не возникло. + +## Task 2: Ubuntu VM and System Analysis + +### 2.1 VM Setup +- RAM: 4 ГБ +- Storage: 25 ГБ +- CPU: 2 ядра +- ОС: Ubuntu 24.04 LTS + +### 2.2 System Information Discovery + +#### 1. CPU Details +- Найденный инструмент: `lscpu` +- Использованная команда: `lscpu` +- Output: +``` + Architecture: x86_64 + CPU op-mode(s): 32-bit, 64-bit + Address sizes: 39 bits physical, 48 bits virtual + Byte Order: Little Endian + CPU(s): 2 + On-line CPU(s) list: 0,1 + Vendor ID: GenuineIntel + Model name: 13th Gen Intel(R) Core(TM) i7-13700H + CPU family: 6 + Model: 186 + Thread(s) per core: 1 + Core(s) per socket: 2 + Socket(s): 1 + Stepping: 2 + BogoMIPS: 5836.83 + Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pg + e mca cmov pat pse36 clflush mmx fxsr sse sse2 ht s + yscall nx rdtscp lm constant_tsc rep_good nopl xtop + ology nonstop_tsc cpuid tsc_known_freq pni pclmulqd + q ssse3 fma cx16 pcid sse4_1 sse4_2 movbe popcnt ae + s xsave avx f16c rdrand hypervisor lahf_lm abm 3dno + wprefetch ibrs_enhanced fsgsbase bmi1 avx2 bmi2 inv + pcid rdseed adx clflushopt sha_ni arat md_clear flu + sh_l1d arch_capabilities + Virtualization features: + Hypervisor vendor: KVM + Virtualization type: full + Caches (sum of all): + L1d: 96 KiB (2 instances) + L1i: 64 KiB (2 instances) + L2: 2.5 MiB (2 instances) + L3: 48 MiB (2 instances) + NUMA: + NUMA node(s): 1 + NUMA node0 CPU(s): 0,1 + Vulnerabilities: + Gather data sampling: Not affected + Ghostwrite: Not affected + Indirect target selection: Mitigation; Aligned branch/return thunks + Itlb multihit: Not affected + L1tf: Not affected + Mds: Not affected + Meltdown: Not affected + Mmio stale data: Not affected + Old microcode: Not affected + Reg file data sampling: Vulnerable: No microcode + Retbleed: Mitigation; Enhanced IBRS + Spec rstack overflow: Not affected + Spec store bypass: Vulnerable + Spectre v1: Mitigation; usercopy/swapgs barriers and __user poi + nter sanitization + Spectre v2: Mitigation; Enhanced / Automatic IBRS; PBRSB-eIBRS + SW sequence; BHI SW loop, KVM SW loop + Srbds: Not affected + Tsa: Not affected + Tsx async abort: Not affected + Vmscape: Not affected +``` + +#### 2. Memory Information +- Найденный инструмент: `free` +- Использованная команда: `free -h` +- Output: +``` + total used free shared buff/cache availableMem: + 3.8Gi 1.9Gi 124Mi 88Mi 1.9Gi 1.9GiSwap: + 0B 0B 0B +``` + +#### 3. Network Configuration +- Найденный инструмент: `ip` +- Использованная команда: `ip a` +- Output: +``` + 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 + inet 127.0.0.1/8 scope host lo + valid_lft forever preferred_lft forever + inet6 ::1/128 scope host noprefixroute + valid_lft forever preferred_lft forever + 2: enp0s3: mtu 1500 qdisc fq_codel state UP group default qlen 1000 + link/ether 08:00:27:8c:59:20 brd ff:ff:ff:ff:ff:ff + inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic noprefixroute enp0s3 + valid_lft 84791sec preferred_lft 84791sec + inet6 fd17:625c:f037:2:a4d9:2551:b662:1a4b/64 scope global temporary dynamic + valid_lft 86284sec preferred_lft 14284sec + inet6 fd17:625c:f037:2:a00:27ff:fe8c:5920/64 scope global dynamic mngtmpaddr + valid_lft 86284sec preferred_lft 14284sec + inet6 fe80::a00:27ff:fe8c:5920/64 scope link + valid_lft forever preferred_lft forever +``` + +#### 4. Storage Information +- Найденный инструмент: `df` +- Использованная команда: `df -h` +- Output: +``` + Filesystem Size Used Avail Use% Mounted on + tmpfs 392M 1.5M 390M 1% /run + /dev/sda2 25G 5.6G 18G 24% / + tmpfs 2.0G 0 2.0G 0% /dev/shm + tmpfs 5.0M 8.0K 5.0M 1% /run/lock + tmpfs 392M 124K 392M 1% /run/user/1000 +``` + +#### 5. Operating System Details +- Найденный инструмент: `cat` +- Использованная команда: `cat /etc/os-release` +- Output: +``` + PRETTY_NAME="Ubuntu 24.04.4 LTS" + NAME="Ubuntu" + VERSION_ID="24.04" + VERSION="24.04.4 LTS (Noble Numbat)" + VERSION_CODENAME=noble + ID=ubuntu + ID_LIKE=debian + HOME_URL="https://www.ubuntu.com/" + SUPPORT_URL="https://help.ubuntu.com/" + BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" + PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" + UBUNTU_CODENAME=noble + LOGO=ubuntu-logo +``` + +#### 6. Virtualization Detection +- Найденный инструмент: `systemd-detect-virt` +- Использованная команда: `systemd-detect-virt` +- Output: +``` + oracle +``` + +#### Рефлексия +Команды lscpu и free оказались наиболее полезными, так как они предоставили четкие, человекочитаемые сводки о характеристиках оборудования без необходимости использовать сложные флаги. Инструмент systemd-detect-virt оказался удобен именно для проверки виртуализированной среды одним словом -- кратко и понятно.