fix all homeworks in 03-sysadmin

This commit is contained in:
2022-05-06 11:28:52 +07:00
parent 6867d8f214
commit dd9731b3d5
8 changed files with 239 additions and 85 deletions

View File

@@ -3,21 +3,29 @@
## Q/A
1. Какого типа команда `cd`?
### Задача 1
> Какого типа команда `cd`?
При вызове `type cd` будет выведено, что `cd is a shell builtin`, то есть команда встроенная в оболочку.
Данная команда необходима для работы пользователя с терминалом и для работы других команд, именно поэтому она встроена в ядро операционной системы.
2. Какая альтернатива без pipe команде `grep <some_string> <some_file> | wc -l`?
### Задача 2
> Какая альтернатива без pipe команде `grep <some_string> <some_file> | wc -l`?
Альтернативой является команда `grep -c <some_string> <some_file>`.
3. Какой процесс с PID 1 является родителем для всех процессов в вашей виртуальной машине Ubuntu 20.04?
### Задача 3
> Какой процесс с PID 1 является родителем для всех процессов в вашей виртуальной машине Ubuntu 20.04?
Найти родителя всех процессов можно вызвав команду `pstree -p | grep \(1\)`.
Ответ: процесс с PID 1 - `systemd`.
4. Как будет выглядеть команда, которая перенаправит вывод stderr `ls` на другую сессию терминала?
### Задача 4
> Как будет выглядеть команда, которая перенаправит вывод stderr `ls` на другую сессию терминала?
Откроем два терминала на виртуальной машине. Для каждого из них будет создан новый файл в директории `/dev/pts/`.
Таким образом, если мы хотим перенаправить stderr команды, то нужно выполнить следующие действия:
@@ -28,7 +36,9 @@
ls /some/invalid/dir 2>&1 1>&/dev/pts/<n>
```
5. Получится ли одновременно передать команде файл на stdin и вывести ее stdout в другой файл?
### Задача 4
> Получится ли одновременно передать команде файл на stdin и вывести ее stdout в другой файл?
Да, подобное можно реализовать следующим способом.
@@ -42,20 +52,26 @@ cat out_file
Содержимое out_file является выводом команды grep, а именно одна строка `abc`.
6. Получится ли находясь в графическом режиме, вывести данные из PTY в какой-либо из эмуляторов TTY? Сможете ли вы наблюдать выводимые данные?
### Задача 6
> Получится ли находясь в графическом режиме, вывести данные из PTY в какой-либо из эмуляторов TTY? Сможете ли вы наблюдать выводимые данные?
Да, подобное возможно. Достаточно, например, открыть новую сессию терминала в графической оболочке и выполнить перенаправление потока в `/dev/pts/<n>`.
Так же любая программа с графическим интерфейсом может выполнить данное действие. Наблюдать данные возможно,
если открыт терминал, подключённый к конкретной сессии.
7. Выполните команду `bash 5>&1`. К чему она приведет? Что будет, если вы выполните `echo netology > /proc/$$/fd/5`? Почему так происходит?
### Задача 7
> Выполните команду `bash 5>&1`. К чему она приведет? Что будет, если вы выполните `echo netology > /proc/$$/fd/5`? Почему так происходит?
Насколько я понимаю, команда `bash 5>&1` создаёт новую терминальную сессию с перенаправлением потока из `5` в `1`, то есть в `stdout`.
Но так как `5` - это не стандартный идентификатор потока, поэтому оболочка создаст новый файл `/proc/$$/fd/5`.
Данный файл будет алиасом для stdout, поэтому выполнение `echo` выведет содержимое в терминал,
как это сделал бы обычный вызов команды без перенаправлений потока.
8. Получится ли в качестве входного потока для pipe использовать только stderr команды, не потеряв при этом отображение stdout на pty?
### Задача 8
> Получится ли в качестве входного потока для pipe использовать только stderr команды, не потеряв при этом отображение stdout на pty?
Да, такая возможность есть. Сначала необходимо запустить терминал с новым перенаправлением, как в предыдущем вопросе: `bash 5>&1`.
Затем уже можно выполнить перенаправление потоков следующим образом:
@@ -66,22 +82,30 @@ ls -la /tmp/wrong_dir 2>&1 1>&5 | less
Таким образом в команду `less` попадёт следующий текст: `ls: cannot access '/tmp/wrong_dir': No such file or directory`.
9. Что выведет команда `cat /proc/$$/environ`? Как еще можно получить аналогичный по содержанию вывод?
### Задача 9
> Что выведет команда `cat /proc/$$/environ`? Как еще можно получить аналогичный по содержанию вывод?
Данная команда выведет все переменные окружения, которые инициализированы в текущей сессии терминала.
Аналогичный результат может быть достигнут вызовом команд `printenv` или `env`.
10. Используя `man`, опишите что доступно по адресам `/proc/<PID>/cmdline`, `/proc/<PID>/exe`.
### Задача 11
> Используя `man`, опишите что доступно по адресам `/proc/<PID>/cmdline`, `/proc/<PID>/exe`.
Файл `/proc/<PID>/cmdline` - это файл, предназначенный только для чтения, который содержит в себе полную команду процесса, но только если процесс не зомби.
Файл `/proc/<PID>/exe` - это файл-символическая ссылка, содержащая актуальный полный путь до выполняемой команды.
11. Узнайте, какую наиболее старшую версию набора инструкций SSE поддерживает ваш процессор с помощью `/proc/cpuinfo`
### Задача 12
> Узнайте, какую наиболее старшую версию набора инструкций SSE поддерживает ваш процессор с помощью `/proc/cpuinfo`
Выполним команду `cat /proc/cpuinfo | grep sse`. В выводе можно найти такие версии, как `sse`, `sse2`, `ssse3`, `sse4_1`, `sse4_2`.
Таким образом, ответом на вопрос будет `sse4_2`.
12. Почему команда `ssh localhost 'tty'` внутри виртуальной машины выдаёт ошибку `not a tty`
### Задача 13
> Почему команда `ssh localhost 'tty'` внутри виртуальной машины выдаёт ошибку `not a tty`
Изначально, нужно понять, что происходит при выполнении исходной команды. Судя по мануалу команды `ssh`,
`localhost` является пунктом назначения, куда будет произведено подключение,
@@ -93,7 +117,9 @@ ls -la /tmp/wrong_dir 2>&1 1>&5 | less
Изменить поведение можно принудительно заставив `ssh` создать новую сессию, для этого нужно добавить ключ `-t`,
то есть выполнить команду `ssh -t localhost 'tty'`.
13. Необходимо переместить запущенный процесс из одной сессии в другую с использованием утилиты `reptyr`
### Задача 14
> Необходимо переместить запущенный процесс из одной сессии в другую с использованием утилиты `reptyr`
На виртуальной машине утилита не установлена, поэтому установим её `sudo apt install reptyr`.
В качестве примера запустим утилиту `screen`, которая запустит новую сессию внутри себя.
@@ -104,7 +130,9 @@ ls -la /tmp/wrong_dir 2>&1 1>&5 | less
К сожалению, полностью перенести процесс не получилось, есть какие-то странные ошибки по типу `Operation not permitted`
или "зависания" второго терминала, если выполнить команду от администратора.
14. Узнайте что делает команда `tee` и почему в отличие от `sudo echo` команда с `sudo tee` будет работать.
### Задача 15
> Узнайте что делает команда `tee` и почему в отличие от `sudo echo` команда с `sudo tee` будет работать.
Команда `tee` читает стандартный поток ввода и пишет его в стандартный поток вывода и файлы.
В отличие от `echo` перенаправление идёт в рамках одного процесса, именно поэтому `sudo tee` будет работать,

View File

@@ -3,7 +3,9 @@
## Q/A
1. Какой системный вызов делает команда `cd`?
### Задача 1
> Какой системный вызов делает команда `cd`?
Для удобства поиска перенаправим вывод команды `strace` в утилиту `less`
@@ -14,7 +16,9 @@ strace /bin/bash -c 'cd /tmp' 2>&1 | less
Далее, найдём в трейсе упоминание директории `tmp`, указанной в команде. Таким образом, обнаружим, что команда `cd`
делает системный вызов `chdir("/tmp")`.
2. Используя `strace` выясните, где находится база данных `file` на основании которой она делает свои догадки.
### Задача 2
> Используя `strace` выясните, где находится база данных `file` на основании которой она делает свои догадки.
При использовании команды `file` на любом файле, `strace` выведет такую строку:
@@ -24,7 +28,9 @@ openat(AT_FDCWD, "/usr/share/misc/magic.mgc", O_RDONLY) = 3
Предположительно, `/usr/share/misc/magic.mgc` - это и есть база данных для команды `file`.
3. Предложите способ обнуления открытого удаленного файла (чтобы освободить место на файловой системе)
### Задача 3
> Предложите способ обнуления открытого удаленного файла (чтобы освободить место на файловой системе)
Зная PID процесса и то, что каждый процесс пишет свои потоки в файлы в директории `/proc/<PID>/fd`.
Таким образом, можно найти конкретный поток, который пишет в файл, вызвав команду
@@ -48,12 +54,16 @@ lr-x------ 1 vagrant vagrant 64 Feb 16 03:25 3 -> /tmp/do_not_delete_me
echo "" > /proc/1988/fd/3
```
4. Занимают ли зомби-процессы какие-то ресурсы в ОС (CPU, RAM, IO)?
### Задача 4
> Занимают ли зомби-процессы какие-то ресурсы в ОС (CPU, RAM, IO)?
Нет, zombie-процессы не используют никаких ресурсов операционной системы.
Единственное, что они занимают - это идентификатор процесса.
5. На какие файлы вы увидели вызовы группы `open` за первую секунду работы утилиты `opensnoop-bpfcc`?
### Задача 5
> На какие файлы вы увидели вызовы группы `open` за первую секунду работы утилиты `opensnoop-bpfcc`?
За первую секунду работы утилиты был произведён следующий вывод:
@@ -68,8 +78,10 @@ PID COMM FD ERR PATH
619 dbus-daemon 19 0 /var/lib/snapd/dbus-1/system-services/
```
6. Какой системный вызов использует `uname -a`? Приведите цитату из man по этому системному вызову,
где описывается альтернативное местоположение в /proc, где можно узнать версию ядра и релиз ОС.
### Задача 5
> Какой системный вызов использует `uname -a`? Приведите цитату из man по этому системному вызову,
> где описывается альтернативное местоположение в /proc, где можно узнать версию ядра и релиз ОС.
Утилита `uname` использует системный вызов `uname`, мануал к которому можно прочитать командой `man 2 uname`.
@@ -79,15 +91,17 @@ PID COMM FD ERR PATH
PS. На виртуальной машине не было установленных мануалов для системных вызовов. Чтобы их установить,
нужно выполнить команду `sudo apt install manpages-dev`.
7. Чем отличается последовательность команд через `;` и через `&&` в bash?
Есть ли смысл использовать в bash `&&`, если применить `set -e`?
### Задача 7
> Чем отличается последовательность команд через `;` и через `&&` в bash?
> Есть ли смысл использовать в bash `&&`, если применить `set -e`?
При использовании `&&` будет учитываться код выхода предыдущей выполненой команды. Если он не 0, то выполнение последовательности будет прервано.
В случае же `;` последовательность будет выполнена в любом случае.
В случае `set -e` параметр имеет следующее определение
>When this option is on, if a simple command fails for any of the reasons listed in Consequences of Shell Errors or returns an exit status value >0,
> When this option is on, if a simple command fails for any of the reasons listed in Consequences of Shell Errors or returns an exit status value >0,
> and is not part of the compound list following a while, until, or if keyword,
> and is not a part of an AND or OR list,
> and is not a pipeline preceded by the ! reserved word, then the shell shall immediately exit.
@@ -95,7 +109,9 @@ PS. На виртуальной машине не было установлен
То есть, если данная команда будет выполнена в связке с другими командами, то она не сможет прервать выполнение последовательности.
Таким образом, для данной команды использование `&&` и `;` будет иметь одинаковое поведение.
8. Из каких опций состоит режим bash `set -euxo pipefail` и почему его хорошо было бы использовать в сценариях?
### Задача 8
> Из каких опций состоит режим bash `set -euxo pipefail` и почему его хорошо было бы использовать в сценариях?
Параметр `-e` уже был рассмотрен в предыдущем вопросе.
@@ -107,7 +123,9 @@ PS. На виртуальной машине не было установлен
`-o` - устанавливает настройку работы последовательности команд. В данном случае значение `pipefail` говорит о том,
что статус работы всей последовательности будет значение последней команды с ненулевым кодом выхода или 0, если все команды выполнились успешно.
9. Используя `-o stat` для `ps`, определите, какой наиболее часто встречающийся статус у процессов в системе.
### Задача 9
> Используя `-o stat` для `ps`, определите, какой наиболее часто встречающийся статус у процессов в системе.
Выполним данную команду на виртуальной машине
```shell

View File

@@ -3,7 +3,9 @@
## Q/A
1. Создайте самостоятельно простой unit-файл для [node_exporter](https://github.com/prometheus/node_exporter)
### Задача 1
> Создайте самостоятельно простой unit-файл для [node_exporter](https://github.com/prometheus/node_exporter)
Для начала необходимо установить `node_exporter` в систему. Для этого воспользуемся [официальным гайдом](https://prometheus.io/docs/guides/node-exporter/#installing-and-running-the-node-exporter),
а именно:
@@ -119,7 +121,9 @@ sudo systemctl status prometheus_node_exporter
<...>
```
2. Приведите несколько опций, которые вы бы выбрали для базового мониторинга хоста по CPU, памяти, диску и сети.
### Задача 2
> Приведите несколько опций, которые вы бы выбрали для базового мониторинга хоста по CPU, памяти, диску и сети.
По умолчанию в `node_exporter` включено достаточно много различной информации (~1000 строк). Поэтому, на мой взгляд,
для начала стоит включить только следующие флаги:
@@ -130,7 +134,9 @@ sudo systemctl status prometheus_node_exporter
* `--collector.os` - отображение информации об операционной системе
* `--collector.time` - отображение информации о текущем системном времени
3. Ознакомьтесь с метриками, которые по умолчанию собираются `Netdata`, и с комментариями, которые даны к этим метрикам.
### Задача 3
> Ознакомьтесь с метриками, которые по умолчанию собираются `Netdata`, и с комментариями, которые даны к этим метрикам.
`netdata` отображает следующие метрики:
* `cpu` - утилизация CPU по всем ядрам
@@ -143,12 +149,16 @@ sudo systemctl status prometheus_node_exporter
Доступны так же подробные графики по каждой из категорий.
4. Можно ли по выводу `dmesg` понять, осознает ли ОС, что загружена не на настоящем оборудовании, а на системе виртуализации?
### Задача 4
> Можно ли по выводу `dmesg` понять, осознает ли ОС, что загружена не на настоящем оборудовании, а на системе виртуализации?
В `dmesg` можно найти следующий вывод `Detected virtualization oracle.` от `systemd`. Таким образом да, можно понять, что система осознаёт,
что находится внутри виртуальной машины, а не на физическом оборудовании.
5. Как настроен `sysctl fs.nr_open` на системе по-умолчанию? Какой другой существующий лимит не позволит достичь такого числа?
### Задача 5
> Как настроен `sysctl fs.nr_open` на системе по-умолчанию? Какой другой существующий лимит не позволит достичь такого числа?
```shell
sysctl fs.nr_open
@@ -159,7 +169,9 @@ fs.nr_open = 1048576
Для текущей сессии bash можно посмотреть и изменить ограничение при помощи команды `ulimit -n`.
Для конкретных групп и пользователей ограничения можно задать в файле `/etc/security/limits.conf`.
6. Запустите любой долгоживущий процесс в отдельном неймспейсе процессов; покажите, что ваш процесс работает под PID 1 через `nsenter`.
### Задача 6
> Запустите любой долгоживущий процесс в отдельном неймспейсе процессов; покажите, что ваш процесс работает под PID 1 через `nsenter`.
Запустим процесс `bash` в изолированном пространстве имён:
@@ -195,10 +207,12 @@ root 21 0.0 0.3 8960 4000 pts/1 S 03:35 0:00 -bash
root 52 0.0 0.3 10616 3252 pts/1 R+ 03:36 0:00 ps aux
```
7. Найдите информацию о том, что такое `:(){ :|:& };:`.
Запустите эту команду в своей виртуальной машине. Некоторое время все будет "плохо", после чего (минуты) ОС должна стабилизироваться.
Вызов `dmesg` расскажет, какой механизм помог автоматической стабилизации.
Как настроен этот механизм по-умолчанию, и как изменить число процессов, которое можно создать в сессии?
### Задача 7
> Найдите информацию о том, что такое `:(){ :|:& };:`.
> Запустите эту команду в своей виртуальной машине. Некоторое время все будет "плохо", после чего (минуты) ОС должна стабилизироваться.
> Вызов `dmesg` расскажет, какой механизм помог автоматической стабилизации.
> Как настроен этот механизм по-умолчанию, и как изменить число процессов, которое можно создать в сессии?
Команда - это `fork bomb`, которую можно разделить на следующие блоки:

View File

@@ -3,7 +3,9 @@
## Q/A
1. Разряженные файлы
### Задача 1
> Разряженные файлы
Суть таких файлов в том, чтобы разделить реальные данные последовательностью нуль-символов (`\x00`), которые не занимают реального места на физическом носителе.
При этом сами данные записываются на разных фрагментах на физическом диске.
@@ -12,12 +14,16 @@
Это позволяет сделать запись туда, где доступно 1-2KB (например, после удаления другого файла),
но куда оригинальный файл целиком не поместится.
2. Могут ли файлы, являющиеся жесткой ссылкой на один объект, иметь разные права доступа и владельца? Почему?
### Задача 2
> Могут ли файлы, являющиеся жесткой ссылкой на один объект, иметь разные права доступа и владельца? Почему?
Не могут. Причина в том, что жёсткие ссылки всегда ссылаются на одну `Inode` (идентификатор объекта файла внутри ОС).
То есть, все файлы, которые имеют одну `Inode` будут синхронизированы по: содержимому, правам доступа и другим мета-данным.
3. Реконфигурация виртуальной машины
### Задача 3
> Реконфигурация виртуальной машины
В текущую конфигурацию [`vagrant`](/src/vagrant/Vagrantfile) добавлена конфигурация дисков:
@@ -40,7 +46,9 @@ lvm_experiments_disk0.vmdk
lvm_experiments_disk1.vmdk
```
4. Используя `fdisk`, разбейте первый диск на 2 раздела: 2 Гб, оставшееся пространство.
### Задача 4
> Используя `fdisk`, разбейте первый диск на 2 раздела: 2 Гб, оставшееся пространство.
Найдём диски, которые были подключены на предыдущем шаге
@@ -116,7 +124,9 @@ Device Start End Sectors Size Type
/dev/sdb2 4196352 5242846 1046495 511M Linux filesystem
```
5. Используя `sfdisk`, перенесите данную таблицу разделов на второй диск.
### Задача 5
> Используя `sfdisk`, перенесите данную таблицу разделов на второй диск.
Перенесём таблицу разделов с `/dev/sdb` на `/dev/sdc`.
@@ -174,7 +184,9 @@ Device Start End Sectors Size Type
/dev/sdc2 4196352 5242846 1046495 511M Linux filesystem
```
6. Соберите `mdadm` `RAID1` на паре разделов 2 Гб.
### Задача 6
> Соберите `mdadm` `RAID1` на паре разделов 2 Гб.
Разделы, которые необходимо объединить в `RAID1`: `/dev/sdb1` и `/dev/sdc1`.
@@ -184,7 +196,9 @@ mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
```
7. Соберите `mdadm` `RAID0` на второй паре маленьких разделов
### Задача 7
> Соберите `mdadm` `RAID0` на второй паре маленьких разделов
Разделы, которые необходимо объединить в `RAID0`: `/dev/sdb2` и `/dev/sdc2`.
@@ -194,7 +208,9 @@ mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
```
8. Создайте 2 независимых PV на получившихся md-устройствах
### Задача 8
> Создайте 2 независимых PV на получившихся md-устройствах
```shell
sudo pvcreate /dev/md0
@@ -228,7 +244,9 @@ sudo pvdisplay
PV UUID PB8hEQ-bZGA-M6Xe-tOQV-1CAb-DRSf-syoUSA
```
9. Создайте общую volume-group на этих двух PV.
### Задача 9
> Создайте общую volume-group на этих двух PV.
```shell
sudo vgcreate test_vg /dev/md0 /dev/md1
@@ -257,7 +275,9 @@ sudo vgdisplay
VG UUID 7xcN3Z-o9Ca-iXl2-5eao-iA4e-cEVJ-YgSajr
```
10. Создайте LV размером 100 Мб, указав его расположение на PV с `RAID0`.
### Задача 10
> Создайте LV размером 100 Мб, указав его расположение на PV с `RAID0`.
```shell
sudo lvcreate --size=100MB test_vg /dev/md1
@@ -282,7 +302,9 @@ sudo lvdisplay
Block device 253:1
```
11. Создайте `mkfs.ext4` ФС на получившемся `LV`
### Задача 11
> Создайте `mkfs.ext4` ФС на получившемся `LV`
```shell
sudo mkfs.ext4 /dev/test_vg/lvol0
@@ -295,14 +317,18 @@ Creating journal (1024 blocks): done
Writing superblocks and filesystem accounting information: done
```
12. Смонтируйте этот раздел в любую директорию.
### Задача 12
> Смонтируйте этот раздел в любую директорию.
```shell
mkdir /tmp/new
sudo mount /dev/test_vg/lvol0 /tmp/new
```
13. Поместите туда тестовый файл.
### Задача 13
> Поместите туда тестовый файл.
```shell
sudo wget https://mirror.yandex.ru/ubuntu/ls-lR.gz -O /tmp/new/test.gz
@@ -317,7 +343,9 @@ Saving to: /tmp/new/test.gz
2022-03-02 03:04:09 (9.33 MB/s) - /tmp/new/test.gz saved [22388361/22388361]
```
14. Прикрепите вывод `lsblk`.
### Задача 14
> Прикрепите вывод `lsblk`.
```shell
sudo lsblk
@@ -347,7 +375,9 @@ sdc 8:32 0 2.5G 0 disk
└─test_vg-lvol0 253:1 0 100M 0 lvm /tmp/new
```
15. Протестируйте целостность файла
### Задача 15
> Протестируйте целостность файла
```shell
sudo gzip -t /tmp/new/test.gz
@@ -356,7 +386,9 @@ echo $?
0
```
16. Используя `pvmove`, переместите содержимое PV с `RAID0` на `RAID1`.
### Задача 16
> Используя `pvmove`, переместите содержимое PV с `RAID0` на `RAID1`.
```shell
sudo pvmove /dev/md1 /dev/md0
@@ -364,14 +396,18 @@ sudo pvmove /dev/md1 /dev/md0
/dev/md1: Moved: 100.00%
```
17. Сделайте `--fail` на устройство в вашем `RAID1` md.
### Задача 17
> Сделайте `--fail` на устройство в вашем `RAID1` md.
```shell
sudo mdadm --fail /dev/md0 /dev/sdb1
mdadm: set /dev/sdb1 faulty in /dev/md0
```
18. Подтвердите выводом `dmesg`, что `RAID1` работает в деградированном состоянии
### Задача 18
> Подтвердите выводом `dmesg`, что `RAID1` работает в деградированном состоянии
```shell
sudo dmesg | tail -n 5
@@ -382,7 +418,9 @@ sudo dmesg | tail -n 5
md/raid1:md0: Operation continuing on 1 devices.
```
19. Протестируйте целостность файла, несмотря на "сбойный" диск он должен продолжать быть доступен
### Задача 19
> Протестируйте целостность файла, несмотря на "сбойный" диск он должен продолжать быть доступен
```shell
sudo gzip -t /tmp/new/test.gz

View File

@@ -3,7 +3,9 @@
## Q/A
1. Работа c HTTP через телнет.
### Задача 1
> Работа c HTTP через телнет.
```shell
telnet stackoverflow.com 80
@@ -34,7 +36,9 @@ Set-Cookie: prov=a65f8cdf-ae94-33aa-2d32-b4ba53feba61; domain=.stackoverflow.com
В ответ пришёл статус код `301`, который означает постоянное перемещение с запрашиваемой страницы.
2. Повторите задание 1 в браузере, используя консоль разработчика F12.
### Задача 2
> Повторите задание 1 в браузере, используя консоль разработчика F12.
Код ответа при заходе на сайт `http://stackoverflow.com`: `Status Code: 307 Internal Redirect`.
Наиболее долгих по загрузке запрос - это запрос на загрузку самой страницы после редиректа (`https://stackoverflow.com/`).
@@ -42,7 +46,9 @@ Set-Cookie: prov=a65f8cdf-ae94-33aa-2d32-b4ba53feba61; domain=.stackoverflow.com
![stackoverflow.png](stackoverflow.png)
3. Какой IP адрес у вас в интернете?
### Задача 3
> Какой IP адрес у вас в интернете?
Чтобы узнать текущий внешний ip-адрес, можно воспользоваться онлайн сервисами, такими как [myip.com](https://www.myip.com/) или [whoer.net](https://whoer.net/).
В дополнение к этому, можно использовать только консоль и команду `dig`:
@@ -57,7 +63,9 @@ dig TXT +short o-o.myaddr.l.google.com @ns1.google.com
Ответ: `46.181.144.146`.
4. Какому провайдеру принадлежит ваш IP адрес? Какой автономной системе AS?
### Задача 4
> Какому провайдеру принадлежит ваш IP адрес? Какой автономной системе AS?
```shell
whois 46.181.144.146
@@ -77,7 +85,9 @@ source: RIPE
Ответ: оператор - `Goodline.info`, AS - `AS39927`.
5. Через какие сети проходит пакет, отправленный с вашего компьютера на адрес 8.8.8.8? Через какие AS?
### Задача 5
> Через какие сети проходит пакет, отправленный с вашего компьютера на адрес 8.8.8.8? Через какие AS?
По умолчанию утилита `traceroute` не установлена в системе ubuntu. Для её установки достаточно выполнить команду
@@ -111,7 +121,9 @@ traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
19 * dns.google (8.8.8.8) [AS15169] 57.661 ms 56.687 ms
```
6. Повторите задание 5 в утилите mtr. На каком участке наибольшая задержка - delay?
### Задача 6
> Повторите задание 5 в утилите mtr. На каком участке наибольшая задержка - delay?
```shell
mtr -w 8.8.8.8
@@ -140,7 +152,9 @@ HOST: host Loss% Snt Last Avg
Наибольшая задержка была на 7-ом хопе с худшим показателем в 81ms.
7. Какие DNS сервера отвечают за доменное имя `dns.google`? Какие A записи?
### Задача 7
> Какие DNS сервера отвечают за доменное имя `dns.google`? Какие A записи?
```shell
dig dns.google
@@ -168,7 +182,9 @@ dns.google. 370 IN A 8.8.8.8
Ответ: dns-сервера с ip-адресами `8.8.4.4` и `8.8.8.8`. Оба адреса являются `A`-записями.
9. Проверьте PTR записи для IP адресов из задания 7. Какое доменное имя привязано к IP?
### Задача 9
> Проверьте PTR записи для IP адресов из задания 7. Какое доменное имя привязано к IP?
```shell
dig -x 8.8.4.4
@@ -212,4 +228,4 @@ dig -x 8.8.8.8
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Ср мар 09 10:33:34 +07 2022
;; MSG SIZE rcvd: 73
```
```

View File

@@ -3,17 +3,23 @@
## Q/A
1. Проверьте список доступных сетевых интерфейсов на вашем компьютере. Какие команды есть для этого в Linux и в Windows?
### Задача 1
> Проверьте список доступных сетевых интерфейсов на вашем компьютере. Какие команды есть для этого в Linux и в Windows?
В Linux можно выполнить команду `ip link`, которая покажет все сетевые интерфейсы, включая виртуальные.
Для Windows аналогом данной команды является вызов `ipconfig /all`.
2. Какой протокол используется для распознавания соседа по сетевому интерфейсу? Какой пакет и команды есть в Linux для этого?
### Задача 2
> Какой протокол используется для распознавания соседа по сетевому интерфейсу? Какой пакет и команды есть в Linux для этого?
Для получения информации о соседнем устройстве используется протокол [LLDP](https://en.wikipedia.org/wiki/Link_Layer_Discovery_Protocol).
Данный протокол в ОС Linux реализован в утилите `lldpd`.
3. Какая технология используется для разделения L2 коммутатора на несколько виртуальных сетей? Какой пакет и команды есть в Linux для этого? Приведите пример конфига.
### Задача 3
> Какая технология используется для разделения L2 коммутатора на несколько виртуальных сетей? Какой пакет и команды есть в Linux для этого? Приведите пример конфига.
Технология имеет название [VLAN](https://en.wikipedia.org/wiki/Virtual_LAN).
В Linux для управления виртуальными сетями используется пакет `vlan`, а именно утилита `vconfig` (устарела, рекомендуется использовать утилиту `ip route`).
@@ -28,7 +34,9 @@ iface eth0.1400 inet static
vlan_raw_device eth0
```
4. Какие типы агрегации интерфейсов есть в Linux? Какие опции есть для балансировки нагрузки? Приведите пример конфига.
### Задача 4
> Какие типы агрегации интерфейсов есть в Linux? Какие опции есть для балансировки нагрузки? Приведите пример конфига.
В конфигурации Linux предусмотрены следующие типы агрегации:
* static/manual - ручная статическая настройка
@@ -70,7 +78,9 @@ iface bond0 inet dhcp
bond-miimon 100
```
5. Сколько IP адресов в сети с маской `/29` ? Сколько `/29` подсетей можно получить из сети с маской `/24`. Приведите несколько примеров `/29` подсетей внутри сети `10.10.10.0/24`.
### Задача 5
> Сколько IP адресов в сети с маской `/29` ? Сколько `/29` подсетей можно получить из сети с маской `/24`. Приведите несколько примеров `/29` подсетей внутри сети `10.10.10.0/24`.
Всего в сети с маской `/29` находятся 8 IP адресов, 2 из которых зарезервированы.
@@ -83,13 +93,17 @@ iface bond0 inet dhcp
* `10.10.10.9/29`
* `10.10.10.19/29`
6. Задача: вас попросили организовать стык между 2-мя организациями. Диапазоны `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16` уже заняты. Из какой подсети допустимо взять частные IP адреса? Маску выберите из расчета максимум 40-50 хостов внутри подсети.
### Задача 6
> Задача: вас попросили организовать стык между 2-мя организациями. Диапазоны `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16` уже заняты. Из какой подсети допустимо взять частные IP адреса? Маску выберите из расчета максимум 40-50 хостов внутри подсети.
Так как самые ходовые сети, используемые для внутренних сетей, уже заняты, то остаётся только вариант с сетью `100.64.0.0/10`.
Если рассчитывать на 40-50 хостов в рамках данной сети, то можно взять подсеть `100.64.0.0/26`,
у которой будет диапазон доступных адресов `100.64.0.1 - 100.64.0.62`.
7. Как проверить ARP таблицу в Linux, Windows? Как очистить ARP кеш полностью? Как из ARP таблицы удалить только один нужный IP?
### Задача 7
> Как проверить ARP таблицу в Linux, Windows? Как очистить ARP кеш полностью? Как из ARP таблицы удалить только один нужный IP?
Работа с ARP-таблицами:
* linux

View File

@@ -3,7 +3,9 @@
## Q/A
1. Подключитесь к публичному маршрутизатору в интернет. Найдите маршрут к вашему публичному IP
### Задача 1
> Подключитесь к публичному маршрутизатору в интернет. Найдите маршрут к вашему публичному IP
```shell
telnet route-views.routeviews.org
@@ -58,7 +60,9 @@ Paths: (23 available, best #22, table default)
<...>
```
2. Создайте dummy0 интерфейс в Ubuntu. Добавьте несколько статических маршрутов. Проверьте таблицу маршрутизации.
### Задача 2
> Создайте dummy0 интерфейс в Ubuntu. Добавьте несколько статических маршрутов. Проверьте таблицу маршрутизации.
Создание dummy-интерфейса:
@@ -82,7 +86,9 @@ default via 10.0.2.2 dev eth0 proto dhcp src 10.0.2.15 metric 100
10.2.2.3 via 10.0.2.16 dev eth0
```
3. Проверьте открытые TCP порты в Ubuntu, какие протоколы и приложения используют эти порты? Приведите несколько примеров.
### Задача 3
> Проверьте открытые TCP порты в Ubuntu, какие протоколы и приложения используют эти порты? Приведите несколько примеров.
Для вывода открытых TCP-портов используем утилиту `ss` со следующими флагами:
* `-t` вывод только TCP-портов
@@ -100,7 +106,9 @@ LISTEN 0 128
В данном случае открыты только порты для соединения по `ssh` (порты `:22`) и для [`systemd-resolved`](https://www.freedesktop.org/software/systemd/man/systemd-resolved.service.html) (порт `:53`).
4. Проверьте используемые UDP сокеты в Ubuntu, какие протоколы и приложения используют эти порты?
### Задача 4
> Проверьте используемые UDP сокеты в Ubuntu, какие протоколы и приложения используют эти порты?
По аналогии с предыдущим заданием используем утилиту `ss`, заменив флаг `-t` на `-u`
@@ -114,7 +122,9 @@ UNCONN 0 0
Порт `:53` предназначается для использования [`systemd-resolved`](https://www.freedesktop.org/software/systemd/man/systemd-resolved.service.html),
а порт `68` используется для получения информации о динамической IP-адресации от DHCP-сервера.
5. Используя diagrams.net, создайте L3 диаграмму вашей домашней сети или любой другой сети, с которой вы работали.
### Задача 5
> Используя diagrams.net, создайте L3 диаграмму вашей домашней сети или любой другой сети, с которой вы работали.
В качестве сети взята стандартная домашняя сеть с wi-fi-роутером.
@@ -122,7 +132,9 @@ UNCONN 0 0
![network.png](network.png)
6. Установите Nginx, настройте в режиме балансировщика TCP или UDP.
### Задача 6
> Установите Nginx, настройте в режиме балансировщика TCP или UDP.
Установка nginx:

View File

@@ -3,19 +3,25 @@
## Q/A
1. Установите Bitwarden плагин для браузера. Зарегестрируйтесь и сохраните несколько паролей.
### Задача 1
> Установите Bitwarden плагин для браузера. Зарегестрируйтесь и сохраните несколько паролей.
![bitwarden](bitwarden.png)
2. Установите Google authenticator на мобильный телефон. Настройте вход в Bitwarden акаунт через Google authenticator OTP.
### Задача 2
> Установите Google authenticator на мобильный телефон. Настройте вход в Bitwarden акаунт через Google authenticator OTP.
Заместо `Google Authenticator` использовал приложение `Microsoft Authenticator`.
![birtwarden](bitwarden-2fa.png)
3. Установите apache2, сгенерируйте самоподписанный сертификат, настройте тестовый сайт для работы по HTTPS.
### Задача 3
Вместо `apache2` будем производить настройку уже установленного в виртуальную машину `nginx` (установка производилась в [дз 3.8:6](/src/homework/03-sysadmin/3.8sysadmin/3.8/readme.md#Q/A)).
> Установите apache2, сгенерируйте самоподписанный сертификат, настройте тестовый сайт для работы по HTTPS.
Вместо `apache2` будем производить настройку уже установленного в виртуальную машину `nginx` (установка производилась в [дз 3.8](/src/homework/03-sysadmin/3.8/readme.md#Задача 6)).
Первым шагом необходимо сгенерировать сертификат:
@@ -131,7 +137,9 @@ Commercial support is available at
</html>
```
4. Проверьте на TLS уязвимости произвольный сайт в интернете
### Задача 4
> Проверьте на TLS уязвимости произвольный сайт в интернете
```shell
git clone --depth 1 https://github.com/drwetter/testssl.sh.git
@@ -172,7 +180,9 @@ cd testssl
Done 2022-03-28 10:31:34 [ 27s] -->> 217.61.246.126:443 (metagamerscore.com) <<--
```
5. Установите на Ubuntu ssh сервер, сгенерируйте новый приватный ключ. Скопируйте свой публичный ключ на другой сервер. Подключитесь к серверу по SSH-ключу.
### Задача 5
> Установите на Ubuntu ssh сервер, сгенерируйте новый приватный ключ. Скопируйте свой публичный ключ на другой сервер. Подключитесь к серверу по SSH-ключу.
На виртуальной машине уже установлен ssh-сервер и настроен один ssh-ключ для подключения к машине с хоста.
Таким образом сгенерируем новый ssh-ключ для пользователя `vagrant` и попробуем подключиться как пользователь `root` через ssh-сервер.
@@ -217,7 +227,9 @@ Welcome to Ubuntu 20.04.4 LTS (GNU/Linux 5.4.0-104-generic x86_64)
root@vagrant:~#
```
6. Переименуйте файлы ключей из задания 5. Настройте файл конфигурации SSH клиента, так чтобы вход на удаленный сервер осуществлялся по имени сервера.
### Задача 6
> Переименуйте файлы ключей из задания 5. Настройте файл конфигурации SSH клиента, так чтобы вход на удаленный сервер осуществлялся по имени сервера.
```shell
mv ~/.ssh/id_rsa ~/.ssh/localhost_key
@@ -241,7 +253,9 @@ Welcome to Ubuntu 20.04.4 LTS (GNU/Linux 5.4.0-104-generic x86_64)
root@vagrant:~#
```
7. Соберите дамп трафика утилитой tcpdump в формате pcap, 100 пакетов. Откройте файл pcap в Wireshark.
### Задача 7
> Соберите дамп трафика утилитой tcpdump в формате pcap, 100 пакетов. Откройте файл pcap в Wireshark.
```shell
sudo tcpdump -c 100 -w dump.pcap