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 %[email protected]
ExecStartPost=/usr/bin/krenew -b -K 60 -k /tmp/krb5cc_%U
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=KerberosTicketing
[Install]
WantedBy=default.target
After
如果指向 ,这将完美运行,并创建和存储 Kerberos 身份验证票据default.target
。但是,为什么呢default.target
?这是启动过程中相当晚的时候。我宁愿让它在 时工作multi-user.target
,这样我就可以使用生成的票据从不接受公有/私有身份验证的服务器挂载远程文件系统。
编辑:如果After
是除了default.target
或更晚的任何内容,kinit
则会失败并出现错误kinit: Cannot find KDC for realm "EXAMPLE.COM" while getting initial credentials
。
我基本上想实现这个目标:使用 Kerberos(GSSAPI)通过 FSTAB 自动挂载 SSHFS。
答案1
为了systemd --用户单位,这是时间的开始。整个 --user 管理器在引导过程的后期启动——它是一项系统服务([电子邮件保护]) 由 systemd-logind 启动,而 systemd-logind 本身始终在后期启动期间启动。
要根据早期单元(如 remote-fs.target)对服务进行排序,您需要将其转换为系统服务。然后您的 .mount 单元(或您的 fstab 条目)也将能够指定对您的服务的依赖关系。
请注意 WantedBy=才不是定义您的单元何时排队(以相反的方式)。相反,这是由(隐式和显式)Before=/After= 选项定义的。完全有可能并且很常见的是,有一个单元具有“WantedBy=multi-user.target”,但也有“DefaultDependencies=no”和“Before=remote-fs.target”。
附注:不要通过 ExecStartPost=等方式运行守护进程krenew -K
。唯一“正式”允许长时间运行进程(并提供 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 %[email protected]