Я создал файл keytab в домашнем каталоге пользователя $HOME/client.keytab . Файл кэша аутентификации находится в расположении по умолчанию /tmp/krb5cc_%U (где% U - UID). Теперь у меня есть этот простой systemd unit файл , чтобы запустить службу, и получить ключи аутентификации:

[Unit]
Description=Initializes, caches and renews Kerberos tickets for user
After=default.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStartPre=/usr/bin/kdestroy -q -c /tmp/krb5cc_%U
ExecStart=/usr/bin/kinit -V -l 30d -r 365d -k -t %h/client.keytab -c /tmp/krb5cc_%U %i@EXAMPLE.COM
ExecStartPost=/usr/bin/krenew -b -K 60 -k /tmp/krb5cc_%U
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=KerberosTicketing

[Install]
WantedBy=default.target

Это прекрасно работает, и создает и сохраняет билеты проверки подлинности Kerberos, если After указывает на default.target . Однако почему default.target? Это довольно поздно в процессе загрузки. Я бы предпочел, чтобы он работал в multi-user.target , чтобы я мог использовать сгенерированные заявки для монтирования удаленных файловых систем с серверов, которые не принимают публичную / частную аутентификацию.

РЕДАКТИРОВАТЬ: Если значение « After отличается от default.target или более поздней, kinit завершается с ошибкой kinit: Cannot find KDC for realm "EXAMPLE.COM" while getting initial credentials .

Я в основном пытаюсь сделать это: SSHFS автомонтирование через FSTAB с использованием Kerberos (GSSAPI).

1 ответ1

1

Для юнитов systemd --user именно здесь начинается время. Весь менеджер --user запускается поздно в процессе загрузки - это системный сервис (user @ .service), который запускается systemd-logind, который всегда запускается во время поздней загрузки.

Чтобы заказать услугу для более ранних модулей (например, remote-fs.target), вам необходимо преобразовать ее в системный сервис. Тогда ваши единицы .mount (или ваши записи в fstab) смогут также указать зависимости от вашего сервиса.


Обратите внимание, что WantedBy = не определяет, когда ваш юнит будет поставлен в очередь (в некотором смысле он делает противоположное). Вместо этого это определяется (неявным и явным) параметрами Before =/After =. Совершенно возможно и обычно иметь модуль с «WantedBy = multi-user.target», но также с «DefaultDependencies = no» и «Before = remote-fs.target».


В качестве примечания, не запускайте демонов, таких как krenew -K через ExecStartPost =. Единственное место, которое «официально» разрешает длительно работающие процессы (и предоставляет такие функции, как Restart =), - это главное ExecStart =, поэтому, если вы хотите периодическое обновление, поместите туда свой krenew -K .

Вы можете запустить kinit в качестве второго ExecStartPre = или использовать k5start -K чтобы избежать необходимости вручную kinit.

ExecStart=/usr/bin/k5start -L -b -K 30 -f %h/client.keytab -k /tmp/krb5cc_%U -u %i@EXAMPLE.COM

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .