Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
test-your-sysadmin-skills — Коллекция вопросов и ответов для тестирования Linux-сисадминов. Проверьте свои знания и навыки в различных областях с помощью этих вопросов и ответов. | Kitploit
Инструменты/GitHubGitHub/trimstray/test-your-sysadmin-skills
Обучение и ОбразованиеПодобранные РесурсыУчебные Маршруты и Курсы
GitHubtrimstray/test-your-sysadmin-skills

test-your-sysadmin-skills

Коллекция вопросов и ответов для тестирования Linux-сисадминов. Проверьте свои знания и навыки в различных областях с помощью этих вопросов и ответов.

Репозиторий

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
11.7k1.7k1 год назадПроверено Kitploit

Master


:star:

"Великий администратор не обязан знать всё, но он должен уметь находить удивительные решения для невозможных проектов." — cwheeler33 (ServerFault)

:star:

"Мои навыки — заставлять вещи работать, а не знать миллиард фактов. [...] Если мне нужно исправить систему, я выявлю проблему, проверю логи и найду ошибки. Если нужно внедрить решение, я изучу правильное решение, внедрю его и задокументирую, а впоследствии буду иметь лишь общее представление о том, как оно работает, если не взаимодействую с ним часто... именно поэтому оно документировано." — Sparcrypt (Reddit)


Pull Requests MIT License




ℹ️  Этот проект содержит 284 тестовых вопроса и ответа, которые можно использовать для проверки знаний или во время собеседования/экзамена на должность Системного администратора Linux (*nix).

✔️  Ответы являются лишь примерами и не охватывают всю тему целиком. Большинство из них содержат полезные ресурсы для более глубокого понимания.

⚠️  Вопросы, отмеченные *** , пока не имеют ответа или ответ неполный — сделайте pull request, чтобы добавить их!

🚥  Если вы нашли что-то, что не имеет смысла или кажется неверным, пожалуйста, сделайте pull request и добавьте обоснованные объяснения ваших изменений или комментариев.

📚  Чтобы улучшить свои знания/навыки, посмотрите devops-interview-questions. Выглядит действительно интересно.


» Все предложения приветствуются «


Содержание


Введение

💠 Простые вопросы

  • Что вы узнали на этой неделе?
  • Что вас радует или интересует в мире сисадминов?
  • Расскажите о недавней технической проблеме, с которой вы столкнулись, и как вы её решили.
  • Расскажите о последнем крупном проекте, который вы завершили.
  • Вы участвуете в каких-нибудь проектах с открытым исходным кодом?
  • Опишите настройку вашей домашней лаборатории.
  • Каким личным достижением вы гордитесь больше всего?
  • Расскажите о самой большой ошибке, которую вы совершили. Как бы вы поступили иначе сегодня?
  • Какие программные инструменты вы установите в первый день на новой работе?
  • Расскажите, как вы ведёте свою базу знаний (например, вики, файлы, порталы).
  • Какие новостные источники вы проверяете ежедневно? (по системному администрированию, безопасности или другие)
  • У вашей команды NOC появился новый бюджет на сертификаты для сисадминов. Какой сертификат вы хотели бы получить и почему?
  • Как вы взаимодействуете с разработчиками: мы против них или все вместе, но с разным подходом?
  • Какой вопрос сисадмину вы бы задали, если бы интервьюировали меня, чтобы понять, насколько я хорош в нестандартных ситуациях?

Общие знания

💠 Младший сисадмин

Системные вопросы (37)
Приведите несколько примеров дистрибутивов Linux. Какой ваш любимый дистрибутив и почему?
- Red Hat Enterprise Linux - Fedora - CentOS - Debian - Ubuntu - Mint - SUSE Linux Enterprise Server (SLES) - SUSE Linux Enterprise Desktop (SLED) - Slackware - Arch - Kali - Backbox

Мой любимый дистрибутив Linux:

  • Arch Linux, который предлагает хорошую минималистичную базовую систему, на основе которой можно построить собственную операционную систему. Его преимущество также в том, что он имеет Arch User Repository (AUR), который в сочетании с официальными бинарными репозиториями, вероятно, даёт ему самые большие репозитории среди всех дистрибутивов. Процесс сборки пакетов также очень прост, поэтому, если нужен пакет, которого нет в официальных репозиториях или AUR, его легко собрать самому.
  • Linux Mint, который также построен на LTS-выпусках Ubuntu, но предлагает редакции с несколькими различными средами рабочего стола, включая Cinnamon, MATE и Xfce. Mint достаточно отполирован, и его эстетика довольно привлекательна, мне особенно нравится его новая тема иконок, хотя тема GTK+ мне не очень нравится (слишком бледная на мой вкус). Я также обнаружил ошибку в его последнем выпуске Mint 19, которая становится весьма раздражающей, так как я обратился за помощью на их форум более двух недель назад и до сих пор не получил ответа, а эта ошибка усложняет мою работу с ним.
  • Kali Linux — это дистрибутив на основе Debian, предназначенный для продвинутого тестирования на проникновение и аудита безопасности. Kali содержит несколько сотен инструментов, ориентированных на различные задачи информационной безопасности, такие как тестирование на проникновение, исследование безопасности, компьютерная криминалистика и обратный инжиниринг.

Полезные ресурсы:

  • Список дистрибутивов Linux
  • Какой ваш любимый дистрибутив Linux и почему?
Каковы различия между Unix, Linux, BSD и GNU?

GNU на самом деле не является ОС. Это скорее набор правил или философий, регулирующих свободное программное обеспечение, который в то же время породил множество инструментов при попытке создать ОС. Таким образом, инструменты GNU — это, по сути, открытые версии уже существовавших инструментов, но переработанные в соответствии с принципами открытого ПО. GNU/Linux — это сочетание этих инструментов и ядра Linux, образующее полноценную ОС, но существуют и другие GNU, например GNU/Hurd.

Unix и BSD — это «более старые» реализации POSIX, имеющие разную степень «закрытости». Unix обычно полностью закрыт, но существует столько же разновидностей Unix, сколько и Linux (если не больше). BSD обычно не считается «открытой», но при выпуске она считалась очень открытой. Её лицензия также допускала коммерческое использование с гораздо меньшими ограничениями, чем более «открытые» лицензии того времени.

Linux — самый новый из четырёх. Строго говоря, это «просто ядро»; однако в целом его считают полноценной ОС в сочетании с инструментами GNU и несколькими другими основными компонентами.

Основные различия между ними лежат в их идеалах. Unix, Linux и BSD имеют разные идеалы, которые они реализуют. Все они соответствуют POSIX и в основном взаимозаменяемы. Некоторые одни и те же проблемы они решают разными способами. Так что кроме идеалов и способов реализации стандартов POSIX разница невелика.

Для получения дополнительной информации рекомендую прочитать краткую статью о создании GNU, OSS, Linux, BSD и UNIX. Они будут склоняться к своим отдельным идеям, но эти статьи должны дать вам лучшее представление о различиях.

Полезные ресурсы:

  • В чем разница между Unix, Linux, BSD и GNU? (оригинал)
  • Великая дискуссия: Linux или GNU/Linux?
Что такое CLI? Расскажите о ваших любимых инструментах, советах и уловках командной строки.

CLI — это аббревиатура от Command Line Interface (интерфейс командной строки) или Command Language Interpreter (интерпретатор командного языка). Командная строка — один из самых мощных способов управления вашей системой/компьютером.

В Unix-подобных системах CLI — это интерфейс, с помощью которого пользователь может вводить команды для выполнения системой. CLI очень мощный, но не очень устойчив к ошибкам.

CLI позволяет выполнять манипуляции с внутренними компонентами системы и с кодом гораздо более тонко. Он обеспечивает большую гибкость и контроль, чем GUI, независимо от используемой ОС. Многие программы, которые вы, возможно, захотите использовать в своём ПО, размещённом, например, на Github, также требуют выполнения некоторых команд в CLI для их запуска.

Мои любимые инструменты

  • screen — свободный терминальный мультиплексор; я могу запустить сессию, и мои терминалы сохранятся, даже если соединение прервется, так что можно возобновить работу позже или из дома
  • ssh — самая ценная общая команда для изучения; я могу использовать её для удивительных вещей:
    • монтировать файловую систему через интернет с помощью sshfs
    • перенаправлять команды: запускает rsync на сервере без демона rsync, запуская его через ssh
    • запускать в пакетных файлах: я могу перенаправить вывод удаленной команды и использовать его в локальном пакетном файле
  • vi/vim — самый популярный и мощный текстовый редактор; он универсален, работает очень быстро, даже с большими файлами
  • — содержит ряд предопределенных правил автодополнения для оболочки
Какая ваша любимая оболочка и почему?

BASH — моя любимая. Это скорее вопрос предпочтений: мне нравится синтаксис, и он просто «щёлкает» для меня. Синтаксис перенаправления ввода/вывода (>>, << 2>&1, 2>, 1> и т. д.) похож на C++, что облегчает его распознавание.

Мне также нравится оболочка ZSH, потому что она гораздо более настраиваема, чем BASH. У неё есть фреймворк Oh-My-Zsh, мощное контекстное автодополнение, мощные возможности сопоставления с образцом/глоббинга, загружаемые модули и многое другое.

Полезные ресурсы:

  • Сравнение командных оболочек
Как вы получаете справку в командной строке? ***
  • man [имя_команды] — можно использовать для просмотра описания команды (например: man less, man cat)
  • -h или --help — некоторые программы реализуют вывод инструкций при передаче этого параметра (например: python -h и python --help)
Ваши первые 5 команд на *nix сервере после входа в систему.
  • w — много полезной информации, включая время работы сервера
  • top — можно увидеть все запущенные процессы, отсортировать их по загрузке ЦП, использованию памяти и т. д.
  • netstat — чтобы узнать, на каком порту и IP слушает ваш сервер и какие процессы их используют
  • df — показывает объем используемого дискового пространства файловыми системами
  • history — показывает, что ранее выполнял пользователь, под которым вы сейчас подключены

Полезные ресурсы:

  • Первые 5 команд при подключении к Linux-серверу (оригинал)
Что означают поля в выводе ls -al?

В порядке вывода:```bash -rwxrw-r-- 1 root root 2048 Jan 13 07:11 db.dump

root@kitploit:~
- права доступа к файлу,
- количество ссылок,
- имя владельца,
- группа владельца,
- размер файла,
- время последнего изменения,
- имя файла/каталога

Права доступа к файлу отображаются следующим образом:

- первый символ — `-` или `l` или `d`, `d` обозначает каталог, `-` обозначает файл, `l` — символическая ссылка (или мягкая ссылка) — особый тип файла
- три набора символов, по три в каждом, указывающие права доступа для владельца, группы и остальных:
  - `r` = чтение
  - `w` = запись
  - `x` = выполнение

В вашем примере `-rwxrw-r--` это означает, что отображаемая строка:

- обычный файл (отображается как `-`)
- читаемый, записываемый и исполняемый для владельца (`rwx`)
- читаемый, записываемый, но не исполняемый для группы (`rw-`)
- читаемый, но не записываемый и не исполняемый для остальных (`r--`)

Полезные ресурсы:

- [Что означают поля в выводе ls -al? (оригинал)](https://unix.stackexchange.com/questions/103114/what-do-the-fields-in-ls-al-output-mean)

</details>

<details>
<summary><b>Как получить список вошедших пользователей?</b></summary><br>

Для получения сводки вошедших пользователей, включая каждый логин пользователя, терминалы, к которым прикреплены пользователи, дату/время входа и, возможно, компьютер, с которого установлено соединение, введите:```bash
# It uses /var/run/utmp and /var/log/wtmp files to get the details.
who
В чем преимущество выполнения текущих процессов в фоновом режиме? Как это сделать?

Самое значительное преимущество выполнения процесса в фоновом режиме заключается в том, что вы можете одновременно выполнять любые другие задачи, пока другие процессы работают в фоновом режиме. Таким образом, больше процессов может быть завершено в фоновом режиме, пока вы работаете над другими процессами. Это можно сделать, добавив специальный символ & в конце команды.

Обычно приложения, которые выполняются слишком долго и не требуют взаимодействия с пользователем, отправляются в фоновый режим, чтобы мы могли продолжить работу в терминале.

Например, если вы хотите что-то скачать в фоновом режиме, вы можете:```bash wget https://url-to-download.com/download.tar.gz &

root@kitploit:~
Когда вы запускаете вышеуказанную команду, вы получаете следующий вывод:```bash
[1] 2203

Здесь 1 — это порядковый номер задания, а 2203 — это PID задания. Вы можете увидеть задания, выполняемые в фоновом режиме, с помощью следующей команды:```bash jobs

root@kitploit:~
Когда вы выполняете задачу в фоновом режиме, она дает вам PID задачи, вы можете завершить задачу, выполняющуюся в фоновом режиме, с помощью следующей команды:```bash
kill PID

Замените PID на PID задачи. Если у вас запущена только одна задача, вы можете вывести её на передний план с помощью:```bash fg

root@kitploit:~
Если у вас есть несколько заданий, работающих в фоновом режиме, вы можете вывести любое задание на передний план, используя:```bash
fg %#

Замените # на порядковый номер задания.

Полезные ресурсы:

Прежде чем управлять процессами, вы должны уметь их идентифицировать. Какие инструменты вы будете использовать? ***

Необходимо дополнить.

Запуск команды от имени пользователя root. Это хорошая или плохая практика?

Запуск (всего) от имени root — это плохо, потому что:

  • Глупость: ничто не мешает вам совершить неосторожную ошибку. Если вы попытаетесь изменить систему потенциально опасным способом, вам нужно использовать sudo, что обеспечивает паузу (пока вы вводите пароль), чтобы убедиться, что вы не собираетесь ошибиться.

  • Безопасность: сложнее взломать, если неизвестно имя учетной записи администратора. root означает, что у вас уже есть половина рабочего набора учетных данных администратора.

  • Вам это на самом деле не нужно: если вам нужно выполнить несколько команд от имени root и вас раздражает необходимость несколько раз вводить пароль, когда срок действия sudo истек, все, что вам нужно сделать, это sudo -i, и вы становитесь root. Хотите выполнить несколько команд с помощью каналов? Используйте sudo sh -c "command1 | command2".

  • Вы всегда можете использовать его в консоли восстановления: консоль восстановления позволяет восстановиться после серьезной ошибки или исправить проблему, вызванную приложением (которое все равно нужно было запускать через sudo). В этом случае в Ubuntu нет пароля для учетной записи root, но вы можете найти в интернете, как это изменить — это усложнит нанесение вреда любому, у кого есть физический доступ к вашему компьютеру.

Полезные ресурсы:

  • Why is it bad to log in as root? (original)
  • What's wrong with always being root?
  • Why you should avoid running applications as root
Как проверить статистику памяти и ЦП?

Для обоих используется top/htop. С помощью команд free и vmstat мы можем отобразить статистику физической и виртуальной памяти соответственно. С помощью команды sar мы видим загрузку ЦП и другую статистику (но sar даже не установлен в большинстве систем).

Полезные ресурсы:

  • How do I Find Out Linux CPU Utilization?
  • 16 Linux server monitoring commands you really need to know
Что такое load average?

Linux load averages — это «средние значения загрузки системы», которые показывают спрос на выполняемые потоки (задачи) как среднее количество выполняемых и ожидающих потоков. Это измеряет спрос, который может быть больше, чем система обрабатывает в данный момент. Большинство инструментов показывают три средних значения: за 1, 5 и 15 минут.

Эти 3 числа не являются числами для разных ЦП. Эти числа являются средними значениями показателя загрузки за заданный период времени (за последние 1, 5 и 15 минут).

Load average обычно описывается как «средняя длина очереди выполнения». Таким образом, несколько процессов или потоков, потребляющих ЦП, могут поднять load average выше 1. Нет проблем, если load average меньше общего количества ядер ЦП. Но если он становится выше количества ЦП, это означает, что некоторые потоки/процессы будут оставаться в очереди, готовые к выполнению, но ожидая свободного ЦП.

Он предназначен для того, чтобы дать представление о состоянии системы, усредненное за несколько периодов времени. Поскольку это среднее значение, требуется время, чтобы оно вернулось к 0 после большой нагрузки на систему.

Некоторые интерпретации:

  • если средние значения равны 0.0, то ваша система простаивает
  • если среднее за 1 минуту выше, чем средние за 5 или 15 минут, то нагрузка возрастает
  • если среднее за 1 минуту ниже, чем средние за 5 или 15 минут, то нагрузка снижается
  • если они выше количества ваших ЦП, то у вас может быть проблема с производительностью (зависит от ситуации)

Полезные ресурсы:

  • Linux Load Averages: Solving the Mystery (original)
  • Linux load average - the definitive summary
  • How CPU load averages work (and using them to triage webserver performance!)
Где хранится мой пароль в Linux/Unix?

Пароли вообще нигде не хранятся в системе. То, что хранится в /etc/shadow, — это так называемые хеши паролей.

Хеш некоторого текста создается путем выполнения так называемой односторонней функции над текстом (паролем), создавая строку для проверки. По замыслу «невозможно» (вычислительно неосуществимо) обратить этот процесс вспять.

В старых версиях Unix зашифрованные пароли хранились в /etc/passwd вместе с другой информацией о каждой учетной записи.

В новых версиях просто стоит * в соответствующем поле в /etc/passwd, а для хранения пароля используется /etc/shadow, отчасти для того, чтобы никто не мог получить доступ на чтение к паролям, когда им нужны только остальные данные (shadow обычно защищен более строго, чем passwd).

Для получения дополнительной информации обратитесь к man crypt, man shadow, man passwd.

Полезные ресурсы:

  • Where is my password stored on Linux?
Как рекурсивно изменить права доступа для всех каталогов, кроме файлов, и для всех файлов, кроме каталогов?

Чтобы изменить все каталоги, например, на 755 (drwxr-xr-x):```bash find /opt/data -type d -exec chmod 755 {} ;

root@kitploit:~
Чтобы изменить все файлы, например, на **644** (`-rw-r--r--`):```bash
find /opt/data -type f -exec chmod 644 {} \;

Полезные ресурсы:

  • Как установить chmod для папки и всех её подпапок и файлов? (оригинал)
Все команды завершаются ошибкой command not found. Как отследить источник ошибки и исправить её?

Похоже, что в какой-то момент происходит перезапись переменной окружения PATH по умолчанию. Тип ошибок, которые вы получаете, указывает на то, что PATH не содержит, например, /bin, где находятся команды (включая bash).

Один из способов начать отладку вашего bash-скрипта или команды — запустить подкоманду с опцией -x:```bash bash --login -x

root@kitploit:~
Это покажет вам каждую команду и её аргументы, которые выполняются при запуске этой оболочки.

Также очень полезно отображать значения переменной `PATH`:```bash
echo $PATH

Если вы запустите это:```bash PATH=/bin:/sbin:/usr/bin:/usr/sbin

root@kitploit:~
большинство команд должно начать работать — после этого вы можете редактировать `~/.bash_profile` вместо `~/.bashrc` и исправить то, что сбрасывает `PATH` там. Значения переменной `PATH` по умолчанию для **root** и других пользователей находятся в файле `/etc/profile`.

Полезный ресурс:

- [Как правильно добавить путь в PATH?](https://unix.stackexchange.com/questions/26047/how-to-correctly-add-a-path-to-path)

</details>

<details>
<summary><b>Вы нажимаете <code>CTRL + C</code>, но ваш скрипт всё ещё выполняется. Как его остановить?</b></summary><br>

В большинстве случаев вы можете остановить выполняющийся скрипт, используя комбинацию клавиш `CTRL + C`. Она отправляет сигнал прерывания (SIGINT) скрипту, что завершает его выполнение. Если это не сработало и скрипт всё ещё работает, попробуйте комбинацию `CTRL + \`, которая отправляет сигнал выхода (SIGQUIT) скрипту и может немедленно завершить его.

В качестве альтернативы, если вы используете терминал или интерфейс командной строки, можно попробовать команду `kill`, чтобы отправить сигнал процессу скрипта. Вы можете найти идентификатор процесса (PID) скрипта с помощью команд `ps` или `top`, а затем использовать `kill` с PID, чтобы остановить скрипт.

В некоторых случаях может потребоваться использовать команду `kill -9` для принудительной остановки скрипта, так как обычная команда `kill` может не сработать, если скрипт завис или не отвечает. Опция `-9` отправляет сигнал SIGKILL, который заставляет процесс немедленно остановиться.
</details>

<details>
<summary><b>Что такое команда <code>grep</code>? Как сопоставить несколько строк в одной строке?</b></summary><br>

Утилиты `grep` — это семейство инструментов Unix, включающее `egrep` и `fgrep`.

`grep` выполняет поиск по шаблонам в файлах. Если вы ищете определённый шаблон в выводе другой команды, `grep` выделяет соответствующие строки. Используйте эту команду grep для поиска в файлах журналов, конкретных процессах и многом другом.

Для сопоставления нескольких строк:```bash
grep -E "string1|string2" filename
Выполнить несколько команд оболочки в одной строке.

Если вы хотите выполнить каждую команду только после успешного завершения предыдущей, объедините их с помощью оператора &&:```bash cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install

root@kitploit:~
Если одна из команд завершится ошибкой, то все последующие команды не будут выполнены.

Если вы хотите выполнить все команды независимо от того, завершились ли предыдущие ошибкой или нет, разделите их точкой с запятой:```bash
cd /my_folder; rm *.jar; svn co path to repo; mvn compile package install

В вашем случае, я думаю, вам нужен первый вариант, когда выполнение следующей команды зависит от успеха предыдущей.

Вы также можете поместить все команды в скрипт и выполнить его вместо этого:```bash #! /bin/sh cd /my_folder
&& rm *.jar
&& svn co path to repo
&& mvn compile package install

root@kitploit:~
Полезные ресурсы:

- [Выполнение и объединение нескольких команд Linux в одну строку (оригинал)](https://stackoverflow.com/questions/13077241/execute-combine-multiple-linux-commands-in-one-line)

</details>

<details>
<summary><b>Какое символическое представление нужно передать <code>chmod</code>, чтобы дать всем пользователям права на выполнение файла, не затрагивая другие разрешения?</b></summary><br>```bash
chmod a+x /path/to/file
  • a - для всех пользователей
  • x - разрешение на выполнение
Как синхронизировать две локальные директории?

Чтобы синхронизировать содержимое dir1 с dir2 в той же системе, введите:```bash rsync -av --progress --delete dir1/ dir2

root@kitploit:~
- `-a`, `--archive` — режим архивации
- `--delete` — удаление лишних файлов из целевых каталогов
- `-v`, `--verbose` — подробный режим (повышение детализации)
- `--progress` — показывать прогресс во время передачи

Полезные ресурсы:

- [Как синхронизировать две локальные директории? (оригинал)](https://unix.stackexchange.com/questions/392536/how-can-i-sync-two-local-directories)
- [Синхронизация папок с помощью rsync](https://www.jveweb.net/en/archives/2010/11/synchronizing-folders-with-rsync.html)

</details>

<details>
<summary><b>Многие базовые задачи обслуживания требуют редактирования конфигурационных файлов. Объясните способы отмены сделанных изменений.</b></summary><br>

- резервное копирование файла вручную перед редактированием (с помощью brace expansion, например: `cp filename{,.orig}`)
- ручное копирование структуры каталогов, где находится файл (например, с помощью `cp`, `rsync` или `tar`)
- создание резервной копии исходного файла в вашем редакторе (например, установка правил в конфигурационном файле редактора)
- наилучшее решение — использовать `git` (или любую другую систему контроля версий) для отслеживания конфигурационных файлов (например, `etckeeper` для каталога `/etc`)

Полезные ресурсы:

- [Резервное копирование файла с расширением .bak перед расширением имени файла](https://unix.stackexchange.com/questions/66376/backup-file-with-bak-before-filename-extension)
- [Хорошая ли идея использовать git для контроля версий конфигурационных файлов?](https://superuser.com/questions/1037211/is-it-a-good-idea-to-use-git-for-configuration-file-version-controlling)

</details>

<details>
<summary><b>Вам нужно найти все файлы размером более 20 МБ. Как вы это сделаете?</b></summary><br>```bash
find / -type f -size +20M
Почему мы используем sudo su -, а не просто sudo su?

sudo присутствует в большинстве современных дистрибутивов Linux, где (но не всегда) пользователь root отключен и не имеет установленного пароля. Поэтому вы не можете переключиться на пользователя root с помощью su (можно попробовать). Вам нужно вызвать sudo с привилегиями root: sudo su.

su просто переключает пользователя, предоставляя обычную оболочку с окружением, почти таким же, как у старого пользователя.

su - вызывает оболочку входа после переключения пользователя. Оболочка входа сбрасывает большинство переменных окружения, обеспечивая чистую базу.

Полезные ресурсы:

  • su против sudo -s против sudo -i против sudo bash
  • Почему мы используем su -, а не просто su? (оригинал)
Как найти файлы, изменённые в вашей системе за последние 60 минут?
```bash find / -mmin -60 -type f ``` Полезные ресурсы:
  • Получить все файлы, изменённые за последние 30 дней в каталоге (оригинал)
Каковы основные причины хранения старых лог-файлов?

Они необходимы для расследования проблем в системе. Управление логами абсолютно критично для ИТ-безопасности.

Серверы, межсетевые экраны и другое ИТ-оборудование хранят лог-файлы, в которых записываются важные события и транзакции. Эта информация может дать важные подсказки о враждебной активности, затрагивающей вашу сеть как изнутри, так и снаружи. Данные логов также могут предоставить информацию для выявления и устранения неполадок оборудования, включая проблемы с конфигурацией и аппаратные сбои.

Это запись сервера о том, кто посещал ваш сайт, когда и что именно просматривал. Она невероятно детализирована и показывает:

  • откуда пришли посетители
  • какой браузер они использовали
  • какие именно файлы они просматривали
  • сколько времени потребовалось для загрузки каждого файла
  • и кучу других технических деталей

Факторы, которые следует учитывать:

  • юридические требования к хранению или уничтожению
  • политика компании в отношении хранения и уничтожения
  • как долго логи остаются полезными
  • на какие вопросы вы надеетесь ответить с помощью логов
  • сколько места они занимают

Собирая и анализируя логи, вы можете понять, что происходит в вашей сети. Каждый лог-файл содержит множество фрагментов информации, которые могут быть бесценны, особенно если вы умеете их читать и анализировать.

Полезные ресурсы:

  • Как долго вы храните лог-файлы?
Что такое инкрементальное резервное копирование?

Инкрементальное резервное копирование — это тип резервного копирования, при котором копируются только файлы, изменившиеся с момента предыдущего копирования.

Полезные ресурсы:

  • Что такое инкрементальное резервное копирование?
Что такое RAID? Что такое RAID0, RAID1, RAID5, RAID6, RAID10?

RAID (Redundant Array of Inexpensive Disks) — это технология, используемая для повышения производительности и/или надёжности хранения данных.

  • RAID0: Также известен как чередование дисков (striping) — метод, разбивающий файл и распределяющий данные по всем дискам в группе RAID. Защиты от сбоев нет.
  • RAID1: Популярная дисковая подсистема, повышающая безопасность за счёт записи одних и тех же данных на два диска. Называется «зеркалированием», RAID 1 не увеличивает производительность записи, но производительность чтения может достигать суммы производительности каждого диска. Однако если один диск выходит из строя, используется второй, а вышедший из строя заменяется вручную. После замены контроллер RAID дублирует содержимое рабочего диска на новый.
  • RAID5: Дисковая подсистема, повышающая безопасность за счёт вычисления данных чётности и увеличивающая скорость за счёт чередования данных на трёх и более дисках (чередование). При выходе из строя одного диска последующие чтения могут быть вычислены из распределённой чётности, так что данные не теряются.
  • RAID6: RAID 6 расширяет RAID 5 добавлением ещё одного блока чётности. Требуется минимум четыре диска, и он может продолжать выполнять чтение и запись при одновременном выходе из строя любых двух дисков. RAID 6 не имеет штрафа по производительности для операций чтения, но имеет штраф по производительности для операций записи из-за накладных расходов, связанных с вычислением чётности.
  • RAID10: Также известен как RAID 1+0 — конфигурация RAID, объединяющая зеркалирование и чередование дисков для защиты данных. Требуется минимум четыре диска, и данные чередуются по зеркальным парам. Пока хотя бы один диск в каждой зеркальной паре исправен, данные могут быть извлечены. Если оба диска в одной зеркальной паре выходят из строя, все данные будут потеряны, так как в чередующихся наборах нет чётности.

Полезные ресурсы:

  • RAID
Как определяется группа пользователя по умолчанию? Как её изменить?
```bash useradd -m -g initial_group username ``` `-g/--gid`: определяет имя группы или номер начальной группы входа пользователя. Если указано, имя группы должно существовать; если указан номер группы, он должен ссылаться на уже существующую группу.

Если не указано, поведение useradd будет зависеть от переменной USERGROUPS_ENAB, содержащейся в /etc/login.defs. Поведение по умолчанию (USERGROUPS_ENAB yes) заключается в создании группы с тем же именем, что и имя пользователя, с GID, равным UID.

Полезные ресурсы:

  • Как изменить группу пользователя по умолчанию в Linux?
Какой текстовый редактор командной строки вы используете для повседневной работы и написания скриптов? ***

Будет дополнено.

Зачем монтировать серверы в стойку?
  • Защита оборудования
  • Правильное охлаждение
  • Организованное рабочее пространство
  • Лучшее управление питанием
  • Более чистая среда

Полезные ресурсы:

  • 5 причин установить ПК в стойку
Сетевые вопросы (23)
Нарисуйте мне простую сетевую диаграмму: у вас есть 20 систем, 1 маршрутизатор, 4 коммутатора, 5 серверов и небольшой блок IP-адресов. ***

Будет дополнено.

Что наиболее важно понимать в модели OSI (или любой другой)?

Наиболее важные вещи, которые нужно понять о модели OSI (или любой другой):

  • мы можем разделить протоколы на уровни
  • уровни обеспечивают инкапсуляцию
  • уровни обеспечивают абстракцию
  • уровни отделяют функции друг от друга

Полезные ресурсы:

  • Взаимосвязь модели OSI и сетевых протоколов
В чем разница между VLAN и подсетью? Нужна ли VLAN для создания подсети?

VLAN и подсети решают разные задачи. VLAN работают на уровне 2, изменяя, например, домены коллизий. Тогда как подсети в текущем контексте относятся к уровню 3.

Подсеть — это диапазон IP-адресов, определяемый частью адреса (часто называемой сетевым адресом) и маской подсети (netmask). Например, если маска подсети равна 255.255.255.0 (или сокращенно /24), а сетевой адрес — 192.168.10.0, то это определяет диапазон IP-адресов от 192.168.10.0 до 192.168.10.255. Сокращенная запись: 192.168.10.0/24.

VLAN — это «разделение коммутатора». Предположим, у вас есть 8-портовый коммутатор с поддержкой VLAN. Вы можете назначить 4 порта одной VLAN (например, VLAN 1) и 4 порта другой VLAN (например, VLAN 2). VLAN 1 не будет видеть трафик VLAN 2, и наоборот; логически у вас теперь два отдельных коммутатора. Обычно на коммутаторе, если он не видел MAC-адрес, он «заливает» трафик на все остальные порты. предотвращают это.

Перечислите 5 распространенных сетевых портов, которые нужно знать.
Что такое POP и IMAP и как решить, какой из них следует внедрить?

POP и IMAP — это протоколы для получения сообщений с почтового сервера на почтовый клиент.

POP (Post Office Protocol) использует одностороннюю передачу от сервера к клиенту. По умолчанию сообщения отправляются в POP-клиент и удаляются с сервера, хотя можно настроить сервер на сохранение всех сообщений. Любые действия с сообщением в почтовом клиенте (метки, удаление, перемещение в папку) не будут отражены на сервере и, следовательно, будут недоступны другим клиентам, получающим почту с этого сервера. POP использует мало места на сервере и может считаться более безопасным, поскольку сообщения существуют только на одном клиенте, а не на сервере и нескольких клиентах.

IMAP (Internet Message Access Protocol) использует двустороннюю связь между сервером и клиентом. Удаление или маркировка сообщения в почтовом клиенте, настроенном на IMAP, также удалит или пометит сообщение на сервере. IMAP обеспечивает единообразие при доступе к почте с разных клиентов или устройств, так как сообщения могут находиться в одинаковом состоянии на нескольких устройствах. IMAP также экономит дисковое пространство на клиенте, выборочно синхронизируя сообщения и удаляя старые с клиента, так как при необходимости их можно снова загрузить с сервера.

Выбирайте IMAP, если вам нужен доступ к сообщениям с нескольких устройств и вы хотите сэкономить место на клиенте. Выбирайте POP, если хотите сэкономить место на почтовом сервере, получать сообщения только с одного клиента и гарантировать, что сообщения не будут храниться на нескольких системах.

Как проверить маршрут по умолчанию и таблицу маршрутизации?

С помощью команд netstat -nr, route -n или ip route show можно просмотреть маршрут по умолчанию и таблицы маршрутизации.

Полезные ресурсы:

  • Как проверить маршруты (таблицу маршрутизации) в Linux
  • FreeBSD: установка маршрута/шлюза по умолчанию
В чем разница между 127.0.0.1 и localhost?

Основное различие, скорее всего, в том, что для localhost всё ещё требуется выполнить реальный поиск где-то.

Если вы используете 127.0.0.1, то (интеллектуальное) программное обеспечение просто преобразует его непосредственно в IP-адрес и использует. Некоторые реализации gethostbyname обнаруживают точечный формат (и, предположительно, эквивалентный формат IPv6) и вообще не выполняют поиск.

В противном случае имя должно быть разрешено. И нет гарантии, что ваш файл hosts будет использоваться для этого разрешения (сначала или вообще); таким образом, localhost может стать совершенно другим IP-адресом.

Я имею в виду, что в некоторых системах локальный файл hosts может быть обойдён. Файл host.conf управляет этим в Linux (и многих других Unix-подобных системах).

Если вы используете сокет Unix domain, он будет немного быстрее TCP/IP (из-за меньших накладных расходов). Windows по умолчанию использует TCP/IP, тогда как Linux пытается использовать сокет Unix domain при выборе localhost и TCP/IP при выборе 127.0.0.1.

Полезные ресурсы:

  • В чем разница между 127.0.0.1 и localhost?
  • localhost против 127.0.0.1
Какой порт используется командой ping?

ping использует ICMP, а именно ICMP echo request и ICMP echo reply. С ICMP не связан никакой 'порт'. Порты связаны с двумя транспортными протоколами IP: TCP и UDP. ICMP, TCP и UDP — это «родственные» протоколы; они не основаны друг на друге, а являются тремя отдельными протоколами, работающими поверх IP.

Пакеты ICMP идентифицируются по полю 'протокол' в заголовке IP-датаграммы. ICMP не использует услуги связи UDP или TCP; он использует услуги «сырых» IP-коммуникаций. Это означает, что сообщение ICMP передаётся непосредственно в поле данных IP-датаграммы. «Сырой» (raw) происходит от того, как это реализовано в программном обеспечении: для создания и отправки сообщения ICMP открывается сырой сокет, создаётся буфер с сообщением, а затем буфер записывается в сокет.

Значение протокола IP для ICMP — 1. Поле протокола является частью IP-заголовка и определяет, что находится в части данных IP-датаграммы.

Однако вы можете использовать nmap, чтобы проверить, открыты ли порты:```bash nmap -p 80 example.com

root@kitploit:~
Полезные ресурсы:

- [Номер порта Ping](https://networkengineering.stackexchange.com/questions/42463/ping-port-number)
- [Можно ли пинговать адрес:порт?](https://superuser.com/questions/769541/is-it-possible-to-ping-an-addressport)

</details>

<details>
<summary><b>Сервер A не может связаться с сервером B. Опишите возможные причины в несколько шагов.</b></summary><br>

Для устранения проблем связи между серверами лучше следовать стеку TCP/IP:

1. **Прикладной уровень**: работают ли службы на обоих серверах? Настроены ли они правильно (например, привязка к правильному IP и правильному порту)? Показывают ли журналы приложений и системы значимые ошибки?

2. **Транспортный уровень**: открыты ли порты, используемые приложением (попробуйте telnet!)? Можно ли пропинговать сервер?

3. **Сетевой уровень**: правильно ли настроен брандмауэр в сети или на ОС? Правильно ли настроен стек IP (IP, маршруты, DNS и т.д.)? Работают ли коммутаторы и маршрутизаторы (проверьте таблицу ARP! )?

4. **Физический уровень**: подключены ли серверы к сети? Теряются ли пакеты?

</details>

<details>
<summary><b>Почему на вашем сервере не разрешаются имена хостов? Исправьте эту проблему. ***</b></summary><br>

Будет дополнено.

</details>

<details>
<summary><b>Как разрешить доменное имя (с помощью внешнего DNS) через CLI? Можно ли разрешить IP-адреса в доменные имена?</b></summary><br>

Примеры для разрешения IP-адреса в доменное имя:```bash
# with host command:
host domain.com 8.8.8.8

# with dig command:
dig @9.9.9.9 google.com

# with nslookup command:
nslookup domain.com 8.8.8.8
Как проверить доступность порта с помощью telnet или nc?
```bash # with telnet command: telnet code42.example.com 5432

with nc (netcat) command:

nc -vz code42.example.com 5432

root@kitploit:~
</details>

<details>
<summary><b>Почему следует избегать <code>telnet</code> для удаленного администрирования системы?</b></summary><br>

Современные операционные системы отключают все потенциально небезопасные службы по умолчанию. С другой стороны, некоторые производители сетевых устройств по-прежнему разрешают устанавливать связь с помощью протокола telnet.

**Telnet** использует самый незащищенный метод связи. Он передает данные по сети в виде открытого текста, и любой желающий может легко узнать пароль с помощью сетевого инструмента.

В случае **Telnet** это включает передачу учетных данных для входа в открытом виде, что означает: любой, кто запустит сниффер в вашей сети, может за несколько секунд получить информацию, необходимую для перехвата управления устройством, подслушав сеанс входа в **Telnet**.

Полезные ресурсы:

- [Telnet и SSH как безопасная альтернатива](https://www.ssh.com/ssh/telnet)
- [Как подключиться по telnet к IP-адресу на определенный порт?](https://superuser.com/questions/339107/how-to-telnet-to-an-ip-address-on-a-specific-port)

</details>

<details>
<summary><b>В чем разница между <code>wget</code> и <code>curl</code>?</b></summary><br>

Основные различия: главное преимущество `wget` перед `curl` — это возможность рекурсивной загрузки. `wget` работает только из командной строки. `curl` поддерживает FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS, FILE, POP3, IMAP, SMTP, RTMP и RTSP.

Полезные ресурсы:

- [В чем разница между curl и wget? (оригинал)](https://unix.stackexchange.com/questions/47434/what-is-the-difference-between-curl-and-wget)

</details>

<details>
<summary><b>Что такое SSH и как он работает?</b></summary><br>

**SSH** расшифровывается как **Secure Shell**. Это протокол, который позволяет из сервера «А» перейти в shell-сессию на сервере «Б». Он позволяет взаимодействовать с вашим сервером «Б».

Для установления соединения **SSH** на удаленной машине (сервер A) должна быть запущена программа, называемая **SSH**-демоном, а на компьютере пользователя (сервер B) должен быть **SSH**-клиент.

**SSH**-демон и **SSH**-клиент прослушивают соединения на определенном сетевом порту (по умолчанию 22), аутентифицируют запросы на подключение и запускают соответствующее окружение, если пользователь предоставляет правильные учетные данные.

Полезные ресурсы:

- [Понимание процесса шифрования и подключения SSH](https://www.digitalocean.com/community/tutorials/understanding-the-ssh-encryption-and-connection-process)

</details>

<details>
<summary><b>В большинстве руководств рекомендуется использовать аутентификацию по SSH-ключам, а не по паролю. Почему это считается более безопасным?</b></summary><br>

**SSH-ключ** — это учетные данные для доступа в протоколе SSH. Его функция аналогична имени пользователя и паролю, но ключи в основном используются для автоматизированных процессов и реализации единого входа (SSO) системными администраторами и опытными пользователями.

Вместо требования пароля пользователя можно подтвердить личность клиента с помощью алгоритмов асимметричного шифрования, используя открытый и закрытый ключи.

Если ваша SSH-служба разрешает только аутентификацию по открытому ключу, злоумышленнику потребуется копия закрытого ключа, соответствующего открытому ключу, хранящемуся на сервере.

Если ваша SSH-служба разрешает аутентификацию по паролю, то ваш SSH-сервер, подключенный к Интернету, будет круглосуточно атакован ботнетами, пытающимися угадать имена пользователей и пароли. Ботнету не нужна никакая информация — он может просто перебирать популярные имена и пароли. Помимо прочего, это засоряет ваши журналы.

Полезные ресурсы:

- [Аутентификация на основе ключей (аутентификация по открытому ключу)](http://www.crypto-it.net/eng/tools/key-based-authentication.html)
- [SSH: парольная аутентификация против ключевой](https://security.stackexchange.com/questions/33381/ssh-password-vs-key-authentication)

</details>

<details>
<summary><b>Что такое пакетный фильтр и как он работает?</b></summary><br>

**Пакетная фильтрация** — это метод межсетевого экранирования, используемый для управления сетевым доступом путем мониторинга исходящих и входящих пакетов и разрешения или блокировки их прохождения на основе исходного и целевого IP-адресов, протоколов и портов.

Пакетная фильтрация подходит там, где требования к безопасности невысоки. Внутренние (частные) сети многих организаций не сильно сегментированы. Для изоляции одной части организации от другой не требуются сверхсложные межсетевые экраны.

Однако разумно обеспечить некоторую защиту производственной сети от лабораторной или экспериментальной сети. Устройство пакетной фильтрации — очень подходящая мера для изоляции одной подсети от другой.

Работая на сетевом и транспортном уровнях стека протоколов TCP/IP, каждый пакет проверяется при его поступлении в стек протоколов. Заголовки сетевого и транспортного уровней тщательно изучаются на предмет следующей информации:

- **протокол (IP-заголовок, сетевой уровень)** — в IP-заголовке байт 9 (напомним, отсчет байтов начинается с нуля) определяет протокол пакета. Большинство фильтрующих устройств способны различать TCP, UDP и ICMP.
- **исходный адрес (IP-заголовок, сетевой уровень)** — исходный адрес — это 32-битный IP-адрес хоста, создавшего пакет.
- **целевой адрес (IP-заголовок, сетевой уровень)** — целевой адрес — это 32-битный IP-адрес хоста, которому предназначен пакет.
- **исходный порт (заголовок TCP или UDP, транспортный уровень)** — каждый конец TCP- или UDP-соединения привязан к порту. Порты TCP отдельны и отличны от портов UDP. Порты с номерами ниже 1024 зарезервированы — они имеют строго определенное назначение. Порты с номерами 1024 и выше известны как эфемерные порты. Их можно использовать по выбору поставщика. Список «общеизвестных» портов см. в RFC1700. Исходный порт — это псевдослучайно назначенный эфемерный номер порта. Поэтому часто не имеет смысла фильтровать по исходному порту.
- **целевой порт (заголовок TCP или UDP, транспортный уровень)** — номер целевого порта указывает порт, на который отправляется пакет. Каждая служба на целевом хосте прослушивает свой порт. Некоторые известные порты, которые могут фильтроваться: 20/TCP и 21/TCP — ftp-соединение/данные, 23/TCP — telnet, 80/TCP — http, 53/TCP — зональные передачи DNS.
- **статус соединения (заголовок TCP, транспортный уровень)** — статус соединения показывает, является ли пакет первым пакетом сетевой сессии. Бит ACK в заголовке TCP устанавливается в «false» или 0, если это первый пакет в сессии. Просто запретить хосту устанавливать соединение, отбрасывая любые пакеты с битом ACK, установленным в «false» или 0.

Полезные ресурсы:

- [Building Internet Firewalls — Пакетная фильтрация](http://web.deu.edu.tr/static/oreily/networking/firewall/ch06_01.htm)

</details>

<details>
<summary><b>Каковы преимущества использования обратного прокси-сервера?</b></summary><br>

**Скрытие топологии и характеристик ваших внутренних серверов**

**Обратный прокси-сервер** может скрыть присутствие и характеристики исходного сервера. Он действует как посредник между облаком Интернета и веб-сервером. Это хорошо с точки зрения безопасности, особенно при использовании услуг веб-хостинга.

**Обеспечивает прозрачное обслуживание внутренних серверов**

Изменения, вносимые в серверы, работающие за обратным прокси, будут полностью незаметны для конечных пользователей.

**Балансировка нагрузки**

Обратный прокси будет применять алгоритм балансировки нагрузки, такой как round robin, взвешенный round robin, наименьшее количество соединений, взвешенное наименьшее количество соединений или случайный, для распределения нагрузки между серверами в кластере.

Когда сервер выходит из строя, система автоматически переключается на следующий работающий сервер, и пользователи могут продолжать свою деятельность по безопасной передаче файлов.

**Разгрузка/завершение SSL**

Обрабатывает входящие HTTPS-соединения, расшифровывая запросы и передавая незашифрованные запросы веб-серверам.

**Маскировка IP**

Использование одного IP-адреса, но разных URL-адресов для маршрутизации к различным внутренним серверам.

Полезные ресурсы:

- [Преимущества обратного прокси](https://dzone.com/articles/benefits-reverse-proxy)

</details>

<details>
<summary><b>В чем разница между маршрутизатором и шлюзом? Что такое шлюз по умолчанию?</b></summary><br>

**Маршрутизатор** описывает общую техническую функцию (пересылка на уровне 3) или аппаратное устройство, предназначенное для этой цели, в то время как шлюз описывает функцию для локального сегмента (обеспечение связи с другими сетями). Можно также сказать, что «вы настраиваете маршрутизатор как шлюз». Другой термин — «хоп», описывающий пересылку между подсетями.

Термин **шлюз по умолчанию** используется для обозначения маршрутизатора в вашей локальной сети, который отвечает за первичную обработку трафика, направленного за пределы локальной сети.

Это просто вопрос точки зрения — устройство одно и то же.

Полезные ресурсы:

- [Разница между маршрутизатором и шлюзом (оригинал)](https://networkengineering.stackexchange.com/questions/51426/difference-between-router-and-gateway)

</details>

<details>
<summary><b>Объясните назначение каждой из следующих DNS-записей: SOA, PTR, A, MX и CNAME.</b></summary><br>

**DNS-записи** — это, по сути, файлы сопоставления, которые сообщают DNS-серверу, с каким IP-адресом связан каждый домен, и как обрабатывать запросы, отправляемые на каждый домен. Некоторые синтаксисы **DNS-записей**, обычно используемые почти во всех конфигурациях DNS, — это `A`, `AAAA`, `CNAME`, `MX`, `PTR`, `NS`, `SOA`, `SRV`, `TXT` и `NAPTR`.

- **SOA** — Start Of Authority (начало зоны авторитетности)
- **A** — запись сопоставления адресов
- **AAAA** — запись адреса IPv6
- **CNAME** — каноническая запись имени
- **MX** — запись почтового обменника
- **NS** — запись сервера имен
- **PTR** — запись обратного указателя

Полезные ресурсы:

- [Список типов DNS-записей](https://en.wikipedia.org/wiki/List_of_DNS_record_types)

</details>

<details>
<summary><b>Почему MAC-адреса нельзя использовать вместо IPv4/IPv6 для работы в сети?</b></summary><br>

Модель **OSI** объясняет, почему не имеет смысла принимать решения о маршрутизации (концепция **уровня 3**) на основе физического механизма (**уровень 2**).

Современные сети разделены на множество различных уровней для обеспечения сквозной связи. Ваша сетевая карта (которая адресуется MAC-адресом — физическим адресом) должна отвечать только за связь с узлами в своей физической сети.

Связь, которую вы можете установить с помощью вашего **MAC**-адреса, будет ограничена другими устройствами, находящимися в физическом контакте с вашей машиной. В Интернете, например, вы физически не подключены к каждой машине. Поэтому мы используем механизм **TCP/IP** (логический адрес **уровня 3**), когда нам нужно связаться с машиной, к которой мы не подключены физически.

**IP** — это произвольная схема нумерации, иерархически наложенная на группу компьютеров для логического выделения их в группу (это и есть подсеть). Обмен сообщениями между такими группами осуществляется с помощью таблиц маршрутизации, которые, в свою очередь, разделены на несколько уровней, чтобы нам не приходилось отслеживать каждую подсеть.

Это также легко соотнести с другой парой систем. У вас есть удостоверение личности, выданное государством. Зачем вам нужен почтовый адрес, если этот номер уже уникален для вас? Почтовый адрес нужен, потому что это произвольная система, описывающая, куда должно направляться уникальное место назначения для связи с вами.

С другой стороны, распределение **MAC**-адресов по сети является случайным и совершенно не связано с топологией. Группировка маршрутов была бы невозможна, каждому маршрутизатору пришлось бы хранить маршруты для каждого устройства, которое передает через него трафик. Это как раз то, что делают коммутаторы **уровня 2**, и это плохо масштабируется за пределами определенного количества хостов.

Полезные ресурсы:

- [Почему MAC-адреса нельзя использовать вместо IPv4/IPv6 для работы в сети? (оригинал)](https://serverfault.com/questions/410626/why-couldnt-mac-addresses-be-used-instead-of-ipv46-for-networking)

</details>

<details>
<summary><b>Какова наименьшая маска подсети IPv4, которую можно применить к сети, содержащей до 30 устройств?</b></summary><br>

Будь то стандартная VLAN `/24` для конечных пользователей, `/30` для каналов «точка-точка» или что-то среднее, подсеть, которая должна содержать до 30 устройств, соответствует маске `/27` — или маске подсети `255.255.255.224`.

Полезные ресурсы:

- [Как рассчитать префикс, сеть, подсеть и количество хостов?](https://networkengineering.stackexchange.com/questions/7106/how-do-you-calculate-the-prefix-network-subnet-and-host-numbers)
- [Слеш после IP-адреса — нотация CIDR](https://networkengineering.stackexchange.com/questions/3697/the-slash-after-an-ip-address-cidr-notation)
- [Почему существует 3 диапазона частных IPv4-адресов?](https://networkengineering.stackexchange.com/questions/32119/why-are-there-3-ranges-of-private-ipv4-addresses)
- [IP-калькулятор](http://jodies.de/ipcalc)

</details>

<details>
<summary><b>Назовите некоторые распространенные HTTP-статус коды.</b></summary><br>

- **1xx** — Информационные ответы — передают информацию протокольного уровня
- **2xx** — Успех — указывает, что запрос клиента был успешно принят
- **3xx** — Перенаправление — указывает, что клиент должен предпринять дополнительные действия для завершения своего запроса
- **4xx** — Ошибка на стороне клиента — эта категория кодов ошибок указывает на клиента
- **5xx** — Ошибка на стороне сервера — сервер берет на себя ответственность за эти коды статуса ошибок

Полезные ресурсы:

- [HTTP-статус коды](https://httpstatuses.com/)

</details>

###### Вопросы по DevOps (5)

<details>
<summary><b>Что такое DevOps? Что важнее для успеха любого сообщества DevOps: то, как люди общаются, или инструменты, которые вы выбираете для развертывания? ***</b></summary><br>

**DevOps** — это сплоченная команда, которая занимается как разработкой (Development), так и эксплуатацией (Operations), или же это отдельные команды эксплуатации и разработки, работающие очень тесно. Это скорее «способ» совместной работы с другими отделами для достижения общих целей.

</details>

<details>
<summary><b>Что такое система контроля версий? Ваши сообщения коммитов хорошо оформлены?</b></summary><br>

Это система, которая записывает изменения в файл или набор файлов с течением времени, чтобы вы могли впоследствии вернуться к определенным версиям. Системы контроля версий состоят из центрального общего репозитория, куда участники команды могут фиксировать изменения в файле или наборе файлов. Затем вы можете упомянуть варианты использования контроля версий.

Контроль версий позволяет:

- откатить файлы к предыдущему состоянию
- откатить весь проект к предыдущему состоянию
- сравнивать изменения с течением времени
- увидеть, кто последним изменял то, что могло вызвать проблему
- кто и когда внес проблему

Семь правил хорошего сообщения коммита:

- отделить тему от тела пустой строкой
- ограничить строку темы 50 символами
- использовать заглавную букву в начале темы
- не ставить точку в конце темы
- использовать повелительное наклонение в теме
- переносить тело на 72 символах
- использовать тело для объяснения «что» и «почему», а не «как»

Полезные ресурсы:

- [Начало работы — О контроле версий (оригинал)](https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control)

</details>

<details>
<summary><b>Объясните некоторые основные команды <code>git</code>.</b></summary><br>

- `git init` — создать новый локальный репозиторий
- `git commit -m "message"` — зафиксировать изменения в HEAD
- `git status` — вывести список файлов, добавленных с помощью `git add`, а также любые файлы, измененные с тех пор
- `git push origin master` — отправить изменения в ветку master вашего удаленного репозитория

</details>

<details>
<summary><b>Объясните простой конвейер непрерывной интеграции (Continuous Integration).</b></summary><br>

- клонировать репозиторий
- этап развертывания (QA)
- среда тестирования (QA)
- этап развертывания (PROD)

</details>

<details>
<summary><b>Объясните некоторые основные команды <code>docker</code>.</b></summary><br>

- `docker ps` — показать запущенные контейнеры
- `docker ps -a` — показать все контейнеры
- `docker images` — показать образы Docker
- `docker logs <container-id|container-name>` — получить логи контейнера
- `docker network ls` — показать все сети Docker
- `docker volumes ls` — показать все тома Docker
- `docker exec -it <container-id|container-name> bash` — выполнить bash в контейнере с интерактивной оболочкой

</details>

###### Вопросы по кибербезопасности (1)

<details>
<summary><b>Что такое небезопасная конфигурация (Security Misconfiguration)?</b></summary><br>

**Небезопасная конфигурация** — это уязвимость, когда устройство/приложение/сеть сконфигурированы таким образом, что злоумышленник может использовать это в своих целях. Это может быть так же просто, как оставление имени пользователя и пароля по умолчанию без изменений или слишком простые пароли для учетных записей устройств и т.д.

</details>

### :diamond_shape_with_a_dot_inside: <a name="regular-sysadmin">Обычный сисадмин</a>

###### Системные вопросы (60)

<details>
<summary><b>Расскажите о вашем опыте работы с производственными средами? ***</b></summary><br>

To be completed.

</details>

<details>
<summary><b>Какой дистрибутив вы бы выбрали для запуска крупного веб-сервера? ***</b></summary><br>

To be completed.

</details>

<details>
<summary><b>Объясните в нескольких пунктах процесс загрузки системы Linux.</b></summary><br>

**BIOS**: Полное название BIOS — Basic Input/Output System, она выполняет проверку целостности, а затем ищет, загружает и выполняет загрузчик.

**Загрузчик (Bootloader)**: Поскольку ранние этапы не зависят от операционной системы, процесс загрузки на базе BIOS для архитектур x86 и x86-64 считается начинающимся, когда выполняется код главной загрузочной записи (MBR) в реальном режиме и загружается загрузчик первой стадии. В системах UEFI может выполняться непосредственно полезная нагрузка, например ядро Linux. Таким образом, загрузчик не требуется. Некоторые популярные загрузчики: **GRUB**, **Syslinux/Isolinux** или **Lilo**.

**Ядро (Kernel)**: Ядро в Linux обрабатывает все процессы операционной системы, такие как управление памятью, планирование задач, ввод/вывод, межпроцессное взаимодействие и общее управление системой. Оно загружается в два этапа: на первом этапе ядро (в виде сжатого файла образа) загружается в память и распаковывается, настраиваются несколько фундаментальных функций, таких как базовое управление памятью.

**Init**: Является родительским процессом для всех процессов в системе, он выполняется ядром и отвечает за запуск всех остальных процессов.

- `SysV init` — задача init состоит в том, «чтобы все работало должным образом, как только ядро полностью запущено». По сути, он устанавливает и управляет всем пользовательским пространством. Сюда входит проверка и монтирование файловых систем, запуск необходимых пользовательских служб и, в конечном итоге, переключение на пользовательскую среду после завершения загрузки системы.
- `systemd` — разработчики systemd намеревались заменить систему инициализации Linux, унаследованную от Unix System V. Как и init, systemd — это демон, управляющий другими демонами. Все демоны, включая systemd, являются фоновыми процессами. Systemd запускается первым (во время загрузки) и завершается последним (во время выключения).
- `runit` — runinit — это схема инициализации для Unix-подобных операционных систем, которая инициализирует, контролирует и завершает процессы во всей операционной системе. Это реализация инструментария контроля процессов daemontools, работающая в операционных системах Linux, Mac OS X, \*BSD и Solaris.

Полезные ресурсы:

- [Анализ процесса загрузки Linux](https://opensource.com/article/18/1/analyzing-linux-boot-process)
- [Процесс загрузки systemd в Linux — подробный обзор](https://linoxide.com/linux-how-to/systemd-boot-process/)

</details>

<details>
<summary><b>Как и почему демоны Linux понижают свои привилегии? Почему некоторым демонам для запуска требуются права root? Объясните. ***</b></summary>

To be completed.

</details>

<details>
<summary><b>Почему загрузка 1.00 не является идеальной для одноядерной машины?</b></summary><br>Проблема с нагрузкой 1.00 заключается в том, что у вас нет запаса. На практике многие системные администраторы проводят черту на отметке 0.70.

**Эмпирическое правило «Нужно разобраться»: 0.70.** Если средняя загрузка стабильно превышает 0.70, пора заняться расследованием, пока ситуация не ухудшилась.

**Эмпирическое правило «Исправлять немедленно»: 1.00.** Если средняя загрузка стабильно превышает 1.00, найдите проблему и исправьте её сейчас. Иначе вас разбудят среди ночи, и это будет невесело.

**Эмпирическое правило: 5.0.** Если средняя загрузка превышает 5.00, вы можете оказаться в серьёзной беде: ваша машина либо зависнет, либо сильно замедлится, и это (необъяснимо) случится в самый неподходящий момент — например, посреди ночи или во время выступления на конференции. Не допускайте этого.

Полезные ресурсы:

- [Правильный способ интерпретации системной загрузки на процессоре с 4 ядрами и 8 потоками](https://serverfault.com/questions/618130/proper-way-of-interpreting-system-load-on-a-4-core-8-thread-processor)
- [Понимание загрузки ЦП в Linux — когда стоит беспокоиться?](http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages)

</details>

<details>
<summary><b>Что означает, что эффективный пользователь — root, а реальный идентификатор пользователя по-прежнему ваше имя?</b></summary><br>

**Реальный идентификатор пользователя (real user ID)** — это кто вы на самом деле (пользователь, которому принадлежит процесс), а **эффективный идентификатор пользователя (effective user ID)** — это то, на что смотрит операционная система, принимая решение, разрешено ли вам что-то делать (в большинстве случаев, хотя бывают исключения).

Когда вы входите в систему, оболочка входа устанавливает и **реальный, и эффективный идентификаторы пользователя** в одно и то же значение (ваш **реальный идентификатор пользователя**), взятое из файла паролей.

Если, например, вы выполняете setuid, и помимо работы от имени другого пользователя (например, **root**), программа setuid также должна что-то сделать от вашего имени.

После выполнения setuid у неё будет ваш **реальный идентификатор** (поскольку вы владелец процесса) и эффективный идентификатор пользователя владельца файла (например, **root**), так как она установлена как setuid.

Рассмотрим пример с `passwd`:```bash
-rwsr-xr-x 1 root root 45396 may 25  2012 /usr/bin/passwd
Разработчик добавил cron-задачу, которая генерирует огромные лог-файлы. Как предотвратить их чрезмерный рост?

Использование logrotate — обычный способ работы с лог-файлами. Но вместо добавления содержимого в /etc/logrotate.conf лучше добавить свою задачу в /etc/logrotate.d/, иначе при обновлении версий придётся просматривать больше различий в файлах конфигурации.

Если файл активно пишется, у вас не так много возможностей для его усечения. Единственные варианты — усечь файл:```bash : >/var/log/massive-logfile

root@kitploit:~
Это очень удобно, так как позволяет усекать файл без нарушения работы процессов.

Полезные ресурсы:

- [How to Use logrotate to Manage Log Files](https://www.linode.com/docs/uptime/logs/use-logrotate-to-manage-log-files/)
- [System logging](https://www.ibm.com/developerworks/library/l-lpic1-108-2/index.html)

</details>

<details>
<summary><b>Как ядро Linux создаёт, управляет и удаляет процессы в системе? ***</b></summary><br>

Будет дополнено.

Полезные ресурсы:

- [Linux Processes](https://www.tldp.org/LDP/tlk/kernel/processes.html)

</details>

<details>
<summary><b>Объясните выбранную информацию, которую можно увидеть в <code>top</code> и <code>htop</code>. Как диагностировать нагрузку, высокое время пользовательского режима и проблемы с нехваткой памяти с помощью этих инструментов? ***</b></summary><br>

Будет дополнено.

Полезные ресурсы:

- [top explained visually](https://www.svennd.be/top-explained-visually/)
- [htop Explained Visually](https://codeahoy.com/2017/01/20/hhtop-explained-visually/)
- [Explanation of everything you can see in htop/top on Linux](https://peteris.rocks/blog/htop/)

</details>

<details>
<summary><b>Как распознать процесс, который пожирает ресурсы? </b></summary><br>

`top` работает достаточно хорошо, если смотреть на правильные цифры.
- **M** Сортировка по текущему использованию резидентной памяти
- **T** Сортировка по общему (или накопленному) использованию ЦП
- **P** Сортировка по текущему использованию ЦП (это обновление по умолчанию)
- **?** Отображает сводку использования для всех команд top

Это очень важная информация для выяснения причин медленной работы компьютерного процесса и принятия решений о том, какие процессы завершить/какое программное обеспечение удалить.

Полезные ресурсы:

- [How to find the process(es) which are hogging the machine](https://superuser.com/questions/326300/how-to-find-the-processes-which-are-hogging-the-machine)

</details>

<details>
<summary><b>Вам необходимо обновить службу <code>ntpd</code> на 200 серверах. Как лучше всего обновить их все до последней версии?</b></summary><br>

Используя подход **Инфраструктура как код**, существует несколько хороших способов:

1. **Модель управления изменениями через синхронизацию конфигурации**:

Существуют инструменты управления конфигурацией (Ansible, Chef, Puppet, Saltstack и т.д.), которые можно использовать для автоматического обновления службы `ntpd` на всех серверах. Для поддержания стабильности систем пакеты на серверах обычно обновляются автоматически только с исправлениями безопасности. Основные или минорные версии пакетов обычно фиксируются по версии в определениях конфигурации, чтобы предотвратить неправильную настройку службы. Изменение развёртывается путём изменения версии `ntpd` в определении конфигурации.

При таком подходе важно быть осторожным при массовом развёртывании изменений в инфраструктуре. Конвейер развёртывания должен включать модульные, интеграционные и системные тесты, а в конечном итоге сначала развёртываться в среду Staging для проверки конфигурации. Если тесты подтверждают корректность конфигурации, развёртывание должно выполняться поэтапно с возможностью отката в случае ошибок или сбоев.

2. **Модель неизменяемых серверов**:

В модели неизменяемого сервера целая единица (сервер, контейнер) заменяется новым обновлённым образом, а не вносятся изменения в работающий сервер (это устраняет дрейф конфигурации). При таком подходе образ сервера обычно создаётся с помощью инструментов, таких как Packer или Docker с Dockerfile. Затем этот образ тестируется и развёртывается аналогично варианту выше (1.), но теперь используются такие техники, как Canary Release, которые также позволяют поэтапное развёртывание и откат.

Полезные ресурсы:

- [Infrastructure as a Code - Chapter 8: Patterns for Updating and Changing Servers](http://shop.oreilly.com/product/0636920039297.do)

</details>

<details>
<summary><b>Как навсегда установить <code>$PATH</code> в Linux/Unix? Почему эта переменная так важна? ***</b></summary>

Будет дополнено.

</details>

<details>
<summary><b>Когда сервер загружается, на консоли появляются некоторые ошибки. Как просмотреть сообщения загрузки и где они хранятся?</b></summary><br>

На вашей консоли есть два типа сообщений:

- **сгенерированные ядром** (через printk)
- **сгенерированные пользовательским пространством** (обычно вашей системой инициализации)

Сообщения ядра всегда хранятся в буфере **kmsg**, который виден через команду `dmesg`. Они также часто копируются в ваш **syslog**. Это также относится к сообщениям пользовательского пространства, записанным в `/dev/kmsg`, но такие встречаются довольно редко.

Между тем, когда пользовательское пространство выводит свой нарядный статус загрузки на `/dev/console` или `/dev/tty1`, оно нигде не сохраняется. Оно просто идёт на экран, и всё.

`dmesg` используется для просмотра сообщений загрузки, содержащихся в кольцевом буфере ядра. Кольцевой буфер — это буфер фиксированного размера, в котором любые новые данные перезаписывают самые старые.

Он показывает операции после завершения процесса загрузки, такие как параметры командной строки, переданные ядру; обнаруженные аппаратные компоненты, события при подключении нового USB-устройства или ошибки, например, отказ NIC (сетевой интерфейсной карты), когда драйверы сообщают об отсутствии активности на сетевом канале, и многое другое.

Если ведение журнала системы осуществляется через компонент journal, следует использовать `journalctl`. Он показывает сообщения, включая сообщения ядра и загрузки; сообщения от syslog или различных служб.

Проблемы/ошибки загрузки требуют от системного администратора просмотра определённых важных файлов в сочетании с определёнными командами (обрабатываются по-разному в разных версиях Linux):

- `/var/log/boot.log` — журнал загрузки системы, содержит всё, что происходило во время загрузки системы
- `/var/log/messages` — хранит глобальные системные сообщения, включая сообщения, регистрируемые во время загрузки системы
- `/var/log/dmesg` — содержит информацию кольцевого буфера ядра
Скачать инструмент
Тип главыКоличество вопросовКраткое описание
Введение
🔸 Простые вопросы14 вопросовРасслабленные, весёлые и простые — отлично подходят для начала.
Общие знания
🔸 Младший сисадмин65 вопросовДостаточно простые и основанные на базовых знаниях.
🔸 Обычный сисадмин94 вопросаСредний уровень вопросов для тех, кто обладает хорошими знаниями.
🔸 Старший сисадмин99 вопросовСложные вопросы и головоломки. Проверьте, если хотите быть хорошим.
Секретные знания
🔸 Гуру сисадмин12 вопросовДействительно глубокие вопросы, чтобы узнать Гуру сисадмина.
bash-completion

Советы и уловки

  • поиск в истории команд с помощью CTRL + R
  • popd/pushd и другие встроенные функции оболочки, которые позволяют управлять стеком директорий
  • сочетания клавиш редактирования, такие как CTRL + U, CTRL + E
  • комбинации будут автоматически разворачиваться:
    • !* — все аргументы последней команды
    • !! — вся последняя команда
    • !ssh — последняя команда, начинающаяся с ssh

Полезные ресурсы:

  • Определение интерфейса командной строки
  • Какой у вас самый любимый трюк с командной строкой при использовании Bash?
  • Какие ваши любимые функции или трюки командной строки?

Для получения подробной информации, включая имя пользователя, терминал, IP-адрес исходного компьютера, время начала сеанса, время простоя, тактовые циклы процессора, тактовые циклы задания и текущую выполняемую команду, введите:```bash

It uses /var/run/utmp, and their processes /proc.

w

root@kitploit:~
Также важно для отображения списка последних вошедших пользователей, введите:```bash
# It uses /var/log/wtmp.
last

Полезные ресурсы:

  • 4 способа определить, кто вошёл в вашу систему Linux
How do I run a Unix process in the background?
  • Job Control Commands
  • What is/are the advantage(s) of running applications in background?
  • Where are the passwords of the users located in Linux?
  • Linux Password & Shadow File Formats
  • или```bash grep -e "string1" -e "string2" filename

    root@kitploit:~
    Полезные ресурсы:
    
    - [Что такое grep и как его использовать? (оригинал)](https://kb.iu.edu/d/afiy)
    
    </details>
    
    <details>
    <summary><b>Объясните команды для работы с содержимым файлов и их описание.</b></summary><br>
    
    - `head`: проверка начала файла.
    - `tail`: проверка окончания файла. Противоположна команде head.
    - `cat`: используется для просмотра, создания и объединения файлов.
    - `more`: используется для отображения текста в окне терминала в режиме постраничного просмотра.
    - `less`: используется для просмотра текста в обратном направлении, а также обеспечивает построчное перемещение.
    
    Полезные ресурсы:
    
    - [Просмотр текстовых файлов из командной строки](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Step_by_Step_Guide/s1-viewingtext-terminal.html)
    
    </details>
    
    <details>
    <summary><b>Сигналы POSIX SIGHUP, SIGINT, SIGKILL и SIGTERM. Объяснение.</b></summary><br>
    
    - **SIGHUP** - отправляется процессу, когда его управляющий терминал закрывается. Изначально был предназначен для уведомления процесса о разрыве последовательной линии (обрыве связи). Многие демоны при получении этого сигнала перезагружают свои конфигурационные файлы и повторно открывают файлы журналов вместо завершения.
    - **SIGINT** - отправляется процессу его управляющим терминалом, когда пользователь хочет прервать процесс. Обычно это инициируется нажатием `Ctrl+C`, но в некоторых системах можно использовать символ "delete" или клавишу "break".
    - **SIGKILL** - отправляется процессу для немедленного завершения (убийства). В отличие от **SIGTERM** и **SIGINT**, этот сигнал нельзя перехватить или игнорировать, и принимающий процесс не может выполнить никаких операций очистки при его получении.
    - **SIGTERM** - отправляется процессу с запросом на завершение. В отличие от сигнала **SIGKILL**, он может быть перехвачен и обработан или проигнорирован процессом. Это позволяет процессу корректно завершиться, освободив ресурсы и сохранив состояние, если это необходимо. **SIGINT** почти идентичен **SIGTERM**.
    
    Полезные ресурсы:
    
    - [Сигналы POSIX](https://dsa.cs.tsinghua.edu.cn/oj/static/unix_signal.html)
    - [Введение в программирование сигналов Unix](http://titania.ctie.monash.edu.au/signals/)
    
    </details>
    
    <details>
    <summary><b>Что делает команда <code>kill</code>?</b></summary><br>
    
    В Unix и Unix-подобных операционных системах `kill` — это команда, используемая для отправки сигнала процессу. По умолчанию отправляется сигнал завершения, который запрашивает выход процесса. Но название `kill` вводит в заблуждение; отправляемый сигнал может не иметь ничего общего с завершением процесса.
    
    Полезные ресурсы:
    
    - [Освоение команды "Kill" в Linux](https://www.maketecheasier.com/kill-command-in-linux/)
    
    </details>
    
    <details>
    <summary><b>В чем разница между <code>rm</code> и <code>rm -rf</code>?</b></summary><br>
    
    `rm` удаляет только указанные файлы (не каталоги). С параметром `-rf`, как вы говорите:
    
    - `-r`, `-R`, `--recursive` рекурсивно удаляет содержимое каталога, включая скрытые файлы и подкаталоги
    - `-f`, `--force` игнорировать несуществующие файлы, никогда не запрашивать подтверждение
    
    Полезные ресурсы:
    
    - [В чем разница между `rm -r` и `rm -f`?](https://superuser.com/questions/1126206/what-is-the-difference-between-rm-r-and-rm-f)
    
    </details>
    
    <details>
    <summary><b>Как выполнить рекурсивный <code>grep</code>? Объясните на нескольких примерах. ***</b></summary>
    
    Дополнить.
    
    </details>
    
    <details>
    <summary><b><code>archive.tgz</code> имеет размер ~30 ГБ. Как просмотреть его содержимое и извлечь только один файл?</b></summary><br>```bash
    # list of content
    tar tf archive.tgz
    
    # extract file
    tar xf archive.tgz filename
    

    Полезные ресурсы:

    • Просмотр содержимого tar или tar.gz файла
    • Извлечение определенных файлов из tar.gz
  • r - разрешение на чтение
  • w - разрешение на запись
  • Полезные ресурсы:

    • Как установить права доступа к файлам с помощью chmod
    • Что делает "chmod +x имя_файла" и как его использовать?

    Полезные ресурсы:

    • Как найти файлы больше/меньше x байт?
    VLAN

    Подсеть — это не более чем диапазон IP-адресов, который помогает хостам взаимодействовать на уровне 2 и 3. Каждая подсеть не требует своей VLAN. VLAN используются для изоляции (песочница для обмена на втором уровне: две системы из разных VLAN не могут взаимодействовать, но это можно сделать с помощью меж-VLAN маршрутизации), упрощения управления и повышения безопасности.

    Полезные ресурсы:

    • В чем разница между VLAN и подсетью? (оригинал)
    • VLAN и подсети для сетевой безопасности и сегментации
    СЛУЖБАПОРТ
    SMTP25
    FTP20 для передачи данных и 21 для установки соединения
    DNS53
    DHCP67/UDP для сервера DHCP, 68/UDP для клиента DHCP
    SSH22

    Полезные ресурсы:

    • Red Hat Enterprise Linux 4: Руководство по безопасности - Общие порты

    Вы можете (иногда) выполнить обратное разрешение IP-адреса в имя хоста. IP-адрес может быть сохранен в записи PTR. Затем вы можете сделать:```bash dig A

    root@kitploit:~
    Чтобы найти IPv4-адрес для хоста, или:```bash
    dig AAAA <hostname>
    

    Для поиска IPv6-адреса для хоста, или:```bash dig PTR ZZZ.YYY.XXX.WWW.in-addr.arpa.

    root@kitploit:~
    Для поиска имени хоста по IPv4-адресу `WWW.XXX.YYY.ZZZ` (обратите внимание, октеты расположены в обратном порядке), или:```bash
    dig PTR b.a.9.8.7.6.5.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.
    

    Полезные ресурсы:

    • Как преобразовать имя хоста в IP-адрес в Bash-скрипте?
    • Как преобразовать IP-адреса в доменные имена?

    Когда пользователь2 хочет изменить свой пароль, он выполняет /usr/bin/passwd.

    RUID будет пользователем2, но EUID этого процесса будет root.

    Пользователь2 может использовать passwd только для смены своего собственного пароля, потому что внутренне passwd проверяет RUID и, если он не root, его действия будут ограничены паролем реального пользователя.

    Необходимо, чтобы EUID стал root в случае passwd, так как процессу нужно записывать в /etc/passwd и/или /etc/shadow.

    Полезные ресурсы:

    • Разница между Real User ID, Effective User ID и Saved User ID? (оригинал)
    • В чем разница между pid, ppid, uid, euid, gid и egid?

    Read more