0043 — Каталоги *.d/

Содержимое страницы

Проблема

Во многих руководствах по Linux можно встретить такое:

Для того чтобы отключить пароль sudo для определенного пользователя нужно открыть файл конфигурации sudo и отключить запрос пароля следующей строчкой, например для пользователя losst:

$ sudo visudo
losst ALL=(ALL) NOPASSWD:ALL

Или вот такое:

  1. You can make this workaround permanent by:

    • sudo nano /etc/default/grub
    • Change line GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" to GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi=off"
    • [Ctrl]-[X], press [Y] and then [Enter] to save and exit.
    • sudo update-grub
    • Reboot and you should no longer have the black screen problem.

Казалось бы, на а чо такова, все так делают, везде так написано. То есть у людей вообще в голове ничего не щёлкает от того, что рядом есть каталог с .d/ в имени. Или человек ни разу не обновлял свою систему с момента установки.

Даже в sudo бывают ошибки, и пакет время от времени обновляется. При этом часто мейнтейнеры обновляют и конфигурационный файл приложения. При обновлении пакета APT выводит сообщение, смысл которого примерно такой:

В новой версии пакета конфигурационный файл, который отличается от того, что у вас в системе. Что мне делать?

  1. Использовать файл из пакета.
  2. Сохранить ваш конфигурационный файл.
  3. Прервать установку.

Выбрали первый вариант? Отлично! Ваши настройки потеряны. Выбрали второй вариант? Ещё лучше! Возможно, мейнтейнеры сделали там какое-то важное изменение, но вы об этом уже не узнаете.

К чему это всё?

Большинство современных программ для Linux создает в каталоге со своими конфигурационными файлами подкаталог с .d/ в названии. ВСЕ НАСТРОЙКИ НУЖНО ДЕЛАТЬ В ЭТОМ КАТАЛОГЕ, А НЕ РЕДАКТИРОВАТЬ ФАЙЛЫ, ПОСТАВЛЯЕМЫЕ ВМЕСТЕ С ПАКЕТОМ.

Примеры

sudo без пароля

Давайте рассмотрим на примере настройки sudo без пароля. Запускать visudo вообще не требуется, достаточно в каталоге /etc/sudoers.d/ создать файл no-password (имя выбрано произвольно) со следующим содержимым:

%sudo ALL=(ALL) NOPASSWD: ALL

GRUB

Как быть с GRUB? Там всё то же самое — в каталоге /etc/default/ есть подкаталог grub.d/, в котором нужно создать файлы с расширением .cfg. Поскольку мне нужно проверять файловую систему при загрузке, я создал там файл grub-cmdline-default.cfg с таким содержимым:

GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_DEFAULT} fsck.mode=force fsck.repair=yes l1tf=full"

Разумеется, я потом обновил параметры загрузчика:

sudo update-grub

OpenSSH Server

Сервер OpenSSH часто рекомендуют настраивать через правку /etc/ssh/sshd.conf. Но зачем, если есть каталог /etc/ssh/sshd_config.d/? Все правки нужно делать там, создавая файлы по необходимости.

Ядро

Самое интересное (нет). Все советуют править /etc/sysctl.conf. Я советую создавать файлы в /etc/sysctl.d/.

Выводы

Не трогайте конфигурационные файлы, поставляемые вместе с пакетами. Посмотрите, нет ли поблизости каталога с .d/ в имени. Часто в нём лежит README, в котором указано, какие требования предъявляются к именам файлов и прочие особенности.