Вопрос или проблема
Я создал этот скрипт, который позволяет не-root доступ к директории, чтобы программа могла вносить изменения в файлы в этих директориях. Этот .service работал на нескольких машинах и даже на одной и той же машине в прошлом, но после свежей переустановки Arch Linux systemd
/systemctl
“Аутентификация как: mpd”.
Странно, что когда я использую sudo
для его запуска, он работает, но использование enable не сохраняется при перезагрузке.
Я не совсем разбираюсь в этом, поэтому прошу прощения, я собираюсь изучить systemd после семестра.
[oddstap@Arch2019 ~]$ systemctl enable brightlight.service
==== АУТЕНТИФИКАЦИЯ ДЛЯ org.freedesktop.systemd1.manage-unit-files ====
Требуется аутентификация для управления системными сервисами или файлами юнитов.
Аутентификация как: mpd
Пароль:
polkit-agent-helper-1: pam_authenticate не удался: Ошибка аутентификации
==== АУТЕНТИФИКАЦИЯ НЕ УДАЛАСЬ ====
Не удалось включить юнит: Доступ запрещен
[oddstap@Arch2019 ~]$
Я не совсем понимаю, почему это происходит. Я попробовал несколько вещей, например, использовать флаг --user
, а затем указал точную директорию. Результаты смешанные. Я также пробовал помещать файл сервиса в /etc/systemd/system
, но это дает тот же результат.
[oddstap@Arch2019 /usr/lib/systemd/system]$ systemctl --user enable /usr/lib/systemd/system/brightlight.service
Удалено /home/oddstap/.config/systemd/user/multi-user.target.wants/brightlight.service.
Создана символическая ссылка /home/oddstap/.config/systemd/user/multi-user.target.wants/brightlight.service → /usr/lib/systemd/system/brightlight.service.
[oddstap@Arch2019 /usr/lib/systemd/system]$
Я видел похожую проблему, думаю, на Server Fault.
Вот файл .service, я разместил его здесь, я вполне уверен, что это не причина, но я могу ошибаться. Я собираюсь попробовать исправить это, но если кто-то предложит идеи, дайте знать. Отсутствие включенных скриптов systemd усложняет мне жизнь.
[Unit]
Описание Надеюсь, это будет решение для вас.
Перед nodered.service
[Service]
Тип oneshot
Пользователь root
ExecStart=/bin/bash -c "/bin/chmod a+w /sys/class/backlight/intel_backlight/*"
[Install]
WantedBy=multi-user.target
Ну, я собираюсь оставить свой вопрос открытым на случай, если кто-то сможет найти надлежащее решение для этого. Мне удалось исправить это, удалив mpd, затем удалив пользователя mpd и переустановив его. Это грубо, но если кто-то сможет найти лучший способ сделать это или даже узнать, почему это происходит в первую очередь, я был бы признателен.
Ответ или решение
Вопрос о том, как аутентифицироваться для работы с системными службами в системах на базе Linux с использованием systemd и systemctl, может вызывать трудности, особенно в контексте управления правами доступа и настройками пользователей. В данном случае, когда вы пытаетесь активировать сервис, получаете сообщение о необходимости аутентификации и не можете это сделать без предоставления пароля, это связано с особенностями управления правами доступа в системе.
Проблема аутентификации в systemd
Когда вы запускаете команду systemctl enable
, которая предназначена для активации системного сервиса, система требует прав администратора. Вы столкнулись с ошибкой, указывающей на то, что аутентификация не прошла успешно, когда вы пытались сделать это от имени пользователя mpd
. Ошибка pam_authenticate failed: Authentication failure
говорит о том, что ваша система не может получить подтверждение прав от указанного пользователя.
Причины и решения
-
Необходимость привилегий: Ваша служба
brightlight.service
предназначена для выполнения действий с системными файлами, требующими прав администратора (User root
). Поскольку вы пытаетесь активировать сервис от имени пользователя, который не является администратором, система не позволяет завершить эту операцию. Вам нужно использоватьsudo
для выполнения данной команды, чтобы получить права на управление юнитами systemd. -
Правильное размещение юнит-файла: Убедитесь, что ваш .service файл находится в правильном месте. Системные службы должны храниться в
/etc/systemd/system
для того, чтобы их можно было активировать на уровне системы. Чтобы избежать проблем с доступом, убедитесь, что ваш юнит-файл существует именно там. -
Правильная настройка службы: В вашем .service файле указано
User root
, что говорит о том, что служба будет выполняться от имени пользователя root. Если вам нужно, чтобы служба выполнялась от имени другого пользователя, измените это значение на нужного пользователя. -
Использование –user флага: Когда вы используете
systemctl --user
, это должно работать для пользовательских сервисов, которые запускаются в контексте вашего пользователя. Но для системных служб вам нужно использовать обычныйsystemctl
без флага--user
. -
Настройка Polkit: Если система по-прежнему требует аутентификации для выполнения этих операций, возможно, нужно будет настроить правила Polkit для разрешения нужных операций без запроса пароля. Политики безопасности можно настраивать через файлы в каталогах
/etc/polkit-1/rules.d/
и/usr/share/polkit-1/rules.d/
. Будьте осторожны, внося изменения в эти файлы, так как неправильные настройки могут создать уязвимости в вашей системе.
Заключение
Вы нашли решение своей проблемы с помощью удаления и повторной установки пользователя mpd
, что, хотя и является временной мерой, не является оптимальным решением. Рекомендуется более детально изучить принципы работы с systemd и Polkit, чтобы лучше понимать вопрос управления службами и пользователями в контексте Linux. Правильные настройки и размещение сервисов помогут избежать подобных ситуаций в будущем и упрощат вашу работу с системными службами.
Если у вас возникнут дополнительные вопросы или потребуются более подробные указания, не стесняйтесь задавать их.