在使用systemd服务引导期间提示输入密码


16

这与Arch Linux(也许还有其他使用的发行版systemd)有关。我想在启动时挂载TrueCrypt分区。与旧版本相比sysvinit,使用名为的脚本非常简单rc.local

我通过劫持一个Arch论坛线程了解了我的最新情况。还有另一个线程这个systemd-devel线程称为“具有解决方案”,但是对我来说实际的含义并不明显,OP的最后一篇文章指出他无法实现自己的目标。

从外观上看,此人正在这样做,但是他正在寻找一种在输入密码时关闭连续启动消息的方法。我也在那里张贴了.service文件,并要求他张贴他的实际文件。

在进行大量搜索时,人们提到他们已经成功或有可能,但并未确切说明解决方案是什么。

我可以通过systemd服务从命令行解锁分区(这反过来又使我能够在关机/重新启动时自动卸除分区),但是登录后我必须手动进行操作。 d非常喜欢启动过程暂停并要求我输入密码。

这是我当前的脚本:

[Unit]
Description=Truecrypt Setup for vault
#DefaultDependencies=no
#Conflicts=umount.target
#Before=umount.target
#After=systemd-readahead-collect.service systemd-readahead-replay.service
#After=cryptsetup.target

[Service]
Type=oneshot
RemainAfterExit=yes
#StandardInput=tty-force
ExecStart=/bin/sh -c '/usr/bin/truecrypt -t --protect-hidden=no -k "" --filesystem=none --slot=1 -p `systemd-ask-password "Enter password for truecrypt volume: "` /dev/sda4'
ExecStop=/usr/bin/truecrypt --filesystem=none -d /dev/sda4

[Install]
WantedBy=multi-user.target

我将评论的内容留在中[Unit],因为在某个时候我遇到了应该放在其中的建议,但是我对此有疑问。上面的内容似乎在启动/登录后就可以正常工作了……只是在此期间没有。


据我了解,如果您不想被日志消息打扰,则需要在单元文件中创建一个屏障-这意味着它将需要在启动之前完成所有服务(初始化),并且它将阻塞之后运行的所有服务。这就是您要达到的目标吗?
彼得

@peterph我不认为这很重要,只要在收到提示时运行TrueCrypt所需的任何内容即可。其他事情不依赖于此,因为它只是一个用于存储文件的卷。因此,当我输入密码时,其他事情可能会在后台加载。目前,我等待登录,然后手动开始sudo systemctl start truecrypt-vault,输入su密码,输入TC Volume密码,然后按startx。当然可以在启动过程中向我显示密码提示,以避免登录后执行额外的步骤?
亨迪

这就是我的意思,实际上也是您的意思(甚至在问题主题中也是如此)-在启动过程中获取密码提示。如果您未使用像这样的图形引导plymouth,则在并行启动的服务中,控制台上的所有密码提示都可能会丢失。
彼得

哦。我以为您是在问我是否需要停止服务,还是要确保以前的所有服务都已开始……我不确定,并试图尽我所能回答。我仅通过文本登录和startx手动启动到运行级别3 。没有登录管理器。但是,是的,在输入文本时,我确实需要停止引导消息,否则它将从屏幕上消失。
亨迪

8
好吧,systemd有一个能够请求密码的代理,因此您可以朝这个方向看。
彼得

Answers:


2
  • 编写包装脚本并将其放入 ExecStart=
  • 在包装脚本中,使用systemd-ask-password <PROMPT>,从标准输出中读取密码,然后以所需的任何方式将其提供给truecrypt
  • 不要忘记exec从脚本末尾开始对truecrypt 进行编码,以免留下多余的bash进程

这将使systemd立即查询密码(如果您使用systemctl启动apache)或使用所谓的代理(默认的代理在系统启动过程中使用wall或直接在控制台上询问密码)查询密码。这是保持合规性的最佳方法。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.