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 # 平滑重启,不断开现有连接