<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Linux on dedinit()</title><link>https://dedinit.ru/tags/linux/</link><description>Recent content in Linux on dedinit()</description><generator>Hugo -- 0.165.0</generator><language>ru-ru</language><lastBuildDate>Sun, 10 May 2026 17:14:10 +0300</lastBuildDate><atom:link href="https://dedinit.ru/tags/linux/index.xml" rel="self" type="application/rss+xml"/><item><title>Проблема загрузки Ubuntu на RD450X+5060ti</title><link>https://dedinit.ru/2026/rd450x_not_boot_5060ti/</link><pubDate>Sun, 10 May 2026 17:14:10 +0300</pubDate><guid>https://dedinit.ru/2026/rd450x_not_boot_5060ti/</guid><description>После штатных выключения и включения сервера. Он перестал загружаться. Последнее сообщение на мониторе - EFI stub: Loaded initrd from LINUX_EFI_INITRD_MEDIA_GUID device path.</description><content:encoded><![CDATA[<figure class="entry-cover"><img src="https://dedinit.ru/2026/rd450x_not_boot_5060ti/hero.svg" alt="Hero картинка в SVG"></figure><h2 id="проблема-зависание-загрузки-ubuntu-после-обновления-с-сообщением-efi-stub">Проблема: зависание загрузки Ubuntu после обновления с сообщением EFI stub</h2>
<h3 id="симптомы">Симптомы</h3>
<p>После выполнения <code>apt upgrade</code> (об этом я вспомнил уже после того как разобарлся с пробелмой) и перезагрузки система перестала загружаться. На экране последнее сообщение:</p>
<pre tabindex="0"><code>EFI stub: Loaded initrd from LINUX_EFI_INITRD_MEDIA_GUID device path
</code></pre><p>После этого — полное зависание. GRUB работает, выбор ядра доступен. Ошибок ядра (<code>kernel panic</code>, <code>Oops</code>) нет.</p>
<h3 id="окружение">Окружение</h3>
<ul>
<li>ОС: Ubuntu (ядро 6.8.0-111-generic)</li>
<li>Видеокарта: NVIDIA RTX 5060 Ti (архитектура Blackwell)</li>
<li>Дисковая подсистема: программный RAID1 (mdadm)</li>
</ul>
<h3 id="диагностика">Диагностика</h3>
<ol>
<li><strong>Аппаратная часть исправна:</strong> диски определяются в BIOS, SMART — PASSED, RAID-суперблоки на месте (<code>mdadm --examine</code> показал корректные UUID).</li>
<li><strong>RAID собирается:</strong> <code>mdadm --assemble --scan</code> активен, <code>/proc/mdstat</code> — массив в состоянии <code>[UU]</code>. Проверял на соседней машине.</li>
<li><strong>LiveUSB с Ubuntu/Debian не загружается</strong> — аналогичное зависание на той же строчке.</li>
<li><strong>UEFI Shell работает</strong>, загрузчик GRUB физически присутствует на EFI-разделе.</li>
</ol>
<h3 id="решение">Решение</h3>
<p>Загрузка с параметром ядра:</p>
<pre tabindex="0"><code>nomodeset
</code></pre><p>После добавления этого параметра в строку загрузки GRUB система стартует штатно. Механизм <code>nomodeset</code> отключает Kernel Mode Setting (KMS), предотвращая инициализацию DRM/драйвера видеокарты на раннем этапе загрузки.</p>
<h3 id="причина">Причина</h3>
<p>Ядро 6.8.0 не имеет полной поддержки видеокарт на базе архитектуры Blackwell (RTX 5060 Ti вышла позже релиза ядра). При попытке инициализации видеорежима через <code>nouveau</code> (или фолбэк-механизмы) происходит зависание на этапе настройки дисплейного контроллера.</p>
<p><code>nomodeset</code> исключает этот этап, оставляя управление видеорежимом за прошивкой UEFI. Система загружается, но без ускорения графики — что для сервера в большинстве случаев некритично.</p>
<h3 id="постоянное-применение">Постоянное применение</h3>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>echo <span style="color:#a5d6ff">&#39;GRUB_CMDLINE_LINUX_DEFAULT=&#34;quiet splash nomodeset&#34;&#39;</span> | sudo tee /etc/default/grub
</span></span><span style="display:flex;"><span>sudo update-grub
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="корректное-решение-убрать-nomodeset">Корректное решение (убрать nomodeset)</h3>
<ol>
<li>Установить проприетарный драйвер NVIDIA версии 570 или новее.</li>
<li>Или обновить ядро до версии 6.12+, где поддержка Blackwell добавлена в <code>nouveau</code>.</li>
</ol>
<h3 id="вывод">Вывод</h3>
<p>Проблема не в дисках, не в RAID и не в памяти. Причина — отсутствие поддержки современной видеокарты в текущей версии ядра. Параметр <code>nomodeset</code> — рабочий временный обход, позволяющий сохранить функциональность системы до установки актуального драйвера или ядра.</p>
<h3 id="дополнение">Дополнение</h3>
<p>Я думал переустановить систему, залив Debian. Но после выбора параметра установки в загрузочном меню, я опять получал зависшую систему. Решилась пробелма что сложнее, одного параметра <code>nomodeset</code> не хватило, БЯМ подсказала расширенную версию:</p>
<p>Вот перечень параметров, которые вы должны добавить все вместе:</p>
<pre tabindex="0"><code>nomodeset acpi=off noapic nolapic pci=nomsi pci=nommconf console=tty0 console=ttyS0,115200
</code></pre><p><strong>Как это ввести</strong>:</p>
<ol>
<li>Загрузитесь с Ventoy, выберите Debian.</li>
<li>Нажмите <code>e</code> для редактирования.</li>
<li>Найдите строку с <code>linux</code>.</li>
<li>Удалите всё содержимое после <code>---</code> (или в конце строки) и вставьте туда эту строку.</li>
<li>Нажмите <code>Ctrl+X</code>.</li>
</ol>
<p><strong>Что эти флаги делают</strong>:</p>
<ul>
<li><code>acpi=off noapic nolapic</code>: Отключают продвинутое управление питанием и прерываниями (часто выручает на серверном железе)<a href="https://otvet.mail.ru/question/242988552"></a><a href="https://lists.debian.org/debian-user/2010/12/msg00882.html"></a>.</li>
<li><code>pci=nomsi pci=nommconf</code>: Отключают альтернативные методы обработки прерываний PCIe<a href="https://lists.debian.org/debian-user/2010/12/msg00882.html"></a>.</li>
<li><code>console=tty0 console=ttyS0</code>: Говорят ядру дублировать вывод на обычный экран и на «виртуальный последовательный порт» — это часто сдвигает процесс с мертвой точки<a href="https://blog.gitcode.com/2ed11393511874d91bf536891afeff00.html"></a></li>
</ul>
]]></content:encoded></item><item><title>Факап с конфиге WG привел к потере 6 часов жизни</title><link>https://dedinit.ru/2026/20260503-dns-routing/</link><pubDate>Sun, 03 May 2026 01:26:20 +0300</pubDate><guid>https://dedinit.ru/2026/20260503-dns-routing/</guid><description>&lt;p&gt;Расскажу про то как один параметр в кофиге Wireguard причинил мне опыт по разбору половины сетевых настроек Ubuntu. Один с виду безобидный параметр&amp;hellip; IaC блин нужен обязательно. Я просто забыл что и для чего менял, а потом уже поздно было вспоминать.&lt;/p&gt;
&lt;h2 id="симптомы-тишина-в-эфире-и-гора-dropped-пакетов"&gt;Симптомы: тишина в эфире и гора dropped пакетов&lt;/h2&gt;
&lt;p&gt;Всё началось с того, полсе смерти системного диска в моем домашнем сервере, я перестал крутить его 24/7 и набегами по выходным конифгурировал его, пытаясь вернуть привычный набор сервисом. И вот однажды включаю я сервер, а у меня проблема с системным резолвом DNS. Так-то напрямую &lt;code&gt;nslookup ya.ru 8.8.8.8&lt;/code&gt; выдает всё нормально. но система ни в какую не хочет резолвить адреса. Так-то я забыл, что неделей ранее я настраивал Wireguard со своими VPS, и что именно после настройки Wireguard сервер потерял доступ к локальной сети и интернету. начал ковырять, ИИшка подсказала что на Ubuntu надо netplan копать, начал фигачить yamlики, тут время вышло и я еще на неделю забросил комп. И вот вчера, сейчас далеко за полночь, я его включил и опять начал разбираться, естественно забыл не только то что я две недели назад делал, но и то чем неделю назад занимался. И вот картинка, сервер загрузился, подозрительно долго грузился кстати, но по сети недоступен.&lt;/p&gt;</description><content:encoded><![CDATA[<figure class="entry-cover"><img src="https://dedinit.ru/2026/20260503-dns-routing/hero.svg" alt="Факап с конфиге WG привел к потере 6 часов жизни"></figure><p>Расскажу про то как один параметр в кофиге Wireguard причинил мне опыт по разбору половины сетевых настроек Ubuntu. Один с виду безобидный параметр&hellip; IaC блин нужен обязательно. Я просто забыл что и для чего менял, а потом уже поздно было вспоминать.</p>
<h2 id="симптомы-тишина-в-эфире-и-гора-dropped-пакетов">Симптомы: тишина в эфире и гора dropped пакетов</h2>
<p>Всё началось с того, полсе смерти системного диска в моем домашнем сервере, я перестал крутить его 24/7 и набегами по выходным конифгурировал его, пытаясь вернуть  привычный набор сервисом. И вот однажды включаю я сервер, а у меня проблема с системным резолвом DNS. Так-то напрямую <code>nslookup ya.ru 8.8.8.8</code> выдает всё нормально. но система ни в какую не хочет резолвить адреса. Так-то я забыл, что неделей ранее я настраивал Wireguard со своими VPS, и что именно после настройки Wireguard сервер  потерял доступ к локальной сети и интернету. начал ковырять, ИИшка подсказала что на Ubuntu надо netplan копать, начал фигачить yamlики, тут время вышло и я еще на неделю забросил комп. И вот вчера, сейчас далеко за полночь, я его включил и опять начал разбираться, естественно забыл не только то что я две недели назад делал, но и то чем неделю назад занимался. И вот картинка, сервер загрузился, подозрительно долго грузился кстати, но по сети недоступен.</p>
<p>Первая диагностика через <code>ip -s link show</code> показала тревожную картину на интерфейсе <code>eno1</code>:</p>
<ul>
<li><strong>RX:</strong> 53 000+ пакетов принято.</li>
<li><strong>Dropped:</strong> 21 000+ пакетов отброшено.</li>
<li><strong>TX:</strong> Всего 40 пакетов отправлено.</li>
</ul>
<p>Команда <code>ip route show</code> выводила только маршрут для интерфейса <code>wg0</code>. Маршрута по умолчанию через физический интерфейс не было. Система «не видела» шлюза.</p>
<p>Команда <code>ip a</code> показала, что на всех интерфейсах, кроме loopback, ip-адреса отсутствуют.</p>
<p>Попытки перезапустить службы или применить конфигурацию через <code>sudo netplan apply</code> не давали результата. Интерфейс зависал в состоянии <code>configuring</code>, а адрес не присваивался.</p>
<h2 id="расследование-кто-виноват">Расследование: кто виноват?</h2>
<h3 id="1-конфликт-маршрутизации">1. Конфликт маршрутизации</h3>
<p>Первоначальная гипотеза была в том, что WireGuard перехватывает весь трафик. Однако в конфиге <code>wg0.conf</code> параметр <code>AllowedIPs</code> был ограничен подсетью туннеля (<code>10.8.0.0/24</code>). Он не должен был блокировать локальную сеть.</p>
<p>Проблема оказалась глубже: отсутствие маршрута по умолчанию для <code>eno1</code> означало, что ядро просто не знало, куда девать исходящие пакеты, кроме как в туннель (если бы он был активен) или в никуда.</p>
<h3 id="2-почему-dhcp-молчал">2. Почему DHCP молчал?</h3>
<p>Ubuntu 24.04 использует стек <code>systemd-networkd</code> для управления сетью на серверных сборках. Конфигурация задается через <code>Netplan</code> (YAML-файлы).</p>
<p>Проверка статуса показала:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>networkctl status eno1
</span></span><span style="display:flex;"><span>State: routable <span style="color:#ff7b72;font-weight:bold">(</span>configuring<span style="color:#ff7b72;font-weight:bold">)</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Статус <code>configuring</code> в сочетании с <code>routable</code> — это классический признак того, что демон ждет завершения какой-то операции. В логах <code>journalctl -u systemd-networkd</code> не было ошибок получения адреса IPv4, зато постоянно терялась аренда IPv6 (<code>DHCPv6 lease lost</code>).</p>
<p>Оказалось, что <code>systemd-networkd</code> по умолчанию пытается настроить и IPv4, и IPv6. Если сервер DHCPv6 не отвечает или есть проблемы с Router Advertisements (RA), демон может зависнуть в ожидании, блокируя переход интерфейса в полностью рабочее состояние для IPv4.</p>
<h3 id="3-долгая-загрузка">3. Долгая загрузка</h3>
<p>При перезагрузке я заметил, что система висит на этапе <code>Job systemd-networkd-wait-online.service</code>. Однако служба <code>wait-online</code> держала систему, пока сеть не поднимется. Поскольку сеть не могла подняться из-за зависшего DHCP-клиента, загрузка затягивалась.</p>
<h2 id="решение-поэтапный-демонтаж-проблем">Решение: поэтапный демонтаж проблем</h2>
<h3 id="шаг-1-отключение-ожидания-сети">Шаг 1. Отключение ожидания сети</h3>
<p>Чтобы система загружалась быстро, даже если сеть сбоит, отключил службу ожидания:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo systemctl disable systemd-networkd-wait-online.service
</span></span><span style="display:flex;"><span>sudo systemctl mask systemd-networkd-wait-online.service
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="шаг-2-отключение-ipv6">Шаг 2. Отключение IPv6</h3>
<p>Возможно проблема долгой загрузки была в ожидании ответов IPv6, а поскольку в моей инфраструктуре он пока не критичен, то я отключил его на уровне ядра. Это сузило  площадь ошибок в конфигурации <code>systemd-networkd</code>, я сосредоточился только на IPv4.</p>
<p>В <code>/etc/sysctl.conf</code> добавил:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span>net.ipv6.conf.all.disable_ipv6<span style="color:#ff7b72;font-weight:bold">=</span><span style="color:#a5d6ff">1</span>
</span></span><span style="display:flex;"><span>net.ipv6.conf.default.disable_ipv6<span style="color:#ff7b72;font-weight:bold">=</span><span style="color:#a5d6ff">1</span>
</span></span><span style="display:flex;"><span>net.ipv6.conf.lo.disable_ipv6<span style="color:#ff7b72;font-weight:bold">=</span><span style="color:#a5d6ff">1</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>И применил изменения: <code>sudo sysctl -p</code>.</p>
<h3 id="шаг-3-переход-на-прямую-конфигурацию-systemd-networkd">Шаг 3. Переход на прямую конфигурацию systemd-networkd</h3>
<p>Файлы Netplan (<code>/etc/netplan/*.yaml</code>) генерируют конфиги для бэкенда. У меня их было два, и они могли конфликтовать или содержать избыточные параметры, тем более я уже и не помнил как и почему я их именно так писал. Изолировал прослойку Netplan, создав файл-заглушку <code>/etc/systemd/network/10-eno1.network</code> с настройками для  <code>systemd-networkd</code>:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">4
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">5
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">6
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">7
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">8
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#ff7b72">[Match]</span>
</span></span><span style="display:flex;"><span>Name<span style="color:#ff7b72;font-weight:bold">=</span><span style="color:#a5d6ff">eno1</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#ff7b72">[Network]</span>
</span></span><span style="display:flex;"><span>DHCP<span style="color:#ff7b72;font-weight:bold">=</span><span style="color:#a5d6ff">ipv4</span>
</span></span><span style="display:flex;"><span>IPv6AcceptRA<span style="color:#ff7b72;font-weight:bold">=</span><span style="color:#a5d6ff">no</span>
</span></span><span style="display:flex;"><span>DNS<span style="color:#ff7b72;font-weight:bold">=</span><span style="color:#a5d6ff">1.1.1.1</span>
</span></span><span style="display:flex;"><span>DNS<span style="color:#ff7b72;font-weight:bold">=</span><span style="color:#a5d6ff">8.8.8.8</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Ключевой момент здесь — <code>DHCP=ipv4</code>. Тут явно говорим демону: «Используй только IPv4, игнорируй IPv6». Параметр <code>IPv6AcceptRA=no</code> дополнительно страхует от ожидания сообщений роутера.</p>
<p>Удалил старые файлы из <code>/etc/netplan/</code>, чтобы избежать двойного применения настроек, и перезапустил службу:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo systemctl restart systemd-networkd
</span></span></code></pre></td></tr></table>
</div>
</div><p>Интерфейс сразу получил адрес <code>192.168.1.3</code> и перешел в статус <code>routable (configured)</code>. Системный резолв DNS заработал.</p>
<h3 id="шаг-4-финальный-босс-dns-и-wireguard">Шаг 4. Финальный босс: DNS и WireGuard</h3>
<p>Пинги пошли, но <code>nslookup ya.ru</code> выдавал таймауты на <code>127.0.0.53</code> (локальный stub-resolver <code>systemd-resolved</code>). Вот про эту штуку я не знал, поэтому теперь знаю что не нужно поднимать на каждом сервер unbound, в systemd все есть из коробки.</p>
<p>Проверка <code>resolvectl status</code> показала странность:</p>
<ul>
<li>Link 2 (eno1): DNS Servers: 1.1.1.1, 8.8.8.8</li>
<li>Link 5 (wg0): <strong>DNS Domain: ~.</strong></li>
</ul>
<p>Правда я её не заметил сперва, но консультации с ИИ не всегда являются потерей времени. Символ <code>~.</code> означает «глобальный поиск». WireGuard, увидев в своем конфиге строку <code>DNS = 1.1.1.1</code>, автоматически сообщил системе, что этот DNS-сервер должен обрабатывать <strong>все</strong> запросы, перекрывая настройки физического интерфейса. Но так как туннель до собственных серверов и маршрутов до внешних DNS в нём нет, разрешения имен не работали.</p>
<p><strong>Решение:</strong>
В файле <code>/etc/wireguard/wg0.conf</code> я закомментировал всего лишь одну строку, как потом выяснилось добавленной в конфиг по рекомендаци такой же ИИшечки:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># DNS = 1.1.1.1</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Переподнял туннель:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo wg-quick down wg0
</span></span><span style="display:flex;"><span>sudo wg-quick up wg0
</span></span></code></pre></td></tr></table>
</div>
</div><p>Теперь <code>wg0</code> имеетв выводк <code>networkctl status eno1</code> <code>Current Scopes: none</code>, а все DNS-запросы идут через основной интерфейс <code>eno1</code> на публичные серверы Cloudflare и Google.</p>
<h2 id="итоги-и-выводы">Итоги и выводы</h2>
<ol>
<li><strong>WireGuard и DNS:</strong> Параметр <code>DNS</code> в конфиге WireGuard — это не просто рекомендация, а команда для системы изменить <strong>глобальные</strong> настройки резолвинга. Если ты не хочешь, чтобы туннель перехватывал все DNS-запросы, не указывай этот параметр в конфиге клиента, либо используйте более тонкие настройки <code>Domains</code> (если клиент поддерживает).</li>
<li><strong>Ubuntu 24.04 и IPv6:</strong> По умолчанию включенный IPv6 может вызывать задержки при получении адреса IPv4, если инфраструктура не готова к v6. В домашних лабораториях его часто проще отключить, чем дебажить RA и DHCPv6.</li>
<li><strong>Netplan vs systemd-networkd:</strong> Netplan удобен, но иногда прямая конфигурация <code>systemd-networkd</code> дает больше прозрачности и контроля, особенно при отладке сложных случаев с DHCP.</li>
<li><strong>systemd-networkd-wait-online:</strong> На серверах, где сеть может падать или долго подниматься, эту службу лучше маскировать, иначе она будет тормозить загрузку всей ОС.</li>
</ol>
<p>Эта ошибка в конфиге WG стоила мне нескольких часов, но теперь моя домашняя лаборатория работает стабильно, а конфиги приведены к минимальному и понятному виду, а я узнал еще что-то новенькое про любимый Линукс.</p>
<p>(Ссылка на диалог с Qwen)[https://chat.qwen.ai/s/0cfbc11b-dae3-4dba-bfaf-b0788172d07c?fev=0.2.45]</p>
]]></content:encoded></item><item><title>Запуск wireguard для связи серверов</title><link>https://dedinit.ru/2026/%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA-wireguard-%D0%B4%D0%BB%D1%8F-%D1%81%D0%B2%D1%8F%D0%B7%D0%B8-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%BE%D0%B2/</link><pubDate>Thu, 05 Mar 2026 08:47:16 +0300</pubDate><guid>https://dedinit.ru/2026/%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA-wireguard-%D0%B4%D0%BB%D1%8F-%D1%81%D0%B2%D1%8F%D0%B7%D0%B8-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%BE%D0%B2/</guid><description>&lt;p&gt;Привет, товарищ!&lt;/p&gt;
&lt;p&gt;Сейчас я занимаюсь построением инфраструктуры для своей домашней лаборатории. В планах задействовать три сервера: один локальный машину дома и два VPS от разных провайдеров. Соответственно мне нужно организовать между ними защищенный канал связи для взаимодействия без лишних открытых наружу портов. Открыть порты сервисов наружу не хочется, поэтому лучшим решением стала виртуальная частная сеть на базе WireGuard.&lt;/p&gt;
&lt;p&gt;Я пробовал разные варианты, но пришел к выводу, что лучше всего ставить WireGuard нативно прямо на хост-систему Ubuntu. Вариант с Docker тоже возможен, но он добавляет лишнюю сложность с пробросом портов и правами доступа. Нативная установка работает быстрее, управляется через стандартный systemd и проще интегрируется с фаерволом.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Привет, товарищ!</p>
<p>Сейчас я занимаюсь построением инфраструктуры для своей домашней лаборатории. В планах задействовать три сервера: один локальный машину дома и два VPS от разных провайдеров. Соответственно мне нужно организовать между ними защищенный канал связи для взаимодействия без лишних открытых наружу портов. Открыть порты сервисов наружу не хочется, поэтому лучшим решением стала виртуальная частная сеть на базе WireGuard.</p>
<p>Я пробовал разные варианты, но пришел к выводу, что лучше всего ставить WireGuard нативно прямо на хост-систему Ubuntu. Вариант с Docker тоже возможен, но он добавляет лишнюю сложность с пробросом портов и правами доступа. Нативная установка работает быстрее, управляется через стандартный systemd и проще интегрируется с фаерволом.</p>
<p>Начнем с установки. Это нужно сделать на всех машинах, которые будут участвовать в сети. В терминале выполняем обновление пакетов и установку утилит:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo apt update
</span></span><span style="display:flex;"><span>sudo apt install wireguard wireguard-tools -y
</span></span></code></pre></td></tr></table>
</div>
</div><p>После установки проверим, что модуль ядра загружен командой wg. Если увидели справку или пустой список интерфейсов, значит все прошло успешно.</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>wg
</span></span></code></pre></td></tr></table>
</div>
</div><p>Следующий шаг - генерация ключей. Это нужно делать локально на каждом сервере. Приватный ключ никогда не должен покидать машину, а публичный мы будем передавать партнерам по сети.</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>cd /etc/wireguard
</span></span><span style="display:flex;"><span>umask <span style="color:#a5d6ff">077</span>
</span></span><span style="display:flex;"><span>wg genkey | tee privatekey | wg pubkey &gt; publickey
</span></span></code></pre></td></tr></table>
</div>
</div><p>Сохраните содержимое файлов privatekey и publickey в надежное место. Для примера в статье я буду использовать заглушки вида PRIVATE_KEY_HERE и PUBLIC_KEY_HERE.</p>
<p>Теперь создадим конфигурацию. Допустим, мы выделили под нашу сеть подсеть 10.8.0.0/24. Серверу с белым IP адресом назначим 10.8.0.1, а клиентам адреса вроде 10.8.0.2 и 10.8.0.3.</p>
<p>На сервере с белым IP создаем файл /etc/wireguard/wg0.conf. В секции Interface указываем его приватный ключ и слушаемый порт. В секции Peer добавляем публичные ключи клиентов.</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 3
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 4
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 5
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 6
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 7
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 8
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 9
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">10
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">11
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">12
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">13
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">14
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#ff7b72">[Interface]</span>
</span></span><span style="display:flex;"><span>PrivateKey <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">SERVER_PRIVATE_KEY_HERE</span>
</span></span><span style="display:flex;"><span>Address <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">10.8.0.1/24</span>
</span></span><span style="display:flex;"><span>ListenPort <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">51820</span>
</span></span><span style="display:flex;"><span>PostUp <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT</span>
</span></span><span style="display:flex;"><span>PostDown <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#ff7b72">[Peer]</span>
</span></span><span style="display:flex;"><span>PublicKey <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">CLIENT1_PUBLIC_KEY_HERE</span>
</span></span><span style="display:flex;"><span>AllowedIPs <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">10.8.0.2/32</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#ff7b72">[Peer]</span>
</span></span><span style="display:flex;"><span>PublicKey <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">CLIENT2_PUBLIC_KEY_HERE</span>
</span></span><span style="display:flex;"><span>AllowedIPs <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">10.8.0.3/32</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Обратите внимание на строки PostUp и PostDown. Они нужны для того, чтобы при подъеме интерфейса автоматически применялись правила фаервола, разрешающие пересылку пакетов.</p>
<p>На клиенте, который находится за NAT (например, домашний сервер), конфигурация будет проще. Ему нужно знать публичный ключ сервера и его белый IP адрес.</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 3
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 4
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 5
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 6
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 7
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 8
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 9
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">10
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#ff7b72">[Interface]</span>
</span></span><span style="display:flex;"><span>PrivateKey <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">CLIENT1_PRIVATE_KEY_HERE</span>
</span></span><span style="display:flex;"><span>Address <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">10.8.0.2/24</span>
</span></span><span style="display:flex;"><span>DNS <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">1.1.1.1</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#ff7b72">[Peer]</span>
</span></span><span style="display:flex;"><span>PublicKey <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">SERVER_PUBLIC_KEY_HERE</span>
</span></span><span style="display:flex;"><span>Endpoint <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">203.0.113.10:51820</span>
</span></span><span style="display:flex;"><span>AllowedIPs <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">10.8.0.0/24</span>
</span></span><span style="display:flex;"><span>PersistentKeepalive <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">25</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Параметр PersistentKeepalive важен для клиентов за натом. Он отправляет служебные пакеты каждые 25 секунд, чтобы роутер не забывал об открытом соединении.</p>
<p>Прежде чем запускать туннель, нужно подготовить сеть. На сервере обязательно включаем пересылку пакетов (IP Forwarding), иначе трафик не будет ходить между интерфейсами.</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>echo <span style="color:#a5d6ff">&#34;net.ipv4.ip_forward=1&#34;</span> | sudo tee -a /etc/sysctl.conf
</span></span><span style="display:flex;"><span>sudo sysctl -p
</span></span></code></pre></td></tr></table>
</div>
</div><p>Также нужно настроить фаервол. Если у вас активен UFW, откройте порт UDP 51820 и разрешите маршрутизацию для интерфейса wg0.</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">4
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo ufw allow 51820/udp
</span></span><span style="display:flex;"><span>sudo ufw route allow in on wg0 out on wg0
</span></span><span style="display:flex;"><span>sudo ufw route allow in on wg0 out on eth0
</span></span><span style="display:flex;"><span>sudo ufw route allow in on eth0 out on wg0
</span></span></code></pre></td></tr></table>
</div>
</div><p>В командах выше замените eth0 на имя вашего основного сетевого интерфейса.</p>
<p>Теперь самый важный момент, на котором я лично споткнулся. После любого изменения файла конфигурации wg0.conf необходимо перезапускать сервис интерфейса. Правила PostUp выполняются только в момент создания интерфейса. Если вы просто отредактировали файл и забыли перезапустить службу, новые правила фаервола не применятся, и соединения не будет.</p>
<p>Правильный порядок действий после правки конфига выглядит так:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo wg-quick down wg0
</span></span><span style="display:flex;"><span>sudo wg-quick up wg0
</span></span></code></pre></td></tr></table>
</div>
</div><p>Или через системную службу:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo systemctl restart wg-quick@wg0
</span></span></code></pre></td></tr></table>
</div>
</div><p>Не пренебрегайте этим шагом. Именно отсутствие перезагрузки часто приводит к тому, что интерфейс поднят, ключи верны, но пакеты теряются по пути.</p>
<p>Чтобы сеть поднималась автоматически после перезагрузки сервера, включите службу в автозагрузку:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo systemctl enable wg-quick@wg0
</span></span></code></pre></td></tr></table>
</div>
</div><p>Для диагностики состояния туннеля используйте команду wg show. Запустите ее в режиме мониторинга, чтобы видеть изменения в реальном времени:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>watch -n <span style="color:#a5d6ff">1</span> wg show
</span></span></code></pre></td></tr></table>
</div>
</div><p>Смотрите на поле latest handshake. Если время там постоянно обновляется (например, 5 seconds ago, 10 seconds ago), значит соединение активно и пакеты ходят. Если время застыло или указано none, значит пакеты не доходят. Проверьте фаерволы и убедитесь, что порт открыт у провайдера VPS.</p>
<p>Также проверяйте счетчики трафика transfer. Если при пинге счетчик received растет, значит пакеты доходят до интерфейса WireGuard. Если пинга нет, но трафик есть, проблема скорее всего в маршрутизации внутри системы или блокировке ICMP фаерволом.</p>
<p>В итоге вы получите безопасную сеть, где серверы видят друг друга по внутренним IP адресам. Сервисы вроде баз данных можно слушать только на интерфейсе туннеля, и они будут недоступны из внешнего интернета.</p>
<p>Удачи в построении вашей лаборатории!</p>
]]></content:encoded></item><item><title>Отказоустойчивый системный раздел на Ubuntu</title><link>https://dedinit.ru/2026/%D0%BE%D1%82%D0%BA%D0%B0%D0%B7%D0%BE%D1%83%D1%81%D1%82%D0%BE%D0%B9%D1%87%D0%B8%D0%B2%D1%8B%D0%B9-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%BD%D1%8B%D0%B9-%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB-%D0%BD%D0%B0-ubuntu/</link><pubDate>Wed, 04 Mar 2026 17:34:29 +0300</pubDate><guid>https://dedinit.ru/2026/%D0%BE%D1%82%D0%BA%D0%B0%D0%B7%D0%BE%D1%83%D1%81%D1%82%D0%BE%D0%B9%D1%87%D0%B8%D0%B2%D1%8B%D0%B9-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%BD%D1%8B%D0%B9-%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB-%D0%BD%D0%B0-ubuntu/</guid><description>&lt;p&gt;Привет, товарищь! Решил поделиться опытом, как я настраивал отказоустойчивость на своём сервере. После скоропостижной смерти M2 SSD со всеми конфигами домашней лаборатории мне пришлось начать собрать её заново. Так что если у тебя тоже есть два одинаковых SSD и ты хочешь, чтобы система продолжала работать при отказе одного из них, этот гайд про то как сразу делать по уму точно для тебя.&lt;/p&gt;
&lt;p&gt;Почему я выбрал mdadm&lt;/p&gt;
&lt;p&gt;Есть два основных пути: mdadm и LVM RAID. Я остановился на mdadm. Для нашей задачи это проще и прозрачнее. LVM даёт крутую гибкость в управлении томами, но если нужна именно защита от смерти диска, mdadm справляется лучше. Восстановление после сбоя понятнее, мониторинг проще, и меньше шансов запутаться в конфигурации.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Привет, товарищь! Решил поделиться опытом, как я настраивал отказоустойчивость на своём сервере. После скоропостижной смерти M2 SSD со всеми конфигами домашней лаборатории мне пришлось начать собрать её заново. Так что если у тебя тоже есть два одинаковых SSD и ты хочешь, чтобы система продолжала работать при отказе одного из них, этот гайд про то как сразу делать по уму точно для тебя.</p>
<p>Почему я выбрал mdadm</p>
<p>Есть два основных пути: mdadm и LVM RAID. Я остановился на mdadm. Для нашей задачи это проще и прозрачнее. LVM даёт крутую гибкость в управлении томами, но если нужна именно защита от смерти диска, mdadm справляется лучше. Восстановление после сбоя понятнее, мониторинг проще, и меньше шансов запутаться в конфигурации.</p>
<p>Важный нюанс про EFI</p>
<p>Тут есть подвох. UEFI не умеет загружаться с mdadm массивов. Поэтому EFI разделы нельзя объединять в RAID. Я оставил их отдельными на каждом диске. Просто синхронизирую содержимое вручную через rsync. Это небольшая плата за возможность загрузки с любого диска.</p>
<p>В самом инсталляторе Ubuntu я не догадался выделить отдельный раздел для EFI, чтобы правильно разбить диски при устанвоке. Так что я поставил систему целиком на один диск, а потом на втором создал программный RAID 1, перенёс данные и после этого добавил в RAID первый диск.</p>
<h2 id="пошаговая-инстуркция">Пошаговая инстуркция</h2>
<p>После первой загрузки новой системы я сначала проверил какие диски есть в системе:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">4
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">5
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>lsblk -f
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Показывает структуру дисков и файловые системы</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>sudo fdisk -l | grep <span style="color:#a5d6ff">&#34;Disk /dev/sd&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Находим второй диск для RAID. Я ориентировался по размеру.</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Установил mdadm:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo apt update
</span></span><span style="display:flex;"><span>sudo apt install mdadm
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Устанавливаем утилиту управления RAID массивами. В убунте она по-умолчанию уже есть.</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Скопировал таблицу разделов с первого диска на второй:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo sfdisk -d /dev/sda | sudo sfdisk /dev/sdb
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Копируем структуру разделов с sda на sdb</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Создал RAID1 массив. Важный момент - создавал в деградированном режиме, чтобы не затереть работающую систему:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo mdadm --create /dev/md0 --level<span style="color:#ff7b72;font-weight:bold">=</span><span style="color:#a5d6ff">1</span> --raid-devices<span style="color:#ff7b72;font-weight:bold">=</span><span style="color:#a5d6ff">2</span> /dev/sdb2 missing
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Создаём массив пока только с одним диском (sdb2)</span>
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Второй диск (sda2) добавим позже</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Отформатировал и скопировал данные:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 3
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 4
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 5
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 6
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 7
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 8
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 9
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">10
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">11
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">12
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo mkfs.ext4 /dev/md0
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Создаём файловую систему на новом RAID массиве</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>sudo mkdir -p /mnt/new-root
</span></span><span style="display:flex;"><span>sudo mount /dev/md0 /mnt/new-root
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Монтируем новый массив</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>sudo rsync -axHAWX --numeric-ids --info<span style="color:#ff7b72;font-weight:bold">=</span>progress2 <span style="color:#79c0ff">\
</span></span></span><span style="display:flex;"><span>  --exclude<span style="color:#ff7b72;font-weight:bold">=</span>/proc --exclude<span style="color:#ff7b72;font-weight:bold">=</span>/sys --exclude<span style="color:#ff7b72;font-weight:bold">=</span>/dev --exclude<span style="color:#ff7b72;font-weight:bold">=</span>/run --exclude<span style="color:#ff7b72;font-weight:bold">=</span>/tmp <span style="color:#79c0ff">\
</span></span></span><span style="display:flex;"><span>  / /mnt/new-root/
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Копируем все данные с сохранением прав и атрибутов</span>
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Исключаем виртуальные файловые системы</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Подготовил chroot и обновил конфигурацию:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 3
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 4
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 5
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 6
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 7
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 8
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 9
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">10
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">11
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">12
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">13
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">14
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">15
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">16
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">17
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">18
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">19
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">20
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">21
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">22
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">23
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">24
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">25
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">26
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">27
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Монтируем необходимые директории для chroot</span>
</span></span><span style="display:flex;"><span><span style="color:#ff7b72">for</span> dir in /dev /dev/pts /proc /sys /run; <span style="color:#ff7b72">do</span>
</span></span><span style="display:flex;"><span>    sudo mount --bind <span style="color:#79c0ff">$dir</span> /mnt/new-root<span style="color:#79c0ff">$dir</span>
</span></span><span style="display:flex;"><span><span style="color:#ff7b72">done</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Монтируем EFI раздел</span>
</span></span><span style="display:flex;"><span>sudo mount /dev/sda1 /mnt/new-root/boot/efi
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Заходим в систему</span>
</span></span><span style="display:flex;"><span>sudo chroot /mnt/new-root
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Внутри chroot обновляем fstab</span>
</span></span><span style="display:flex;"><span>sed -i <span style="color:#a5d6ff">&#39;s|/dev/sda2|/dev/md0|g&#39;</span> /etc/fstab
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Меняем корневой раздел с sda2 на md0</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Добавляем конфигурацию mdadm</span>
</span></span><span style="display:flex;"><span>mdadm --detail --scan &gt;&gt; /etc/mdadm/mdadm.conf
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Обновляем initramfs чтобы RAID собрался при загрузке</span>
</span></span><span style="display:flex;"><span>update-initramfs -u -k all
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Переустанавливаем GRUB</span>
</span></span><span style="display:flex;"><span>grub-install --target<span style="color:#ff7b72;font-weight:bold">=</span>x86_64-efi --efi-directory<span style="color:#ff7b72;font-weight:bold">=</span>/boot/efi --bootloader-id<span style="color:#ff7b72;font-weight:bold">=</span>Ubuntu --recheck
</span></span><span style="display:flex;"><span>update-grub
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Выходим из chroot</span>
</span></span><span style="display:flex;"><span>exit
</span></span></code></pre></td></tr></table>
</div>
</div><p>Отмонтировал и перезагрузился для проверки:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo umount -R /mnt/new-root
</span></span><span style="display:flex;"><span>sudo reboot
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Перезагружаемся - система должна загрузиться с RAID</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>После успешной загрузки добавил оригинальный диск в массив:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">4
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">5
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">6
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo mdadm /dev/md0 --add /dev/sda2
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Добавляем sda2 в массив - начнётся синхронизация</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>watch cat /proc/mdstat
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Следим за прогрессом синхронизации</span>
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Это может занять от одного до четрёх  часов. У меня чуть больше часа заняло.</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Настроил второй EFI раздел:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 3
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 4
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 5
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 6
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 7
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 8
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 9
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">10
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">11
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">12
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">13
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">14
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo mkfs.vfat -F <span style="color:#a5d6ff">32</span> -n EFI /dev/sdb1
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Форматируем EFI раздел второго диска в FAT32</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>sudo mkdir -p /boot/efi2
</span></span><span style="display:flex;"><span>sudo mount /dev/sdb1 /boot/efi2
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Монтируем второй EFI раздел</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>sudo rsync -a /boot/efi/EFI/ /boot/efi2/EFI/
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Копируем файлы загрузчика</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>sudo grub-install --target<span style="color:#ff7b72;font-weight:bold">=</span>x86_64-efi --efi-directory<span style="color:#ff7b72;font-weight:bold">=</span>/boot/efi2 --bootloader-id<span style="color:#ff7b72;font-weight:bold">=</span>Ubuntu /dev/sdb
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Устанавливаем GRUB на второй диск</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>sudo umount /boot/efi2
</span></span></code></pre></td></tr></table>
</div>
</div><p>Настроил уведомления:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 3
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 4
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 5
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 6
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 7
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 8
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 9
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">10
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">11
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">12
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo apt install postfix
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Устанавливаем почтовый сервер</span>
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># При настройке выбираем &#34;Local only&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>sudo nano /etc/mdadm/mdadm.conf
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Добавляем строку: MAILADDR username. Где username это ник твоей учтёки.</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>sudo systemctl enable --now mdmonitor
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Включаем мониторинг RAID массивов</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>sudo mdadm --monitor --test --oneshot /dev/md0
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Тестируем отправку уведомлений</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="как-проверить-что-всё-работает">Как проверить что всё работает</h2>
<p>После настройки прогони несколько команд для спокойствия:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 3
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 4
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 5
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 6
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 7
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 8
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 9
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">10
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">11
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">12
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">13
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">14
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">15
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">16
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>cat /proc/mdstat
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># В строке md0 должны быть две буквы U в скобках [UU]</span>
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Это значит что оба диска активны и синхронизированы</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>sudo mdadm --detail /dev/md0
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># State должно быть active</span>
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Working Devices должно быть равно 2</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>df -h | grep <span style="color:#a5d6ff">&#34; / &#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Корневая файловая система должна быть на /dev/md0</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>sudo efibootmgr -v
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Проверяем что запись Ubuntu есть в списке загрузочных устройств</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>cat /etc/mdadm/mdadm.conf | grep ARRAY
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Проверяем что конфигурация массива сохранена</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="что-делать-после-обновления-ядра">Что делать после обновления ядра</h2>
<p>После apt upgrade файлы загрузчика обновляются только на основном EFI разделе. Нужно вручную синхронизировать второй диск:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 3
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 4
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 5
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 6
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 7
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 8
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 9
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">10
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">11
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo mkdir -p /boot/efi2
</span></span><span style="display:flex;"><span>sudo mount /dev/sdb1 /boot/efi2
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Монтируем второй EFI раздел</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>sudo rsync -a /boot/efi/EFI/ /boot/efi2/EFI/
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Синхронизируем файлы загрузчика</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>sudo grub-install --target<span style="color:#ff7b72;font-weight:bold">=</span>x86_64-efi --efi-directory<span style="color:#ff7b72;font-weight:bold">=</span>/boot/efi2 --bootloader-id<span style="color:#ff7b72;font-weight:bold">=</span>Ubuntu /dev/sdb
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Обновляем GRUB на втором диске</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>sudo umount /boot/efi2
</span></span></code></pre></td></tr></table>
</div>
</div><p>Я добавил эти команды в скрипт /usr/local/bin/sync-efi.sh и если не забуду про его существоавание, то буду запускать его после обновлений. Занимает минуту, зато спокойнее.</p>
<h2 id="что-делать-при-сбое-диска">Что делать при сбое диска</h2>
<p>Если пришло уведомление о проблеме, сначала проверь статус массива:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>cat /proc/mdstat
</span></span><span style="display:flex;"><span>sudo mdadm --detail /dev/md0
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Проверяем какой диск вышел из строя</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Если диск помечен как failed, действуй по плану:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 3
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 4
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 5
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 6
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 7
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 8
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 9
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">10
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">11
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo mdadm /dev/md0 --fail /dev/sdX2 --remove /dev/sdX2
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Отмечаем диск как неисправный и удаляем из массива</span>
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Замените sdX2 на имя проблемного раздела</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># После физической замены диска добавляем новый:</span>
</span></span><span style="display:flex;"><span>sudo mdadm /dev/md0 --add /dev/sdX2
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Добавляем новый диск в массив</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>watch cat /proc/mdstat
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Следим за восстановлением</span>
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Система продолжает работать во время синхронизации</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="важные-заметки-на-будущее">Важные заметки на будущее</h2>
<p>RAID это не бэкап. Он защищает от отказа железа, но не от случайного удаления файлов или вирусов. Настрой отдельное резервное копирование критичных данных.</p>
<p>Сохрани вывод efibootmgr в файл:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo efibootmgr -v &gt; ~/efiboot-backup.txt
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Это поможет восстановить загрузочные записи если настройки UEFI сбросятся</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Не прерывай синхронизацию массива. Это может повредить данные.</p>
<h2 id="итог">Итог</h2>
<p>Настройка заняла пару часов включая время на синхронизацию дисков. Теперь сервер защищён от выхода из строя одного из SSD. Если хочешь сделать так же и возникнут вопросы - пиши, помогу разобраться.</p>
]]></content:encoded></item><item><title>Что такое setuid биты?</title><link>https://dedinit.ru/2026/%D1%87%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5-setuid-%D0%B1%D0%B8%D1%82%D1%8B/</link><pubDate>Sun, 15 Feb 2026 21:32:16 +0300</pubDate><guid>https://dedinit.ru/2026/%D1%87%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5-setuid-%D0%B1%D0%B8%D1%82%D1%8B/</guid><description>&lt;p&gt;&lt;strong&gt;Setuid&lt;/strong&gt; (Set User ID) — это специальный атрибут прав доступа в Linux/Unix, который позволяет пользователю выполнять программу &lt;strong&gt;с правами владельца этой программы&lt;/strong&gt;, а не с правами самого пользователя.&lt;/p&gt;
&lt;h3 id="простая-аналогия"&gt;&lt;strong&gt;Простая аналогия:&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Представьте, что в офисе есть сейф, который может открывать только начальник. Обычным сотрудникам вход запрещен. Но начальник дает секретарю особый пропуск (setuid-бит), с помощью которого секретарь может открыть сейф, хотя сам не является начальником.&lt;/p&gt;
&lt;h2 id="для-чего-нужны-setuid-биты"&gt;&lt;strong&gt;Для чего нужны setuid биты?&lt;/strong&gt;&lt;/h2&gt;
&lt;h3 id="основные-случаи-использования"&gt;&lt;strong&gt;Основные случаи использования:&lt;/strong&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Смена пароля (&lt;code&gt;/usr/bin/passwd&lt;/code&gt;)&lt;/strong&gt;&lt;/p&gt;</description><content:encoded><![CDATA[<p><strong>Setuid</strong> (Set User ID) — это специальный атрибут прав доступа в Linux/Unix, который позволяет пользователю выполнять программу <strong>с правами владельца этой программы</strong>, а не с правами самого пользователя.</p>
<h3 id="простая-аналогия"><strong>Простая аналогия:</strong></h3>
<p>Представьте, что в офисе есть сейф, который может открывать только начальник. Обычным сотрудникам вход запрещен. Но начальник дает секретарю особый пропуск (setuid-бит), с помощью которого секретарь может открыть сейф, хотя сам не является начальником.</p>
<h2 id="для-чего-нужны-setuid-биты"><strong>Для чего нужны setuid биты?</strong></h2>
<h3 id="основные-случаи-использования"><strong>Основные случаи использования:</strong></h3>
<ol>
<li>
<p><strong>Смена пароля (<code>/usr/bin/passwd</code>)</strong></p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>ls -la /usr/bin/passwd
</span></span><span style="display:flex;"><span>-rwsr-xr-x <span style="color:#a5d6ff">1</span> root root <span style="color:#a5d6ff">68208</span> апр  <span style="color:#a5d6ff">8</span> 10:15 /usr/bin/passwd
</span></span></code></pre></td></tr></table>
</div>
</div><ul>
<li>Обычный пользователь должен менять свой пароль</li>
<li>Пароли хранятся в защищенном файле <code>/etc/shadow</code>, доступном только root</li>
<li>Setuid позволяет <code>passwd</code> временно получить права root для записи в <code>/etc/shadow</code></li>
</ul>
</li>
<li>
<p><strong>Команда <code>sudo</code> (<code>/usr/bin/sudo</code>)</strong></p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>ls -la /usr/bin/sudo
</span></span><span style="display:flex;"><span>-rwsr-xr-x <span style="color:#a5d6ff">1</span> root root <span style="color:#a5d6ff">232416</span> фев  <span style="color:#a5d6ff">9</span>  <span style="color:#a5d6ff">2024</span> /usr/bin/sudo
</span></span></code></pre></td></tr></table>
</div>
</div><ul>
<li>Позволяет выполнять команды от имени root</li>
<li>Без setuid sudo не сможет повысить привилегии</li>
</ul>
</li>
<li>
<p><strong>Другие примеры:</strong></p>
<ul>
<li><code>ping</code> — требует root для создания сетевых сокетов</li>
<li><code>su</code> — переключение на другого пользователя</li>
<li><code>mount/umount</code> — монтирование файловых систем</li>
</ul>
</li>
</ol>
<h2 id="как-распознать-setuid-биты"><strong>Как распознать setuid биты?</strong></h2>
<h3 id="визуальное-обозначение"><strong>Визуальное обозначение:</strong></h3>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">4
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">5
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">6
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">7
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">8
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Обычный файл</span>
</span></span><span style="display:flex;"><span>-rwxr-xr-x  <span style="color:#8b949e;font-style:italic"># нет setuid</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Файл с setuid (s вместо x в позиции владельца)</span>
</span></span><span style="display:flex;"><span>-rwsr-xr-x  <span style="color:#8b949e;font-style:italic"># есть setuid</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Файл с setgid (s вместо x в позиции группы)</span>
</span></span><span style="display:flex;"><span>-rwxr-sr-x  <span style="color:#8b949e;font-style:italic"># есть setgid</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Буква <strong><code>s</code></strong> в позиции execute (x) означает, что установлен setuid/setgid бит.</p>
<h3 id="как-просмотреть-все-файлы-с-setuid"><strong>Как просмотреть все файлы с setuid:</strong></h3>
<ol>
<li>
<p><strong>Поиск по всей системе:</strong></p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo find / -type f -perm -4000 -ls 2&gt;/dev/null
</span></span></code></pre></td></tr></table>
</div>
</div></li>
<li>
<p><strong>Только в стандартных директориях:</strong></p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo find /usr/bin /usr/sbin /bin /sbin -type f -perm -4000 -ls
</span></span></code></pre></td></tr></table>
</div>
</div></li>
<li>
<p><strong>С подробной информацией:</strong></p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">4
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">5
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># С владельцем и правами</span>
</span></span><span style="display:flex;"><span>sudo find /usr -type f -perm -4000 -exec ls -la <span style="color:#ff7b72;font-weight:bold">{}</span> <span style="color:#79c0ff">\;</span> 2&gt;/dev/null
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Или более компактно</span>
</span></span><span style="display:flex;"><span>sudo find /usr/bin -type f -perm -4000 | xargs ls -la
</span></span></code></pre></td></tr></table>
</div>
</div></li>
<li>
<p><strong>Числовое представление:</strong></p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>stat /usr/bin/sudo | grep Access
</span></span></code></pre></td></tr></table>
</div>
</div><p>Setuid бит = <strong>4000</strong> в восьмеричной системе (4 = setuid, 2 = setgid, 1 = sticky bit)</p>
</li>
</ol>
<h2 id="как-установитьубрать-setuid-бит"><strong>Как установить/убрать setuid бит:</strong></h2>
<h3 id="символический-способ"><strong>Символический способ:</strong></h3>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">4
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">5
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Установить setuid</span>
</span></span><span style="display:flex;"><span>sudo chmod u+s /path/to/file
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Убрать setuid</span>
</span></span><span style="display:flex;"><span>sudo chmod u-s /path/to/file
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="числовой-способ"><strong>Числовой способ:</strong></h3>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">4
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">5
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Установить (4755 = setuid + 755 права)</span>
</span></span><span style="display:flex;"><span>sudo chmod <span style="color:#a5d6ff">4755</span> /path/to/file
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Убрать (755 = обычные права)</span>
</span></span><span style="display:flex;"><span>sudo chmod <span style="color:#a5d6ff">755</span> /path/to/file
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="почему-это-важно-для-безопасности"><strong>Почему это важно для безопасности?</strong></h2>
<h3 id="риски"><strong>Риски:</strong></h3>
<ol>
<li><strong>Вредоносные программы</strong> могут использовать setuid для получения root-доступа</li>
<li><strong>Ошибки в setuid-программах</strong> — частая причина взломов</li>
<li><strong>Лишние setuid биты</strong> расширяют поверхность атаки</li>
</ol>
<h3 id="аудит-безопасности"><strong>Аудит безопасности:</strong></h3>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">3
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">4
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">5
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Найти все setuid файлы для проверки</span>
</span></span><span style="display:flex;"><span>sudo find / -type f -perm -4000 -ls 2&gt;/dev/null | sort
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Сравнить с &#34;чистой&#34; системой</span>
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Неожиданные setuid файлы должны настораживать</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="практический-пример-из-моей-практики"><strong>Практический пример из моей практики:</strong></h2>
<p>Я где-то ошибся и сделал своего пользвоателя владельцем /usr/, слом судо и пока пытался починить выполнил <code>find /usr -type d -exec chmod 755 {} \;</code>, это не затронуло файлы. Но когда следом сделал:</p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo find /usr -type f -exec chmod <span style="color:#a5d6ff">644</span> <span style="color:#ff7b72;font-weight:bold">{}</span> <span style="color:#79c0ff">\;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Эта команда <strong>сбросила setuid биты</strong> на всех файлах, включая <code>sudo</code>, <code>passwd</code> и другие. Поэтому <code>sudo</code> опять перестал работать.</p>
<p><strong>Правильно было бы:</strong></p>
<div class="highlight"><div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 3
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 4
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 5
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 6
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 7
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 8
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"> 9
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">10
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Сначала сохранить список setuid файлов</span>
</span></span><span style="display:flex;"><span>sudo find /usr -type f -perm -4000 &gt; /tmp/setuid_backup.txt
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># Потом менять права</span>
</span></span><span style="display:flex;"><span>sudo find /usr -type f -exec chmod <span style="color:#a5d6ff">644</span> <span style="color:#ff7b72;font-weight:bold">{}</span> <span style="color:#79c0ff">\;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># И восстановить setuid биты из сохраненного списка</span>
</span></span><span style="display:flex;"><span><span style="color:#ff7b72">while</span> read file; <span style="color:#ff7b72">do</span>
</span></span><span style="display:flex;"><span>  sudo chmod <span style="color:#a5d6ff">4755</span> <span style="color:#a5d6ff">&#34;</span><span style="color:#79c0ff">$file</span><span style="color:#a5d6ff">&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#ff7b72">done</span> &lt; /tmp/setuid_backup.txt
</span></span></code></pre></td></tr></table>
</div>
</div>]]></content:encoded></item></channel></rss>