Files
linux_intro/labs/lab4/report.typ
2025-10-08 11:33:44 +03:00

363 lines
14 KiB
Typst
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#set text(size: 1.3em)
#set page(footer: context {
if counter(page).get().first() > 1 [
#align(center)[
#counter(page).display("1")
]
]
})
#show raw.where(block: false): box.with(
fill: luma(240),
inset: (x: 3pt, y: 0pt),
outset: (y: 3pt),
radius: 2pt,
)
#show raw.where(block: true): block.with(
fill: luma(240),
inset: 10pt,
radius: 4pt,
)
// title
#align(center)[Санкт-Петербургский национальный исследовательский университет информационных технологий, механики и оптики]
\
\
\
#align(center)[Факультет инфокоммуникационных технологий]
#align(center)[Направление подготовки 11.03.02]
\
\
#align(center)[Лабораторная работа №4]
#align(center)[Элементы безопасности в Linux]
\
\
\ //#align(center)[Вариант 19]
\
\
\
\
\
\
\
#align(right)[Выполнил:]
#align(right)[Дощенников Никита Андреевич]
#align(right)[Группа: К3221]
#align(right)[Проверил:]
#align(right)[Береснев Артем Дмитриевич]
\
\
#align(center)[Санкт-Петербург]
#align(center)[2025]
#pagebreak()
=== Цель работы:
Получить практические навыки работы с сетевой подсистемой в Linux, научится управлять пользователями, правами на файлы и каталоги, научиться
настраивать сетевые интерфейсы, NAT и настраивать ssh.
=== Часть 1. Подготовка конфигурации.
У себя на машине я создал новую виртуальную сеть:
```bash
virsh net-define /tmp/intnet.xml
virsh net-autostart intnet
virsh net-start intnet
```
Содержание файла `/tmp/intnet.xml`:
```xml
<network>
<name>intnet</name>
<forward mode='none'/>
</network>
```
К первой машине я добавил дополнительный интерфейс, подключенный к сети intnet:
```bash
virsh attach-interface --domain ubuntu24.04 --type network --source intnet --model virtio --config --live
```
Вторую машину я полностью перевел во внутреннюю сеть:
```bash
virsh detach-interface --domain ubuntu24.04-clone --type network --mac 52:54:00:76:1f:db --config --live
virsh attach-interface --domain ubuntu24.04-clone --type network --source intnet --model virtio --config --live
```
#align(center)[#image("assets/1.png")]
#align(center)[#image("assets/2.png")]
На `c7-1`:
#align(center)[#image("assets/3.png")]
#align(center)[#image("assets/5.png")]
#align(center)[#image("assets/6.png")]
#align(center)[#image("assets/8.png")]
На `c7-2`:
#align(center)[#image("assets/4.png")]
#align(center)[#image("assets/7.png")]
#align(center)[#image("assets/9.png")]
=== Часть 2. Создание пользователей и настройка OpenSSH Server (sshd).
Я создал пользователя на каждой машине:
#align(center)[#image("assets/10.png")]
#align(center)[#image("assets/11.png")]
Затем я настроил `ssh` на обеих машинах:
#align(center)[#image("assets/12.png")]
И перезапустил daemon:
#align(center)[#image("assets/13.png")]
Все те же действия я проделал на второй машине.
Попробовал подключиться с `c7-1` на `c7-2`:
#align(center)[#image("assets/14.png")]
=== Часть 3. Подключение к виртуальной машине c7-1 по ssh через NAT VirtualBox.
У себя на машине:
#align(center)[#image("assets/15.png")]
#align(center)[#image("assets/16.png")]
#align(center)[#image("assets/17.png")]
Копирование файла с `c7-2` на `c7-1`:
#align(center)[#image("assets/18.png")]
Копирование с `c7-2` на `c7-1`:
#align(center)[#image("assets/19.png")]
=== Часть 4. Установка и настройка NAT в iptables.
Я установил `iptables`:
#align(center)[#image("assets/20.png")]
Настроил клиентский NAT, то есть настроил связь между `10.0.0.0/24` и `enp1s0` через роутер `c7-1`.
#align(center)[#image("assets/21.png")]
Затем я разрешил форвардинг трафика на `c7-1`:
#align(center)[#image("assets/22.png")]
После этого я проверил работу интернета с `c7-2`:
#align(center)[#image("assets/23.png")]
Я настроил проброс порта:
#align(center)[#image("assets/24.png")]
На `c7-1`:
#align(center)[#image("assets/25.png")]
Локально:
#align(center)[#image("assets/26.png")]
Текущие правила:
#align(center)[#image("assets/27.png")]
Настройки не сбрасываются после перезагрузки:
#align(center)[#image("assets/28.png")]
=== Часть 5. Настройка прав на файлы и каталоги.
Я создал скрипт `mkuser.sh`:
```bash
#!/usr/bin/env bash
set -euo pipefail
count="${1:?}"
start="${2:?}"
for ((i=0;i<count;i++)); do
n=$((start+i))
u="u${n}"
p="DerParol${n}"
id -u "$u" >/dev/null 2>&1 || adduser --disabled-password --gecos "" "$u"
echo "${u}:${p}" | chpasswd
done
```
#align(center)[#image("assets/29.png")]
#align(center)[#image("assets/30.png")]
Затем я создал группу:
#align(center)[#image("assets/31.png")]
Членам группы я выдал полный доступ, а остальным только чтение:
#align(center)[#image("assets/32.png")]
#align(center)[#image("assets/33.png")]
Проверим:
#align(center)[#image("assets/34.png")]
Я сделал так, чтобы в `/DATA/sec1` любой мог писать, но удалять - только свои файлы:
#align(center)[#image("assets/35.png")]
Проверим:
#align(center)[#image("assets/36.png")]
`/DATA/sec2` настроен на полный доступ для спец. пользователя, для пользователей `uN` только чтение, для прочих нельзя.
#align(center)[#image("assets/37.png")]
Проверим:
#align(center)[#image("assets/38.png")]
В `/DATA/sec3` скопировал `nano` и любой пользователь смог изменять с помощью его файлы в нем.
#align(center)[#image("assets/39.png")]
Проверим:
#align(center)[#image("assets/40.png")]
#align(center)[#image("assets/41.png")]
Права:
#align(center)[#image("assets/42.png")]
=== Часть 6. Настройка аутентификации по ключу.
Локально я создал пару ssh ключей:
#align(center)[#image("assets/43.png")]
Я передал его на `c7-2`:
#align(center)[#image("assets/44.png")]
И теперь могу заходить без пароля:
#align(center)[#image("assets/45.png")]
И скопировал файл к себе на компьютер:
#align(center)[#image("assets/46.png")]
=== Часть 7. Sudo.
Я установил `sudo` на `c7-1`:
#align(center)[#image("assets/47.png")]
Разрешил пользователю из части 2 п.1 повышать привелегии до root.
#align(center)[#image("assets/48.png")]
Ограничил права первого из созданных в части 5 пользователей:
#align(center)[#image("assets/49.png")]
#align(center)[#image("assets/50.png")]
Проверил работу прав:
#align(center)[#image("assets/51.png")]
#align(center)[#image("assets/52.png")]
#align(center)[#image("assets/53.png")]
=== Часть 8. Получение информации о пользователях.
Я вывел входы пользователей в систему за текущий месяц:
#align(center)[#image("assets/54.png")]
Вывел информацию о пользователе из части 2 п. 1:
#align(center)[#image("assets/55.png")]
=== Ответы на вопросы.
*В части 4 вы использовали готовые команды для настройки NAT. Поясните какие параметры передаются в ключах команды iptables.*
```bash
iptables -t nat -A POSTROUTING -o enp1s0 -s 10.0.0.0/24 -j MASQUERADE
```
`-t nat` выбрать таблицу NAT, `-A POSTROUTING` добавить правило в цепочку POSTROUTING, `-o enp1s0` указывает выходной интерфейс, `-s 10.0.0.0/24` диапазон внутренних адресов, для которых применяется правило, `-j MASQUERADE` действие: подменить IP-адрес источника на внешний адрес интерфейса. Аналогично, при `-j SNAT --to-source <ip>` адрес подменяется на указанный вручную.
*При создании ключей ssh программа-генератор предлагает ввести пароль. Зачем он нужен и для чего используется?*
Пароль защищает приватный ключ. Даже если файл ключа попадёт в чужие руки, без пароля им нельзя воспользоваться.
*При первом подключении по ssh к новому серверу вам выводится хэш и программа предлагает принять его или отклонить. Зачем это нужно?*
Это fingerprint публичного ключа сервера. Он нужен, чтобы убедиться, что мы подключаемся к правильному серверу, а не к подменённому. После подтверждения отпечаток сохраняется в `~/.ssh/known_hosts`. Если при следующем подключении хэш изменился SSH предупредит о возможной подмене.
*Как на сервере ssh определить сколько подключений по ssh есть и от каких пользователей?*
```bash
ss -tuna | grep ':22'
```
или
```bash
who
```
или
```bash
ps aux | grep sshd
```
`sshd` показывает каждое активное соединение, `who` кто вошёл в систему, с каких ip, и сколько пользователей сейчас в системе.
*Если у двух пользователей в Linux будут одинаковые пароли, то сможем ли мы понять это по данным в файле `/etc/shadow`? Почему?*
Нет. Файл `/etc/shadow` хранит хэши паролей с солью, то есть у каждого пароля добавляется случайное значение перед хэшированием. Даже если два пользователя используют одинаковый пароль, их хэши будут разными.
*Заполните таблицу, описывающую действие различных атрибутов прав (r, w, x) и атрибутов безопасности (suid, sgid, stiky bit) при назначении их файлу или каталогу. В таблице должны быть следующие столбцы:*
#table(columns: 4)[*атрибут*][*сокращенное название*][*значение действия для файла*][*значение действия для каталога*][read][r][разрешает чтение файла][разрешает просматривать содержимое каталога `ls`][write][w][разрешает изменять или удалять файл][разрешает создавать и удалять файлы внутри каталога][execute][x][разрешает выполнять файл как программу][разрешает входить в каталог `cd`][setuid][s (u+s)][файл выполняется с правами владельца][не применяется][setgid][s (g+s)][файл выполняется с правами группы][новые файлы внутри каталога наследуют группу каталога][sticky][t][не применяется][удалять файлы может только владелец или root (пример: /tmp)]
*В Linux существует расширенные права на файлы или каталоги. Работать с ними можно с помощью утилит satfacl и getfacl. Приведите пример команды, с помощью которой мы можем дать конкретному пользователю все права на файл, не делая его владельцем и не добавляя его в группы.*
Чтобы дать пользователю `vlad` все права на файл `/DATA/info.txt`, не меняя владельца и групп:
```bash
sudo setfacl -m u:vlad:rwx /DATA/info.txt
```
Проверить можно при помощи:
```bash
getfacl /DATA/info.txt
```
=== Вывод.
В ходе лабораторной работы я изучил основы администрирования linux-систем: настройка nat, управление пользователями и правами доступа, работа с acl, организация аутентификации по ssh-ключам и настройка sudo. На практике реализовано взаимодействие двух виртуальных машин, проброс портов и защита доступа.