mirror of
https://github.com/Dannecron/netology-devops.git
synced 2025-12-25 23:32:37 +03:00
fix all homeworks in 03-sysadmin
This commit is contained in:
@@ -3,21 +3,29 @@
|
|||||||
|
|
||||||
## Q/A
|
## Q/A
|
||||||
|
|
||||||
1. Какого типа команда `cd`?
|
### Задача 1
|
||||||
|
|
||||||
|
> Какого типа команда `cd`?
|
||||||
|
|
||||||
При вызове `type cd` будет выведено, что `cd is a shell builtin`, то есть команда встроенная в оболочку.
|
При вызове `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>`.
|
Альтернативой является команда `grep -c <some_string> <some_file>`.
|
||||||
|
|
||||||
3. Какой процесс с PID 1 является родителем для всех процессов в вашей виртуальной машине Ubuntu 20.04?
|
### Задача 3
|
||||||
|
|
||||||
|
> Какой процесс с PID 1 является родителем для всех процессов в вашей виртуальной машине Ubuntu 20.04?
|
||||||
|
|
||||||
Найти родителя всех процессов можно вызвав команду `pstree -p | grep \(1\)`.
|
Найти родителя всех процессов можно вызвав команду `pstree -p | grep \(1\)`.
|
||||||
Ответ: процесс с PID 1 - `systemd`.
|
Ответ: процесс с PID 1 - `systemd`.
|
||||||
|
|
||||||
4. Как будет выглядеть команда, которая перенаправит вывод stderr `ls` на другую сессию терминала?
|
### Задача 4
|
||||||
|
|
||||||
|
> Как будет выглядеть команда, которая перенаправит вывод stderr `ls` на другую сессию терминала?
|
||||||
|
|
||||||
Откроем два терминала на виртуальной машине. Для каждого из них будет создан новый файл в директории `/dev/pts/`.
|
Откроем два терминала на виртуальной машине. Для каждого из них будет создан новый файл в директории `/dev/pts/`.
|
||||||
Таким образом, если мы хотим перенаправить stderr команды, то нужно выполнить следующие действия:
|
Таким образом, если мы хотим перенаправить stderr команды, то нужно выполнить следующие действия:
|
||||||
@@ -28,7 +36,9 @@
|
|||||||
ls /some/invalid/dir 2>&1 1>&/dev/pts/<n>
|
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`.
|
Содержимое out_file является выводом команды grep, а именно одна строка `abc`.
|
||||||
|
|
||||||
6. Получится ли находясь в графическом режиме, вывести данные из PTY в какой-либо из эмуляторов TTY? Сможете ли вы наблюдать выводимые данные?
|
### Задача 6
|
||||||
|
|
||||||
|
> Получится ли находясь в графическом режиме, вывести данные из PTY в какой-либо из эмуляторов TTY? Сможете ли вы наблюдать выводимые данные?
|
||||||
|
|
||||||
Да, подобное возможно. Достаточно, например, открыть новую сессию терминала в графической оболочке и выполнить перенаправление потока в `/dev/pts/<n>`.
|
Да, подобное возможно. Достаточно, например, открыть новую сессию терминала в графической оболочке и выполнить перенаправление потока в `/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`.
|
Насколько я понимаю, команда `bash 5>&1` создаёт новую терминальную сессию с перенаправлением потока из `5` в `1`, то есть в `stdout`.
|
||||||
Но так как `5` - это не стандартный идентификатор потока, поэтому оболочка создаст новый файл `/proc/$$/fd/5`.
|
Но так как `5` - это не стандартный идентификатор потока, поэтому оболочка создаст новый файл `/proc/$$/fd/5`.
|
||||||
Данный файл будет алиасом для stdout, поэтому выполнение `echo` выведет содержимое в терминал,
|
Данный файл будет алиасом для stdout, поэтому выполнение `echo` выведет содержимое в терминал,
|
||||||
как это сделал бы обычный вызов команды без перенаправлений потока.
|
как это сделал бы обычный вызов команды без перенаправлений потока.
|
||||||
|
|
||||||
8. Получится ли в качестве входного потока для pipe использовать только stderr команды, не потеряв при этом отображение stdout на pty?
|
### Задача 8
|
||||||
|
|
||||||
|
> Получится ли в качестве входного потока для pipe использовать только stderr команды, не потеряв при этом отображение stdout на pty?
|
||||||
|
|
||||||
Да, такая возможность есть. Сначала необходимо запустить терминал с новым перенаправлением, как в предыдущем вопросе: `bash 5>&1`.
|
Да, такая возможность есть. Сначала необходимо запустить терминал с новым перенаправлением, как в предыдущем вопросе: `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`.
|
Таким образом в команду `less` попадёт следующий текст: `ls: cannot access '/tmp/wrong_dir': No such file or directory`.
|
||||||
|
|
||||||
9. Что выведет команда `cat /proc/$$/environ`? Как еще можно получить аналогичный по содержанию вывод?
|
### Задача 9
|
||||||
|
|
||||||
|
> Что выведет команда `cat /proc/$$/environ`? Как еще можно получить аналогичный по содержанию вывод?
|
||||||
|
|
||||||
Данная команда выведет все переменные окружения, которые инициализированы в текущей сессии терминала.
|
Данная команда выведет все переменные окружения, которые инициализированы в текущей сессии терминала.
|
||||||
Аналогичный результат может быть достигнут вызовом команд `printenv` или `env`.
|
Аналогичный результат может быть достигнут вызовом команд `printenv` или `env`.
|
||||||
|
|
||||||
10. Используя `man`, опишите что доступно по адресам `/proc/<PID>/cmdline`, `/proc/<PID>/exe`.
|
### Задача 11
|
||||||
|
|
||||||
|
> Используя `man`, опишите что доступно по адресам `/proc/<PID>/cmdline`, `/proc/<PID>/exe`.
|
||||||
|
|
||||||
Файл `/proc/<PID>/cmdline` - это файл, предназначенный только для чтения, который содержит в себе полную команду процесса, но только если процесс не зомби.
|
Файл `/proc/<PID>/cmdline` - это файл, предназначенный только для чтения, который содержит в себе полную команду процесса, но только если процесс не зомби.
|
||||||
Файл `/proc/<PID>/exe` - это файл-символическая ссылка, содержащая актуальный полный путь до выполняемой команды.
|
Файл `/proc/<PID>/exe` - это файл-символическая ссылка, содержащая актуальный полный путь до выполняемой команды.
|
||||||
|
|
||||||
11. Узнайте, какую наиболее старшую версию набора инструкций SSE поддерживает ваш процессор с помощью `/proc/cpuinfo`
|
### Задача 12
|
||||||
|
|
||||||
|
> Узнайте, какую наиболее старшую версию набора инструкций SSE поддерживает ваш процессор с помощью `/proc/cpuinfo`
|
||||||
|
|
||||||
Выполним команду `cat /proc/cpuinfo | grep sse`. В выводе можно найти такие версии, как `sse`, `sse2`, `ssse3`, `sse4_1`, `sse4_2`.
|
Выполним команду `cat /proc/cpuinfo | grep sse`. В выводе можно найти такие версии, как `sse`, `sse2`, `ssse3`, `sse4_1`, `sse4_2`.
|
||||||
Таким образом, ответом на вопрос будет `sse4_2`.
|
Таким образом, ответом на вопрос будет `sse4_2`.
|
||||||
|
|
||||||
12. Почему команда `ssh localhost 'tty'` внутри виртуальной машины выдаёт ошибку `not a tty`
|
### Задача 13
|
||||||
|
|
||||||
|
> Почему команда `ssh localhost 'tty'` внутри виртуальной машины выдаёт ошибку `not a tty`
|
||||||
|
|
||||||
Изначально, нужно понять, что происходит при выполнении исходной команды. Судя по мануалу команды `ssh`,
|
Изначально, нужно понять, что происходит при выполнении исходной команды. Судя по мануалу команды `ssh`,
|
||||||
`localhost` является пунктом назначения, куда будет произведено подключение,
|
`localhost` является пунктом назначения, куда будет произведено подключение,
|
||||||
@@ -93,7 +117,9 @@ ls -la /tmp/wrong_dir 2>&1 1>&5 | less
|
|||||||
Изменить поведение можно принудительно заставив `ssh` создать новую сессию, для этого нужно добавить ключ `-t`,
|
Изменить поведение можно принудительно заставив `ssh` создать новую сессию, для этого нужно добавить ключ `-t`,
|
||||||
то есть выполнить команду `ssh -t localhost 'tty'`.
|
то есть выполнить команду `ssh -t localhost 'tty'`.
|
||||||
|
|
||||||
13. Необходимо переместить запущенный процесс из одной сессии в другую с использованием утилиты `reptyr`
|
### Задача 14
|
||||||
|
|
||||||
|
> Необходимо переместить запущенный процесс из одной сессии в другую с использованием утилиты `reptyr`
|
||||||
|
|
||||||
На виртуальной машине утилита не установлена, поэтому установим её `sudo apt install reptyr`.
|
На виртуальной машине утилита не установлена, поэтому установим её `sudo apt install reptyr`.
|
||||||
В качестве примера запустим утилиту `screen`, которая запустит новую сессию внутри себя.
|
В качестве примера запустим утилиту `screen`, которая запустит новую сессию внутри себя.
|
||||||
@@ -104,7 +130,9 @@ ls -la /tmp/wrong_dir 2>&1 1>&5 | less
|
|||||||
К сожалению, полностью перенести процесс не получилось, есть какие-то странные ошибки по типу `Operation not permitted`
|
К сожалению, полностью перенести процесс не получилось, есть какие-то странные ошибки по типу `Operation not permitted`
|
||||||
или "зависания" второго терминала, если выполнить команду от администратора.
|
или "зависания" второго терминала, если выполнить команду от администратора.
|
||||||
|
|
||||||
14. Узнайте что делает команда `tee` и почему в отличие от `sudo echo` команда с `sudo tee` будет работать.
|
### Задача 15
|
||||||
|
|
||||||
|
> Узнайте что делает команда `tee` и почему в отличие от `sudo echo` команда с `sudo tee` будет работать.
|
||||||
|
|
||||||
Команда `tee` читает стандартный поток ввода и пишет его в стандартный поток вывода и файлы.
|
Команда `tee` читает стандартный поток ввода и пишет его в стандартный поток вывода и файлы.
|
||||||
В отличие от `echo` перенаправление идёт в рамках одного процесса, именно поэтому `sudo tee` будет работать,
|
В отличие от `echo` перенаправление идёт в рамках одного процесса, именно поэтому `sudo tee` будет работать,
|
||||||
|
|||||||
@@ -3,7 +3,9 @@
|
|||||||
|
|
||||||
## Q/A
|
## Q/A
|
||||||
|
|
||||||
1. Какой системный вызов делает команда `cd`?
|
### Задача 1
|
||||||
|
|
||||||
|
> Какой системный вызов делает команда `cd`?
|
||||||
|
|
||||||
Для удобства поиска перенаправим вывод команды `strace` в утилиту `less`
|
Для удобства поиска перенаправим вывод команды `strace` в утилиту `less`
|
||||||
|
|
||||||
@@ -14,7 +16,9 @@ strace /bin/bash -c 'cd /tmp' 2>&1 | less
|
|||||||
Далее, найдём в трейсе упоминание директории `tmp`, указанной в команде. Таким образом, обнаружим, что команда `cd`
|
Далее, найдём в трейсе упоминание директории `tmp`, указанной в команде. Таким образом, обнаружим, что команда `cd`
|
||||||
делает системный вызов `chdir("/tmp")`.
|
делает системный вызов `chdir("/tmp")`.
|
||||||
|
|
||||||
2. Используя `strace` выясните, где находится база данных `file` на основании которой она делает свои догадки.
|
### Задача 2
|
||||||
|
|
||||||
|
> Используя `strace` выясните, где находится база данных `file` на основании которой она делает свои догадки.
|
||||||
|
|
||||||
При использовании команды `file` на любом файле, `strace` выведет такую строку:
|
При использовании команды `file` на любом файле, `strace` выведет такую строку:
|
||||||
|
|
||||||
@@ -24,7 +28,9 @@ openat(AT_FDCWD, "/usr/share/misc/magic.mgc", O_RDONLY) = 3
|
|||||||
|
|
||||||
Предположительно, `/usr/share/misc/magic.mgc` - это и есть база данных для команды `file`.
|
Предположительно, `/usr/share/misc/magic.mgc` - это и есть база данных для команды `file`.
|
||||||
|
|
||||||
3. Предложите способ обнуления открытого удаленного файла (чтобы освободить место на файловой системе)
|
### Задача 3
|
||||||
|
|
||||||
|
> Предложите способ обнуления открытого удаленного файла (чтобы освободить место на файловой системе)
|
||||||
|
|
||||||
Зная PID процесса и то, что каждый процесс пишет свои потоки в файлы в директории `/proc/<PID>/fd`.
|
Зная 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
|
echo "" > /proc/1988/fd/3
|
||||||
```
|
```
|
||||||
|
|
||||||
4. Занимают ли зомби-процессы какие-то ресурсы в ОС (CPU, RAM, IO)?
|
### Задача 4
|
||||||
|
|
||||||
|
> Занимают ли зомби-процессы какие-то ресурсы в ОС (CPU, RAM, IO)?
|
||||||
|
|
||||||
Нет, zombie-процессы не используют никаких ресурсов операционной системы.
|
Нет, 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/
|
619 dbus-daemon 19 0 /var/lib/snapd/dbus-1/system-services/
|
||||||
```
|
```
|
||||||
|
|
||||||
6. Какой системный вызов использует `uname -a`? Приведите цитату из man по этому системному вызову,
|
### Задача 5
|
||||||
где описывается альтернативное местоположение в /proc, где можно узнать версию ядра и релиз ОС.
|
|
||||||
|
> Какой системный вызов использует `uname -a`? Приведите цитату из man по этому системному вызову,
|
||||||
|
> где описывается альтернативное местоположение в /proc, где можно узнать версию ядра и релиз ОС.
|
||||||
|
|
||||||
Утилита `uname` использует системный вызов `uname`, мануал к которому можно прочитать командой `man 2 uname`.
|
Утилита `uname` использует системный вызов `uname`, мануал к которому можно прочитать командой `man 2 uname`.
|
||||||
|
|
||||||
@@ -79,15 +91,17 @@ PID COMM FD ERR PATH
|
|||||||
PS. На виртуальной машине не было установленных мануалов для системных вызовов. Чтобы их установить,
|
PS. На виртуальной машине не было установленных мануалов для системных вызовов. Чтобы их установить,
|
||||||
нужно выполнить команду `sudo apt install manpages-dev`.
|
нужно выполнить команду `sudo apt install manpages-dev`.
|
||||||
|
|
||||||
7. Чем отличается последовательность команд через `;` и через `&&` в bash?
|
### Задача 7
|
||||||
Есть ли смысл использовать в bash `&&`, если применить `set -e`?
|
|
||||||
|
> Чем отличается последовательность команд через `;` и через `&&` в bash?
|
||||||
|
> Есть ли смысл использовать в bash `&&`, если применить `set -e`?
|
||||||
|
|
||||||
При использовании `&&` будет учитываться код выхода предыдущей выполненой команды. Если он не 0, то выполнение последовательности будет прервано.
|
При использовании `&&` будет учитываться код выхода предыдущей выполненой команды. Если он не 0, то выполнение последовательности будет прервано.
|
||||||
В случае же `;` последовательность будет выполнена в любом случае.
|
В случае же `;` последовательность будет выполнена в любом случае.
|
||||||
|
|
||||||
В случае `set -e` параметр имеет следующее определение
|
В случае `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 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 part of an AND or OR list,
|
||||||
> and is not a pipeline preceded by the ! reserved word, then the shell shall immediately exit.
|
> 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` уже был рассмотрен в предыдущем вопросе.
|
Параметр `-e` уже был рассмотрен в предыдущем вопросе.
|
||||||
|
|
||||||
@@ -107,7 +123,9 @@ PS. На виртуальной машине не было установлен
|
|||||||
`-o` - устанавливает настройку работы последовательности команд. В данном случае значение `pipefail` говорит о том,
|
`-o` - устанавливает настройку работы последовательности команд. В данном случае значение `pipefail` говорит о том,
|
||||||
что статус работы всей последовательности будет значение последней команды с ненулевым кодом выхода или 0, если все команды выполнились успешно.
|
что статус работы всей последовательности будет значение последней команды с ненулевым кодом выхода или 0, если все команды выполнились успешно.
|
||||||
|
|
||||||
9. Используя `-o stat` для `ps`, определите, какой наиболее часто встречающийся статус у процессов в системе.
|
### Задача 9
|
||||||
|
|
||||||
|
> Используя `-o stat` для `ps`, определите, какой наиболее часто встречающийся статус у процессов в системе.
|
||||||
|
|
||||||
Выполним данную команду на виртуальной машине
|
Выполним данную команду на виртуальной машине
|
||||||
```shell
|
```shell
|
||||||
|
|||||||
@@ -3,7 +3,9 @@
|
|||||||
|
|
||||||
## Q/A
|
## 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),
|
Для начала необходимо установить `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 строк). Поэтому, на мой взгляд,
|
По умолчанию в `node_exporter` включено достаточно много различной информации (~1000 строк). Поэтому, на мой взгляд,
|
||||||
для начала стоит включить только следующие флаги:
|
для начала стоит включить только следующие флаги:
|
||||||
@@ -130,7 +134,9 @@ sudo systemctl status prometheus_node_exporter
|
|||||||
* `--collector.os` - отображение информации об операционной системе
|
* `--collector.os` - отображение информации об операционной системе
|
||||||
* `--collector.time` - отображение информации о текущем системном времени
|
* `--collector.time` - отображение информации о текущем системном времени
|
||||||
|
|
||||||
3. Ознакомьтесь с метриками, которые по умолчанию собираются `Netdata`, и с комментариями, которые даны к этим метрикам.
|
### Задача 3
|
||||||
|
|
||||||
|
> Ознакомьтесь с метриками, которые по умолчанию собираются `Netdata`, и с комментариями, которые даны к этим метрикам.
|
||||||
|
|
||||||
`netdata` отображает следующие метрики:
|
`netdata` отображает следующие метрики:
|
||||||
* `cpu` - утилизация CPU по всем ядрам
|
* `cpu` - утилизация CPU по всем ядрам
|
||||||
@@ -143,12 +149,16 @@ sudo systemctl status prometheus_node_exporter
|
|||||||
|
|
||||||
Доступны так же подробные графики по каждой из категорий.
|
Доступны так же подробные графики по каждой из категорий.
|
||||||
|
|
||||||
4. Можно ли по выводу `dmesg` понять, осознает ли ОС, что загружена не на настоящем оборудовании, а на системе виртуализации?
|
### Задача 4
|
||||||
|
|
||||||
|
> Можно ли по выводу `dmesg` понять, осознает ли ОС, что загружена не на настоящем оборудовании, а на системе виртуализации?
|
||||||
|
|
||||||
В `dmesg` можно найти следующий вывод `Detected virtualization oracle.` от `systemd`. Таким образом да, можно понять, что система осознаёт,
|
В `dmesg` можно найти следующий вывод `Detected virtualization oracle.` от `systemd`. Таким образом да, можно понять, что система осознаёт,
|
||||||
что находится внутри виртуальной машины, а не на физическом оборудовании.
|
что находится внутри виртуальной машины, а не на физическом оборудовании.
|
||||||
|
|
||||||
5. Как настроен `sysctl fs.nr_open` на системе по-умолчанию? Какой другой существующий лимит не позволит достичь такого числа?
|
### Задача 5
|
||||||
|
|
||||||
|
> Как настроен `sysctl fs.nr_open` на системе по-умолчанию? Какой другой существующий лимит не позволит достичь такого числа?
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
sysctl fs.nr_open
|
sysctl fs.nr_open
|
||||||
@@ -159,7 +169,9 @@ fs.nr_open = 1048576
|
|||||||
Для текущей сессии bash можно посмотреть и изменить ограничение при помощи команды `ulimit -n`.
|
Для текущей сессии bash можно посмотреть и изменить ограничение при помощи команды `ulimit -n`.
|
||||||
Для конкретных групп и пользователей ограничения можно задать в файле `/etc/security/limits.conf`.
|
Для конкретных групп и пользователей ограничения можно задать в файле `/etc/security/limits.conf`.
|
||||||
|
|
||||||
6. Запустите любой долгоживущий процесс в отдельном неймспейсе процессов; покажите, что ваш процесс работает под PID 1 через `nsenter`.
|
### Задача 6
|
||||||
|
|
||||||
|
> Запустите любой долгоживущий процесс в отдельном неймспейсе процессов; покажите, что ваш процесс работает под PID 1 через `nsenter`.
|
||||||
|
|
||||||
Запустим процесс `bash` в изолированном пространстве имён:
|
Запустим процесс `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
|
root 52 0.0 0.3 10616 3252 pts/1 R+ 03:36 0:00 ps aux
|
||||||
```
|
```
|
||||||
|
|
||||||
7. Найдите информацию о том, что такое `:(){ :|:& };:`.
|
### Задача 7
|
||||||
Запустите эту команду в своей виртуальной машине. Некоторое время все будет "плохо", после чего (минуты) – ОС должна стабилизироваться.
|
|
||||||
Вызов `dmesg` расскажет, какой механизм помог автоматической стабилизации.
|
> Найдите информацию о том, что такое `:(){ :|:& };:`.
|
||||||
Как настроен этот механизм по-умолчанию, и как изменить число процессов, которое можно создать в сессии?
|
> Запустите эту команду в своей виртуальной машине. Некоторое время все будет "плохо", после чего (минуты) – ОС должна стабилизироваться.
|
||||||
|
> Вызов `dmesg` расскажет, какой механизм помог автоматической стабилизации.
|
||||||
|
> Как настроен этот механизм по-умолчанию, и как изменить число процессов, которое можно создать в сессии?
|
||||||
|
|
||||||
Команда - это `fork bomb`, которую можно разделить на следующие блоки:
|
Команда - это `fork bomb`, которую можно разделить на следующие блоки:
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,9 @@
|
|||||||
|
|
||||||
## Q/A
|
## Q/A
|
||||||
|
|
||||||
1. Разряженные файлы
|
### Задача 1
|
||||||
|
|
||||||
|
> Разряженные файлы
|
||||||
|
|
||||||
Суть таких файлов в том, чтобы разделить реальные данные последовательностью нуль-символов (`\x00`), которые не занимают реального места на физическом носителе.
|
Суть таких файлов в том, чтобы разделить реальные данные последовательностью нуль-символов (`\x00`), которые не занимают реального места на физическом носителе.
|
||||||
При этом сами данные записываются на разных фрагментах на физическом диске.
|
При этом сами данные записываются на разных фрагментах на физическом диске.
|
||||||
@@ -12,12 +14,16 @@
|
|||||||
Это позволяет сделать запись туда, где доступно 1-2KB (например, после удаления другого файла),
|
Это позволяет сделать запись туда, где доступно 1-2KB (например, после удаления другого файла),
|
||||||
но куда оригинальный файл целиком не поместится.
|
но куда оригинальный файл целиком не поместится.
|
||||||
|
|
||||||
2. Могут ли файлы, являющиеся жесткой ссылкой на один объект, иметь разные права доступа и владельца? Почему?
|
### Задача 2
|
||||||
|
|
||||||
|
> Могут ли файлы, являющиеся жесткой ссылкой на один объект, иметь разные права доступа и владельца? Почему?
|
||||||
|
|
||||||
Не могут. Причина в том, что жёсткие ссылки всегда ссылаются на одну `Inode` (идентификатор объекта файла внутри ОС).
|
Не могут. Причина в том, что жёсткие ссылки всегда ссылаются на одну `Inode` (идентификатор объекта файла внутри ОС).
|
||||||
То есть, все файлы, которые имеют одну `Inode` будут синхронизированы по: содержимому, правам доступа и другим мета-данным.
|
То есть, все файлы, которые имеют одну `Inode` будут синхронизированы по: содержимому, правам доступа и другим мета-данным.
|
||||||
|
|
||||||
3. Реконфигурация виртуальной машины
|
### Задача 3
|
||||||
|
|
||||||
|
> Реконфигурация виртуальной машины
|
||||||
|
|
||||||
В текущую конфигурацию [`vagrant`](/src/vagrant/Vagrantfile) добавлена конфигурация дисков:
|
В текущую конфигурацию [`vagrant`](/src/vagrant/Vagrantfile) добавлена конфигурация дисков:
|
||||||
|
|
||||||
@@ -40,7 +46,9 @@ lvm_experiments_disk0.vmdk
|
|||||||
lvm_experiments_disk1.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
|
/dev/sdb2 4196352 5242846 1046495 511M Linux filesystem
|
||||||
```
|
```
|
||||||
|
|
||||||
5. Используя `sfdisk`, перенесите данную таблицу разделов на второй диск.
|
### Задача 5
|
||||||
|
|
||||||
|
> Используя `sfdisk`, перенесите данную таблицу разделов на второй диск.
|
||||||
|
|
||||||
Перенесём таблицу разделов с `/dev/sdb` на `/dev/sdc`.
|
Перенесём таблицу разделов с `/dev/sdb` на `/dev/sdc`.
|
||||||
|
|
||||||
@@ -174,7 +184,9 @@ Device Start End Sectors Size Type
|
|||||||
/dev/sdc2 4196352 5242846 1046495 511M Linux filesystem
|
/dev/sdc2 4196352 5242846 1046495 511M Linux filesystem
|
||||||
```
|
```
|
||||||
|
|
||||||
6. Соберите `mdadm` `RAID1` на паре разделов 2 Гб.
|
### Задача 6
|
||||||
|
|
||||||
|
> Соберите `mdadm` `RAID1` на паре разделов 2 Гб.
|
||||||
|
|
||||||
Разделы, которые необходимо объединить в `RAID1`: `/dev/sdb1` и `/dev/sdc1`.
|
Разделы, которые необходимо объединить в `RAID1`: `/dev/sdb1` и `/dev/sdc1`.
|
||||||
|
|
||||||
@@ -184,7 +196,9 @@ mdadm: Defaulting to version 1.2 metadata
|
|||||||
mdadm: array /dev/md0 started.
|
mdadm: array /dev/md0 started.
|
||||||
```
|
```
|
||||||
|
|
||||||
7. Соберите `mdadm` `RAID0` на второй паре маленьких разделов
|
### Задача 7
|
||||||
|
|
||||||
|
> Соберите `mdadm` `RAID0` на второй паре маленьких разделов
|
||||||
|
|
||||||
Разделы, которые необходимо объединить в `RAID0`: `/dev/sdb2` и `/dev/sdc2`.
|
Разделы, которые необходимо объединить в `RAID0`: `/dev/sdb2` и `/dev/sdc2`.
|
||||||
|
|
||||||
@@ -194,7 +208,9 @@ mdadm: Defaulting to version 1.2 metadata
|
|||||||
mdadm: array /dev/md1 started.
|
mdadm: array /dev/md1 started.
|
||||||
```
|
```
|
||||||
|
|
||||||
8. Создайте 2 независимых PV на получившихся md-устройствах
|
### Задача 8
|
||||||
|
|
||||||
|
> Создайте 2 независимых PV на получившихся md-устройствах
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
sudo pvcreate /dev/md0
|
sudo pvcreate /dev/md0
|
||||||
@@ -228,7 +244,9 @@ sudo pvdisplay
|
|||||||
PV UUID PB8hEQ-bZGA-M6Xe-tOQV-1CAb-DRSf-syoUSA
|
PV UUID PB8hEQ-bZGA-M6Xe-tOQV-1CAb-DRSf-syoUSA
|
||||||
```
|
```
|
||||||
|
|
||||||
9. Создайте общую volume-group на этих двух PV.
|
### Задача 9
|
||||||
|
|
||||||
|
> Создайте общую volume-group на этих двух PV.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
sudo vgcreate test_vg /dev/md0 /dev/md1
|
sudo vgcreate test_vg /dev/md0 /dev/md1
|
||||||
@@ -257,7 +275,9 @@ sudo vgdisplay
|
|||||||
VG UUID 7xcN3Z-o9Ca-iXl2-5eao-iA4e-cEVJ-YgSajr
|
VG UUID 7xcN3Z-o9Ca-iXl2-5eao-iA4e-cEVJ-YgSajr
|
||||||
```
|
```
|
||||||
|
|
||||||
10. Создайте LV размером 100 Мб, указав его расположение на PV с `RAID0`.
|
### Задача 10
|
||||||
|
|
||||||
|
> Создайте LV размером 100 Мб, указав его расположение на PV с `RAID0`.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
sudo lvcreate --size=100MB test_vg /dev/md1
|
sudo lvcreate --size=100MB test_vg /dev/md1
|
||||||
@@ -282,7 +302,9 @@ sudo lvdisplay
|
|||||||
Block device 253:1
|
Block device 253:1
|
||||||
```
|
```
|
||||||
|
|
||||||
11. Создайте `mkfs.ext4` ФС на получившемся `LV`
|
### Задача 11
|
||||||
|
|
||||||
|
> Создайте `mkfs.ext4` ФС на получившемся `LV`
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
sudo mkfs.ext4 /dev/test_vg/lvol0
|
sudo mkfs.ext4 /dev/test_vg/lvol0
|
||||||
@@ -295,14 +317,18 @@ Creating journal (1024 blocks): done
|
|||||||
Writing superblocks and filesystem accounting information: done
|
Writing superblocks and filesystem accounting information: done
|
||||||
```
|
```
|
||||||
|
|
||||||
12. Смонтируйте этот раздел в любую директорию.
|
### Задача 12
|
||||||
|
|
||||||
|
> Смонтируйте этот раздел в любую директорию.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
mkdir /tmp/new
|
mkdir /tmp/new
|
||||||
sudo mount /dev/test_vg/lvol0 /tmp/new
|
sudo mount /dev/test_vg/lvol0 /tmp/new
|
||||||
```
|
```
|
||||||
|
|
||||||
13. Поместите туда тестовый файл.
|
### Задача 13
|
||||||
|
|
||||||
|
> Поместите туда тестовый файл.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
sudo wget https://mirror.yandex.ru/ubuntu/ls-lR.gz -O /tmp/new/test.gz
|
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]
|
2022-03-02 03:04:09 (9.33 MB/s) - ‘/tmp/new/test.gz’ saved [22388361/22388361]
|
||||||
```
|
```
|
||||||
|
|
||||||
14. Прикрепите вывод `lsblk`.
|
### Задача 14
|
||||||
|
|
||||||
|
> Прикрепите вывод `lsblk`.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
sudo lsblk
|
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
|
└─test_vg-lvol0 253:1 0 100M 0 lvm /tmp/new
|
||||||
```
|
```
|
||||||
|
|
||||||
15. Протестируйте целостность файла
|
### Задача 15
|
||||||
|
|
||||||
|
> Протестируйте целостность файла
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
sudo gzip -t /tmp/new/test.gz
|
sudo gzip -t /tmp/new/test.gz
|
||||||
@@ -356,7 +386,9 @@ echo $?
|
|||||||
0
|
0
|
||||||
```
|
```
|
||||||
|
|
||||||
16. Используя `pvmove`, переместите содержимое PV с `RAID0` на `RAID1`.
|
### Задача 16
|
||||||
|
|
||||||
|
> Используя `pvmove`, переместите содержимое PV с `RAID0` на `RAID1`.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
sudo pvmove /dev/md1 /dev/md0
|
sudo pvmove /dev/md1 /dev/md0
|
||||||
@@ -364,14 +396,18 @@ sudo pvmove /dev/md1 /dev/md0
|
|||||||
/dev/md1: Moved: 100.00%
|
/dev/md1: Moved: 100.00%
|
||||||
```
|
```
|
||||||
|
|
||||||
17. Сделайте `--fail` на устройство в вашем `RAID1` md.
|
### Задача 17
|
||||||
|
|
||||||
|
> Сделайте `--fail` на устройство в вашем `RAID1` md.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
sudo mdadm --fail /dev/md0 /dev/sdb1
|
sudo mdadm --fail /dev/md0 /dev/sdb1
|
||||||
mdadm: set /dev/sdb1 faulty in /dev/md0
|
mdadm: set /dev/sdb1 faulty in /dev/md0
|
||||||
```
|
```
|
||||||
|
|
||||||
18. Подтвердите выводом `dmesg`, что `RAID1` работает в деградированном состоянии
|
### Задача 18
|
||||||
|
|
||||||
|
> Подтвердите выводом `dmesg`, что `RAID1` работает в деградированном состоянии
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
sudo dmesg | tail -n 5
|
sudo dmesg | tail -n 5
|
||||||
@@ -382,7 +418,9 @@ sudo dmesg | tail -n 5
|
|||||||
md/raid1:md0: Operation continuing on 1 devices.
|
md/raid1:md0: Operation continuing on 1 devices.
|
||||||
```
|
```
|
||||||
|
|
||||||
19. Протестируйте целостность файла, несмотря на "сбойный" диск он должен продолжать быть доступен
|
### Задача 19
|
||||||
|
|
||||||
|
> Протестируйте целостность файла, несмотря на "сбойный" диск он должен продолжать быть доступен
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
sudo gzip -t /tmp/new/test.gz
|
sudo gzip -t /tmp/new/test.gz
|
||||||
|
|||||||
@@ -3,7 +3,9 @@
|
|||||||
|
|
||||||
## Q/A
|
## Q/A
|
||||||
|
|
||||||
1. Работа c HTTP через телнет.
|
### Задача 1
|
||||||
|
|
||||||
|
> Работа c HTTP через телнет.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
telnet stackoverflow.com 80
|
telnet stackoverflow.com 80
|
||||||
@@ -34,7 +36,9 @@ Set-Cookie: prov=a65f8cdf-ae94-33aa-2d32-b4ba53feba61; domain=.stackoverflow.com
|
|||||||
|
|
||||||
В ответ пришёл статус код `301`, который означает постоянное перемещение с запрашиваемой страницы.
|
В ответ пришёл статус код `301`, который означает постоянное перемещение с запрашиваемой страницы.
|
||||||
|
|
||||||
2. Повторите задание 1 в браузере, используя консоль разработчика F12.
|
### Задача 2
|
||||||
|
|
||||||
|
> Повторите задание 1 в браузере, используя консоль разработчика F12.
|
||||||
|
|
||||||
Код ответа при заходе на сайт `http://stackoverflow.com`: `Status Code: 307 Internal Redirect`.
|
Код ответа при заходе на сайт `http://stackoverflow.com`: `Status Code: 307 Internal Redirect`.
|
||||||
Наиболее долгих по загрузке запрос - это запрос на загрузку самой страницы после редиректа (`https://stackoverflow.com/`).
|
Наиболее долгих по загрузке запрос - это запрос на загрузку самой страницы после редиректа (`https://stackoverflow.com/`).
|
||||||
@@ -42,7 +46,9 @@ Set-Cookie: prov=a65f8cdf-ae94-33aa-2d32-b4ba53feba61; domain=.stackoverflow.com
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
3. Какой IP адрес у вас в интернете?
|
### Задача 3
|
||||||
|
|
||||||
|
> Какой IP адрес у вас в интернете?
|
||||||
|
|
||||||
Чтобы узнать текущий внешний ip-адрес, можно воспользоваться онлайн сервисами, такими как [myip.com](https://www.myip.com/) или [whoer.net](https://whoer.net/).
|
Чтобы узнать текущий внешний ip-адрес, можно воспользоваться онлайн сервисами, такими как [myip.com](https://www.myip.com/) или [whoer.net](https://whoer.net/).
|
||||||
В дополнение к этому, можно использовать только консоль и команду `dig`:
|
В дополнение к этому, можно использовать только консоль и команду `dig`:
|
||||||
@@ -57,7 +63,9 @@ dig TXT +short o-o.myaddr.l.google.com @ns1.google.com
|
|||||||
|
|
||||||
Ответ: `46.181.144.146`.
|
Ответ: `46.181.144.146`.
|
||||||
|
|
||||||
4. Какому провайдеру принадлежит ваш IP адрес? Какой автономной системе AS?
|
### Задача 4
|
||||||
|
|
||||||
|
> Какому провайдеру принадлежит ваш IP адрес? Какой автономной системе AS?
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
whois 46.181.144.146
|
whois 46.181.144.146
|
||||||
@@ -77,7 +85,9 @@ source: RIPE
|
|||||||
|
|
||||||
Ответ: оператор - `Goodline.info`, AS - `AS39927`.
|
Ответ: оператор - `Goodline.info`, AS - `AS39927`.
|
||||||
|
|
||||||
5. Через какие сети проходит пакет, отправленный с вашего компьютера на адрес 8.8.8.8? Через какие AS?
|
### Задача 5
|
||||||
|
|
||||||
|
> Через какие сети проходит пакет, отправленный с вашего компьютера на адрес 8.8.8.8? Через какие AS?
|
||||||
|
|
||||||
По умолчанию утилита `traceroute` не установлена в системе ubuntu. Для её установки достаточно выполнить команду
|
По умолчанию утилита `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
|
19 * dns.google (8.8.8.8) [AS15169] 57.661 ms 56.687 ms
|
||||||
```
|
```
|
||||||
|
|
||||||
6. Повторите задание 5 в утилите mtr. На каком участке наибольшая задержка - delay?
|
### Задача 6
|
||||||
|
|
||||||
|
> Повторите задание 5 в утилите mtr. На каком участке наибольшая задержка - delay?
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
mtr -w 8.8.8.8
|
mtr -w 8.8.8.8
|
||||||
@@ -140,7 +152,9 @@ HOST: host Loss% Snt Last Avg
|
|||||||
|
|
||||||
Наибольшая задержка была на 7-ом хопе с худшим показателем в 81ms.
|
Наибольшая задержка была на 7-ом хопе с худшим показателем в 81ms.
|
||||||
|
|
||||||
7. Какие DNS сервера отвечают за доменное имя `dns.google`? Какие A записи?
|
### Задача 7
|
||||||
|
|
||||||
|
> Какие DNS сервера отвечают за доменное имя `dns.google`? Какие A записи?
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dig dns.google
|
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`-записями.
|
Ответ: dns-сервера с ip-адресами `8.8.4.4` и `8.8.8.8`. Оба адреса являются `A`-записями.
|
||||||
|
|
||||||
9. Проверьте PTR записи для IP адресов из задания 7. Какое доменное имя привязано к IP?
|
### Задача 9
|
||||||
|
|
||||||
|
> Проверьте PTR записи для IP адресов из задания 7. Какое доменное имя привязано к IP?
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dig -x 8.8.4.4
|
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)
|
;; SERVER: 127.0.0.53#53(127.0.0.53)
|
||||||
;; WHEN: Ср мар 09 10:33:34 +07 2022
|
;; WHEN: Ср мар 09 10:33:34 +07 2022
|
||||||
;; MSG SIZE rcvd: 73
|
;; MSG SIZE rcvd: 73
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -3,17 +3,23 @@
|
|||||||
|
|
||||||
## Q/A
|
## Q/A
|
||||||
|
|
||||||
1. Проверьте список доступных сетевых интерфейсов на вашем компьютере. Какие команды есть для этого в Linux и в Windows?
|
### Задача 1
|
||||||
|
|
||||||
|
> Проверьте список доступных сетевых интерфейсов на вашем компьютере. Какие команды есть для этого в Linux и в Windows?
|
||||||
|
|
||||||
В Linux можно выполнить команду `ip link`, которая покажет все сетевые интерфейсы, включая виртуальные.
|
В Linux можно выполнить команду `ip link`, которая покажет все сетевые интерфейсы, включая виртуальные.
|
||||||
Для Windows аналогом данной команды является вызов `ipconfig /all`.
|
Для Windows аналогом данной команды является вызов `ipconfig /all`.
|
||||||
|
|
||||||
2. Какой протокол используется для распознавания соседа по сетевому интерфейсу? Какой пакет и команды есть в Linux для этого?
|
### Задача 2
|
||||||
|
|
||||||
|
> Какой протокол используется для распознавания соседа по сетевому интерфейсу? Какой пакет и команды есть в Linux для этого?
|
||||||
|
|
||||||
Для получения информации о соседнем устройстве используется протокол [LLDP](https://en.wikipedia.org/wiki/Link_Layer_Discovery_Protocol).
|
Для получения информации о соседнем устройстве используется протокол [LLDP](https://en.wikipedia.org/wiki/Link_Layer_Discovery_Protocol).
|
||||||
Данный протокол в ОС Linux реализован в утилите `lldpd`.
|
Данный протокол в ОС Linux реализован в утилите `lldpd`.
|
||||||
|
|
||||||
3. Какая технология используется для разделения L2 коммутатора на несколько виртуальных сетей? Какой пакет и команды есть в Linux для этого? Приведите пример конфига.
|
### Задача 3
|
||||||
|
|
||||||
|
> Какая технология используется для разделения L2 коммутатора на несколько виртуальных сетей? Какой пакет и команды есть в Linux для этого? Приведите пример конфига.
|
||||||
|
|
||||||
Технология имеет название [VLAN](https://en.wikipedia.org/wiki/Virtual_LAN).
|
Технология имеет название [VLAN](https://en.wikipedia.org/wiki/Virtual_LAN).
|
||||||
В Linux для управления виртуальными сетями используется пакет `vlan`, а именно утилита `vconfig` (устарела, рекомендуется использовать утилиту `ip route`).
|
В Linux для управления виртуальными сетями используется пакет `vlan`, а именно утилита `vconfig` (устарела, рекомендуется использовать утилиту `ip route`).
|
||||||
@@ -28,7 +34,9 @@ iface eth0.1400 inet static
|
|||||||
vlan_raw_device eth0
|
vlan_raw_device eth0
|
||||||
```
|
```
|
||||||
|
|
||||||
4. Какие типы агрегации интерфейсов есть в Linux? Какие опции есть для балансировки нагрузки? Приведите пример конфига.
|
### Задача 4
|
||||||
|
|
||||||
|
> Какие типы агрегации интерфейсов есть в Linux? Какие опции есть для балансировки нагрузки? Приведите пример конфига.
|
||||||
|
|
||||||
В конфигурации Linux предусмотрены следующие типы агрегации:
|
В конфигурации Linux предусмотрены следующие типы агрегации:
|
||||||
* static/manual - ручная статическая настройка
|
* static/manual - ручная статическая настройка
|
||||||
@@ -70,7 +78,9 @@ iface bond0 inet dhcp
|
|||||||
bond-miimon 100
|
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 из которых зарезервированы.
|
Всего в сети с маской `/29` находятся 8 IP адресов, 2 из которых зарезервированы.
|
||||||
|
|
||||||
@@ -83,13 +93,17 @@ iface bond0 inet dhcp
|
|||||||
* `10.10.10.9/29`
|
* `10.10.10.9/29`
|
||||||
* `10.10.10.19/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`.
|
Так как самые ходовые сети, используемые для внутренних сетей, уже заняты, то остаётся только вариант с сетью `100.64.0.0/10`.
|
||||||
Если рассчитывать на 40-50 хостов в рамках данной сети, то можно взять подсеть `100.64.0.0/26`,
|
Если рассчитывать на 40-50 хостов в рамках данной сети, то можно взять подсеть `100.64.0.0/26`,
|
||||||
у которой будет диапазон доступных адресов `100.64.0.1 - 100.64.0.62`.
|
у которой будет диапазон доступных адресов `100.64.0.1 - 100.64.0.62`.
|
||||||
|
|
||||||
7. Как проверить ARP таблицу в Linux, Windows? Как очистить ARP кеш полностью? Как из ARP таблицы удалить только один нужный IP?
|
### Задача 7
|
||||||
|
|
||||||
|
> Как проверить ARP таблицу в Linux, Windows? Как очистить ARP кеш полностью? Как из ARP таблицы удалить только один нужный IP?
|
||||||
|
|
||||||
Работа с ARP-таблицами:
|
Работа с ARP-таблицами:
|
||||||
* linux
|
* linux
|
||||||
|
|||||||
@@ -3,7 +3,9 @@
|
|||||||
|
|
||||||
## Q/A
|
## Q/A
|
||||||
|
|
||||||
1. Подключитесь к публичному маршрутизатору в интернет. Найдите маршрут к вашему публичному IP
|
### Задача 1
|
||||||
|
|
||||||
|
> Подключитесь к публичному маршрутизатору в интернет. Найдите маршрут к вашему публичному IP
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
telnet route-views.routeviews.org
|
telnet route-views.routeviews.org
|
||||||
@@ -58,7 +60,9 @@ Paths: (23 available, best #22, table default)
|
|||||||
<...>
|
<...>
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Создайте dummy0 интерфейс в Ubuntu. Добавьте несколько статических маршрутов. Проверьте таблицу маршрутизации.
|
### Задача 2
|
||||||
|
|
||||||
|
> Создайте dummy0 интерфейс в Ubuntu. Добавьте несколько статических маршрутов. Проверьте таблицу маршрутизации.
|
||||||
|
|
||||||
Создание dummy-интерфейса:
|
Создание 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
|
10.2.2.3 via 10.0.2.16 dev eth0
|
||||||
```
|
```
|
||||||
|
|
||||||
3. Проверьте открытые TCP порты в Ubuntu, какие протоколы и приложения используют эти порты? Приведите несколько примеров.
|
### Задача 3
|
||||||
|
|
||||||
|
> Проверьте открытые TCP порты в Ubuntu, какие протоколы и приложения используют эти порты? Приведите несколько примеров.
|
||||||
|
|
||||||
Для вывода открытых TCP-портов используем утилиту `ss` со следующими флагами:
|
Для вывода открытых TCP-портов используем утилиту `ss` со следующими флагами:
|
||||||
* `-t` вывод только TCP-портов
|
* `-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`).
|
В данном случае открыты только порты для соединения по `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`
|
По аналогии с предыдущим заданием используем утилиту `ss`, заменив флаг `-t` на `-u`
|
||||||
|
|
||||||
@@ -114,7 +122,9 @@ UNCONN 0 0
|
|||||||
Порт `:53` предназначается для использования [`systemd-resolved`](https://www.freedesktop.org/software/systemd/man/systemd-resolved.service.html),
|
Порт `:53` предназначается для использования [`systemd-resolved`](https://www.freedesktop.org/software/systemd/man/systemd-resolved.service.html),
|
||||||
а порт `68` используется для получения информации о динамической IP-адресации от DHCP-сервера.
|
а порт `68` используется для получения информации о динамической IP-адресации от DHCP-сервера.
|
||||||
|
|
||||||
5. Используя diagrams.net, создайте L3 диаграмму вашей домашней сети или любой другой сети, с которой вы работали.
|
### Задача 5
|
||||||
|
|
||||||
|
> Используя diagrams.net, создайте L3 диаграмму вашей домашней сети или любой другой сети, с которой вы работали.
|
||||||
|
|
||||||
В качестве сети взята стандартная домашняя сеть с wi-fi-роутером.
|
В качестве сети взята стандартная домашняя сеть с wi-fi-роутером.
|
||||||
|
|
||||||
@@ -122,7 +132,9 @@ UNCONN 0 0
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
6. Установите Nginx, настройте в режиме балансировщика TCP или UDP.
|
### Задача 6
|
||||||
|
|
||||||
|
> Установите Nginx, настройте в режиме балансировщика TCP или UDP.
|
||||||
|
|
||||||
Установка nginx:
|
Установка nginx:
|
||||||
|
|
||||||
|
|||||||
@@ -3,19 +3,25 @@
|
|||||||
|
|
||||||
## Q/A
|
## Q/A
|
||||||
|
|
||||||
1. Установите Bitwarden плагин для браузера. Зарегестрируйтесь и сохраните несколько паролей.
|
### Задача 1
|
||||||
|
|
||||||
|
> Установите Bitwarden плагин для браузера. Зарегестрируйтесь и сохраните несколько паролей.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
2. Установите Google authenticator на мобильный телефон. Настройте вход в Bitwarden акаунт через Google authenticator OTP.
|
### Задача 2
|
||||||
|
|
||||||
|
> Установите Google authenticator на мобильный телефон. Настройте вход в Bitwarden акаунт через Google authenticator OTP.
|
||||||
|
|
||||||
Заместо `Google Authenticator` использовал приложение `Microsoft Authenticator`.
|
Заместо `Google Authenticator` использовал приложение `Microsoft Authenticator`.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
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>
|
</html>
|
||||||
```
|
```
|
||||||
|
|
||||||
4. Проверьте на TLS уязвимости произвольный сайт в интернете
|
### Задача 4
|
||||||
|
|
||||||
|
> Проверьте на TLS уязвимости произвольный сайт в интернете
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
git clone --depth 1 https://github.com/drwetter/testssl.sh.git
|
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) <<--
|
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-сервер и настроен один ssh-ключ для подключения к машине с хоста.
|
||||||
Таким образом сгенерируем новый ssh-ключ для пользователя `vagrant` и попробуем подключиться как пользователь `root` через 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:~#
|
root@vagrant:~#
|
||||||
```
|
```
|
||||||
|
|
||||||
6. Переименуйте файлы ключей из задания 5. Настройте файл конфигурации SSH клиента, так чтобы вход на удаленный сервер осуществлялся по имени сервера.
|
### Задача 6
|
||||||
|
|
||||||
|
> Переименуйте файлы ключей из задания 5. Настройте файл конфигурации SSH клиента, так чтобы вход на удаленный сервер осуществлялся по имени сервера.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
mv ~/.ssh/id_rsa ~/.ssh/localhost_key
|
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:~#
|
root@vagrant:~#
|
||||||
```
|
```
|
||||||
|
|
||||||
7. Соберите дамп трафика утилитой tcpdump в формате pcap, 100 пакетов. Откройте файл pcap в Wireshark.
|
### Задача 7
|
||||||
|
|
||||||
|
> Соберите дамп трафика утилитой tcpdump в формате pcap, 100 пакетов. Откройте файл pcap в Wireshark.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
sudo tcpdump -c 100 -w dump.pcap
|
sudo tcpdump -c 100 -w dump.pcap
|
||||||
|
|||||||
Reference in New Issue
Block a user