Этот урок про две задачи администратора, которые на первый взгляд не связаны, но обе про то, как ФС появляется в системе в нужный момент и в нужном виде. Первая - автомонтирование через AutoFS: вместо того чтобы держать десятки NFS-шар или флешек постоянно примонтированными, мы монтируем их по требованию и отпускаем после простоя. Вторая - шифрование разделов через LUKS и cryptsetup: данные на диске лежат в зашифрованном виде, и без ключа это просто шум. Разберём, как они работают, как настраивать загрузку и где обычно ломается.

Как это работает
AutoFS - это демон, который слушает обращения к каталогам внутри заданной точки и монтирует нужный ресурс ровно тогда, когда в него кто-то заходит. Технически он опирается на autofs-модуль ядра и механизм точек монтирования: каталог пустой, пока вы в него не шагнёте, после чего демон по карте находит, что монтировать, и делает mount на лету. После таймаута простоя (по умолчанию 600 секунд) ресурс отмонтируется сам. Это экономит ресурсы и спасает от зависаний, когда NFS-сервер недоступен - вы просто не получите доступ к одной ветке, а не повесите всю систему.
Конфигурация состоит из главной карты auto.master и подчинённых карт. В auto.master строка говорит: вот базовый каталог (например /mnt/net) и вот файл-карта, описывающая его содержимое. Подчинённая карта построчно задаёт ключ (имя подкаталога), опции монтирования и источник. Карты бывают прямые и косвенные: косвенная (самая частая) создаёт подкаталоги динамически под общим каталогом, прямая привязывает конкретный абсолютный путь.
LUKS (Linux Unified Key Setup) - это стандарт шифрования блочных устройств. Шифруется не файл и не каталог, а весь раздел целиком на уровне блоков, прозрачно для ФС поверх него. Ключевой момент - двухуровневая схема ключей. Сами данные шифруются мастер-ключом, который генерируется случайно и хранится в заголовке LUKS в зашифрованном виде. А ваша парольная фраза лишь расшифровывает один из слотов заголовка, откуда достаётся мастер-ключ. Поэтому пароль можно менять без перешифрования диска и можно завести несколько паролей (слотов) для одного тома. Современный формат - LUKS2 (по умолчанию с 2018 года): метаданные в JSON, по умолчанию функция формирования ключа Argon2id, устойчивая к перебору на GPU.
Работает это так: cryptsetup luksOpen открывает зашифрованное устройство и создаёт виртуальное устройство в /dev/mapper через device-mapper (модуль dm-crypt). Дальше с /dev/mapper/имя работают как с обычным блочным устройством - создают ФС, монтируют. При загрузке за автоматическое открытие отвечает /etc/crypttab (аналог fstab, но для шифрованных томов), а уже /etc/fstab монтирует то, что появилось в /dev/mapper.
Команды и примеры
Установка и базовая настройка AutoFS. Пакеты называются одинаково, инструменты управления различаются:
Код: Выделить всё
# Debian 13 / Ubuntu 24.04
apt install autofs
# RHEL 10 / Fedora 41+
dnf install autofs
systemctl enable --now autofs
Код: Выделить всё
# /etc/auto.master
/mnt/net /etc/auto.net --timeout=120
Код: Выделить всё
# /etc/auto.net
fileserver -fstype=nfs4,ro,soft nfs-srv:/export/data
backup -fstype=nfs4,rw nfs-srv:/export/backup
usb -fstype=ext4 :/dev/disk/by-label/USBDATA
Код: Выделить всё
systemctl reload autofs
ls /mnt/net/fileserver # вот тут и произойдёт монтирование
Код: Выделить всё
cryptsetup luksFormat --type luks2 /dev/sdb1
# подтверждаем YES заглавными и задаём парольную фразу
cryptsetup luksOpen /dev/sdb1 secure # откроется как /dev/mapper/secure
mkfs.ext4 /dev/mapper/secure
mount /dev/mapper/secure /mnt/secure
Код: Выделить всё
cryptsetup luksDump /dev/sdb1 # формат, KDF, занятые слоты
cryptsetup luksAddKey /dev/sdb1 # добавить второй пароль/ключ
cryptsetup luksKillSlot /dev/sdb1 1 # удалить слот 1
cryptsetup luksClose secure
Код: Выделить всё
cryptsetup luksUUID /dev/sdb1
Код: Выделить всё
# /etc/crypttab
secure UUID=ваш-luks-uuid none luks
Код: Выделить всё
/dev/mapper/secure /mnt/secure ext4 defaults 0 2
Код: Выделить всё
# /etc/crypttab
cryptswap /dev/sdb2 /dev/urandom swap,cipher=aes-xts-plain64,size=256
# /etc/fstab
/dev/mapper/cryptswap none swap sw 0 0
Код: Выделить всё
# Debian/Ubuntu
update-initramfs -u
# RHEL/Fedora
dracut --force
- В auto.master НЕ создавайте базовый каталог (/mnt/net) вручную и не держите его непустым - AutoFS им управляет сам, посторонние файлы внутри ломают монтирование.
- Жёсткие (hard) опции NFS в карте при недоступном сервере вешают процесс намертво. Для автомонтируемых сетевых шар почти всегда хотите soft и разумный timeo.
- В crypttab для swap указывайте /dev/urandom как ключ - но тогда раздел перешифровывается каждую загрузку, и старый swap восстановить нельзя. Для постоянного шифрованного swap используйте обычный LUKS-том с паролем, а не случайный ключ.
- Забыли пересобрать initramfs после правки crypttab - и зашифрованный корень при загрузке не открывается, система падает в emergency shell.
- В crypttab берут UUID файловой системы внутри тома вместо UUID самого LUKS-устройства - устройство не находится. Это разные UUID, нужен именно luksUUID.
- luksFormat необратимо затирает старый заголовок. Перепутали устройство - данные уже не вернуть, бэкап заголовка (luksHeaderBackup) надо делать заранее.
- Потеря заголовка LUKS = потеря данных, даже если пароль вы помните: мастер-ключ хранится только в заголовке.
- Создайте на тестовом диске два раздела: /dev/sdb1 под данные и /dev/sdb2 под swap.
- Зашифруйте sdb1 командой luksFormat --type luks2, откройте как secure, создайте на нём ext4 и примонтируйте в /mnt/secure, положите туда файл.
- Добавьте второй пароль через luksAddKey и проверьте luksDump - должно быть два занятых слота.
- Пропишите sdb1 в /etc/crypttab по luksUUID и /dev/mapper/secure в /etc/fstab, пересоберите initramfs, перезагрузитесь и убедитесь, что система спросила пароль и смонтировала том.
- Настройте шифрованный swap на sdb2 через /dev/urandom, проверьте swapon --show.
- Установите AutoFS, настройте косвенную карту /mnt/net с одним любым локальным ресурсом (например loopback NFS или bind), зайдите в подкаталог и убедитесь через mount, что монтирование произошло, а через 2 минуты простоя отмонтировалось.
- Чем косвенная карта AutoFS отличается от прямой и какую из них чаще используют для набора NFS-шар?
- Где физически хранится мастер-ключ тома LUKS и почему смена парольной фразы не требует перешифровывать диск?
- Какие три поля минимально нужны в строке /etc/crypttab и что означает значение none в поле ключа?
- Почему для шифрованного swap часто указывают /dev/urandom и какой ценой это достигается?
- Что произойдёт при загрузке, если изменить /etc/crypttab, но не пересобрать initramfs для зашифрованного корня?
- Какой UUID нужно указывать в crypttab - тома LUKS или файловой системы внутри него, и как его получить?