#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. Настройка аутентификации по ключу.

=== Часть 7. Sudo.

=== Часть 8. Получение информации о пользователях.
