使服务在重启后不自动启动(因为它们需要访问加密分区)

使服务在重启后不自动启动(因为它们需要访问加密分区)

我使用 Ubuntu Server 10.04。我或多或少只希望服务器在重启后可以通过 SSH 访问。然后我将登录并自行挂载加密分区,之后启动使用它的服务。

我该如何进行这样的设置?

(我的第一个想法是将除 /boot 之外的所有内容都放在加密的 LVM 中,但我从未通过 SSH 登录并挂载 LVM 来工作。Initramfs 对我来说有点太复杂了。否则我认为这将是最好的解决方案。)

答案1

服务通过各个 /etc/rc.d/ 文件夹中的条目启动(它们的名称从 rc1.d 到 rc6.d)。您需要确定不想启动的服务,然后将 Sxxservicename 链接(xx 是 01 到 99 之间的数字)更改为 Kxxservicename。请注意,当相关软件包升级时,这些更改可能会被覆盖。如果您想保留更改,我建议更改 /etc/init.d/servicename 中的启动/停止级别定义(每个服务在该文件夹中都有一个实际执行启动/停止的脚本,它还包含服务应启动和停止的运行级别的默认设置)。

然后只需将 /etc/fstab 中加密分区的行更改为包含“noauto”选项,这将阻止它在启动时挂载。您仍然可以使用 mount 命令手动挂载它。

警告:您必须确保您的启动过程可以在没有加密分区上的任何数据的情况下完成。否则,您就是在给自己挖一个大坑(并且您需要一张 Live CD 才能摆脱它)。

答案2

您的发行版使用 upstart 来管理服务,因此您需要同时照顾 upstart 服务和“旧式”(系统 V)服务。

对于所有需要加密文件系统的 upstart 服务,编辑中的相应文件并将/etc/init.d更改start on foostart on (foo and encrypted-filesystems)和更改stop on barstop on (bar or runlevel [0126])

对于所有需要加密文件系统的系统 V 服务,将符号链接重命名/etc/rc2.d/S??foo/etc/rc2.d/K50foo

挂载加密文件系统后,运行以下命令

initctl emit encrypted-filesystems
telinit 3

如果您想在不重新启动的情况下卸载加密文件系统,我认为telinit 2将使用我提出的方案停止所有受影响的服务。

答案3

我建议使用 update-rc.d(检查手册页)来禁用运行级别二中的启动,因为它应该始终“做正确的事情”。

在运行级别 2 中放置一些内容来提醒您也是一个好主意,例如电子邮件,这样它在意外重启后就不会被忽视。

然后 ssh 登录,挂载 crypt 卷并初始化 3。

[再次检查包更新后是否仍然正常]

相关内容