Linux 守护进程与 SSH 安全配置指南
1. 守护进程(Daemon)
定义:
守护进程是后台运行的“隐形服务员”,默默执行特定任务,无需用户手动操作。
-
类比:像一家 24 小时营业的便利店,无论你是否在店内,它都在后台运行(如 Web 服务器、数据库服务)。
-
特点:
-
无终端关联(
TTY
显示为?
)。 -
通常在系统启动时自动运行,生命周期与系统一致。
-
2. systemd 守护进程的功能
systemd 是 Linux 系统的“大管家”,负责管理所有守护进程和服务,核心功能包括:
-
服务管理:启动、停止、重启服务(如
nginx
、mysql
)。 -
依赖管理:按顺序启动依赖服务(比如先启动网络再启动 Web 服务)。
-
日志管理:通过
journalctl
查看所有服务的日志(类似“服务运行日记”)。 -
系统初始化:作为系统第一个进程(PID=1),接管所有启动任务。
常用命令:
systemctl start nginx # 启动服务
systemctl status nginx # 查看服务状态
journalctl -u nginx # 查看服务日志
3. systemd 单元(Unit)
定义:单元是 systemd 管理的配置文件,定义如何操作资源(服务、设备、定时任务等)。
常见单元类型:
-
.service
:管理后台服务(如nginx.service
)。 -
.timer
:定时任务(类似cron
,但更灵活)。 -
.socket
:监听网络或本地套接字(按需启动服务)。 -
.mount
:管理文件系统挂载点。 -
.target
:定义系统状态(如multi-user.target
表示多用户模式)。
单元文件路径:
-
系统级:
/etc/systemd/system/
-
用户级:
~/.config/systemd/user/
4. restart
vs reload
的区别
-
systemctl restart nginx
:-
操作:先停止服务,再重新启动。
-
影响:服务进程完全重启,短暂中断。
-
场景:修改核心配置(如监听端口)。
-
-
systemctl reload nginx
:-
操作:通知服务重新加载配置文件,不重启进程。
-
影响:服务不中断,持续运行。
-
场景:修改非核心配置(如日志文件路径)。
-
通俗比喻:
-
restart
是关店重新开张(中断营业)。 -
reload
是让员工换上新工作服继续营业(无缝衔接)。
5. 屏蔽服务的作用与 mask
vs disable
-
屏蔽服务(
mask
):-
作用:彻底禁止服务被启动(手动和自动都不行)。
-
原理:创建一个指向
/dev/null
的符号链接,覆盖原服务文件。 -
命令:
sudo systemctl mask nginx
-
-
禁用服务(
disable
):-
作用:仅禁止开机自启动,但允许手动启动。
-
命令:
sudo systemctl disable nginx
-
使用场景:
-
mask
:永久禁用高风险服务(如陈旧的远程管理工具)。 -
disable
:临时关闭不常用服务(如开发环境中的测试服务)。
6. SSH 免密登录的实现
步骤:
-
生成密钥对(本地电脑操作):
ssh-keygen -t rsa # 默认生成 id_rsa(私钥)和 id_rsa.pub(公钥)
-
上传公钥到服务器:
ssh-copy-id user@server_ip # 自动将公钥添加到服务器的 ~/.ssh/authorized_keys
-
验证登录:
ssh user@server_ip # 无需输入密码
权限要求:
-
服务器上的
~/.ssh
目录权限必须为700
。 -
~/.ssh/authorized_keys
文件权限必须为600
。
7. SSH 公钥与私钥的区别
公钥 | 私钥 |
---|---|
锁头:可以公开给任何人 | 钥匙:必须严格保密 |
存放在服务器 ~/.ssh/authorized_keys | 存放在本地 ~/.ssh/id_rsa |
用于加密数据 | 用于解密数据或签名验证 |
安全原则:私钥泄露等于家门钥匙丢失,需立即更换密钥对!
8. 禁止超级用户(root)远程登录
为什么?
-
风险:root 权限过高,一旦被爆破,攻击者可直接掌控服务器。
-
最佳实践:通过普通用户登录后,再
sudo
提权。
设置方法:
-
编辑 SSH 配置文件:
sudo vim /etc/ssh/sshd_config
-
修改以下参数:
PermitRootLogin no # 禁止 root 登录
-
重启 SSH 服务:
sudo systemctl restart sshd
9. 禁止基于密码的身份验证
为什么?
-
密码风险:弱密码易被暴力破解,密钥认证更安全。
设置方法:
-
编辑 SSH 配置文件:
PasswordAuthentication no # 关闭密码登录 PubkeyAuthentication yes # 启用密钥登录(默认已开启)
-
重要:确保已配置公钥登录,否则会把自己锁在门外!
-
重启 SSH 服务:
sudo systemctl restart sshd
10. 修改 SSH 配置后如何生效?
-
重启服务:
sudo systemctl restart sshd # 完全重启服务(断开当前连接)
-
重新加载配置(推荐):
sudo systemctl reload sshd # 平滑重启,不断开现有连接