0043 — Каталоги *.d/
Проблема
Во многих руководствах по Linux можно встретить такое:
Для того чтобы отключить пароль sudo для определенного пользователя нужно открыть файл конфигурации sudo и отключить запрос пароля следующей строчкой, например для пользователя losst:
$ sudo visudo
losst ALL=(ALL) NOPASSWD:ALL
Или вот такое:
You can make this workaround permanent by:
sudo nano /etc/default/grub
- Change line
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
toGRUB_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 выводит сообщение, смысл которого примерно такой:
В новой версии пакета конфигурационный файл, который отличается от того, что у вас в системе. Что мне делать?
- Использовать файл из пакета.
- Сохранить ваш конфигурационный файл.
- Прервать установку.
Выбрали первый вариант? Отлично! Ваши настройки потеряны. Выбрали второй вариант? Ещё лучше! Возможно, мейнтейнеры сделали там какое-то важное изменение, но вы об этом уже не узнаете.
К чему это всё?
Большинство современных программ для 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
, в котором указано, какие требования предъявляются к именам файлов и прочие особенности.