禁用除 ssh 之外的所有服务

禁用除 ssh 之外的所有服务

如何在现代(基于 systemd)Linux 发行版上禁用除 ssh 之外的所有服务?

我需要实现一个维护模式

所有这些服务都需要关闭:

  • PostgreSQL 的
  • 后缀
  • 阿帕奇
  • 杯子
  • 计划任务
  • 鸽舍

但是 ssh 不能被关闭,因为它会用于在维护模式下执行任务。

当然,我可以编写一个 shell 脚本,循环遍历我想禁用的服务列表。但这感觉就像我在重新发明一些已经存在但目前我还不知道的东西。

答案1

这听起来很像运行级别,替换为目标在 Systemd 中。因此,您无需编写启动和停止一系列服务的脚本,而是可以创建一个仅包含必要服务(如 SSH)的新脚本。当然,如果没有网络,SSH 就没什么用,因此在此示例中,我们修改了maintenance.target一个简单的脚本以包含 SSH。emergency-net.target

[Unit]
Description=Maintenance Mode with Networking and SSH
Requires=maintenance.target systemd-networkd.service sshd.service
After=maintenance.target systemd-networkd.service sshd.service
AllowIsolate=yes

然后你可以使用以下方式进入维护模式

# systemctl isolate maintenance.target

然后回来

# systemctl isolate multi-user.target

答案2

根据@Esa在 Debian 10 上,你有一个rescue-ssh.target用于禁用所有服务的文件,除了ssh 和网络:

/lib/systemd/system/rescue-ssh.target

[Unit]
Description=Rescue with network and ssh
Documentation=man:systemd.special(7)
Requires=network-online.target ssh.service
After=network-online.target ssh.service
AllowIsolate=yes

现在,您可以按照以下步骤操作:

1. 输入维护模式

systemctl isolate rescue-ssh.target(仅限 ssh 和网络)

2. 检查维护模式

lsof -i:1-65535(并且您将只看到正在运行的 ssh 端口)

3. 退出维护模式

systemctl isolate multi-user.target(和一切又回来了)

答案3

首先列出您的服务并搜索其对应的 systemd 名称。

然后建立一个列表并停止每个列表成员进入维护,维护后启动每个成员。

相关内容