Linux 守护进程与 SSH 安全配置指南

发布于:2025-03-14 ⋅ 阅读:(19) ⋅ 点赞:(0)
1. 守护进程(Daemon)

定义
守护进程是后台运行的“隐形服务员”,默默执行特定任务,无需用户手动操作。

  • 类比:像一家 24 小时营业的便利店,无论你是否在店内,它都在后台运行(如 Web 服务器、数据库服务)。

  • 特点

    • 无终端关联(TTY 显示为 ?)。

    • 通常在系统启动时自动运行,生命周期与系统一致。


2. systemd 守护进程的功能

systemd 是 Linux 系统的“大管家”,负责管理所有守护进程和服务,核心功能包括:

  1. 服务管理:启动、停止、重启服务(如 nginxmysql)。

  2. 依赖管理:按顺序启动依赖服务(比如先启动网络再启动 Web 服务)。

  3. 日志管理:通过 journalctl 查看所有服务的日志(类似“服务运行日记”)。

  4. 系统初始化:作为系统第一个进程(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 免密登录的实现

步骤

  1. 生成密钥对(本地电脑操作):

    ssh-keygen -t rsa   # 默认生成 id_rsa(私钥)和 id_rsa.pub(公钥)  
  2. 上传公钥到服务器

    ssh-copy-id user@server_ip  # 自动将公钥添加到服务器的 ~/.ssh/authorized_keys  
  3. 验证登录

    ssh user@server_ip  # 无需输入密码  

权限要求

  • 服务器上的 ~/.ssh 目录权限必须为 700

  • ~/.ssh/authorized_keys 文件权限必须为 600


7. SSH 公钥与私钥的区别
公钥 私钥
锁头:可以公开给任何人 钥匙:必须严格保密
存放在服务器 ~/.ssh/authorized_keys 存放在本地 ~/.ssh/id_rsa
用于加密数据 用于解密数据或签名验证

安全原则:私钥泄露等于家门钥匙丢失,需立即更换密钥对!


8. 禁止超级用户(root)远程登录

为什么?

  • 风险:root 权限过高,一旦被爆破,攻击者可直接掌控服务器。

  • 最佳实践:通过普通用户登录后,再 sudo 提权。

设置方法

  1. 编辑 SSH 配置文件:

    sudo vim /etc/ssh/sshd_config  
  2. 修改以下参数:

    PermitRootLogin no   # 禁止 root 登录  
  3. 重启 SSH 服务:

    sudo systemctl restart sshd  

9. 禁止基于密码的身份验证

为什么?

  • 密码风险:弱密码易被暴力破解,密钥认证更安全。

设置方法

  1. 编辑 SSH 配置文件:

    PasswordAuthentication no     # 关闭密码登录  
    PubkeyAuthentication yes      # 启用密钥登录(默认已开启)  
  2. 重要:确保已配置公钥登录,否则会把自己锁在门外!

  3. 重启 SSH 服务:

    sudo systemctl restart sshd  

10. 修改 SSH 配置后如何生效?
  • 重启服务

    sudo systemctl restart sshd    # 完全重启服务(断开当前连接)  
  • 重新加载配置(推荐)

    sudo systemctl reload sshd     # 平滑重启,不断开现有连接  

网站公告

今日签到

点亮在社区的每一天
去签到