Debian 最佳实践

FreeGuideOnline 最新 2026-07-16

bash

安装 sudo(最小化安装可能缺失)

apt update && apt install sudo -y

将当前用户加入 sudo 组

usermod -aG sudo your_username

验证:重新登录后运行以下命令,若显示 uid 为 0 则配置成功

sudo whoami


建议保持 `/etc/sudoers` 文件的默认安全设置,不要手动编辑该文件。如需修改,务必使用 `visudo` 命令。

### 优化 APT 软件源

Debian 默认源可能指向临近镜像,但手动选择最快的镜像可以大幅提升下载速度。

```bash
# 备份原有源列表
cp /etc/apt/sources.list /etc/apt/sources.list.backup

# 编辑源文件,推荐使用镜像站如清华、中科大或官方全球镜像
# 示例:Debian 12 (bookworm) 主源与非自由固件源
cat > /etc/apt/sources.list << EOF
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb https://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware
EOF

# 更新软件包列表
apt update

强烈推荐同时启用 contribnon-freenon-free-firmware 组件,以保证硬件驱动和某些实用工具的覆盖。

安装基础工具集

一套精简但完备的工具能让后续管理事半功倍。

apt install -y \
  curl wget gnupg2 ca-certificates \
  htop vim git unzip zip \
  net-tools dnsutils iproute2 \
  ufw logrotate rsync
  • curl / wget:下载文件、测试接口必备
  • htop:交互式进程查看器
  • git:版本控制与配置管理
  • net-tools / iproute2:网络诊断
  • ufw:简化防火墙配置
  • logrotate:日志轮替,防止日志占满磁盘

安全加固

安全是系统管理的生命线。以下措施能在不打乱日常工作流的前提下显著提升防御能力。

SSH 安全配置

修改 SSH 默认端口并禁用密码登录是抵御暴力破解最有效的方法之一。

编辑 /etc/ssh/sshd_config,调整或确认以下配置项:

Port 2222                     # 将22改为一个高位端口(如2222)
PermitRootLogin no            # 禁止root直接登录
PasswordAuthentication no     # 禁用密码认证,仅允许密钥登录
PubkeyAuthentication yes
AllowUsers your_username      # 仅允许指定用户登录

保存后重启服务:systemctl restart sshd。⚠️ 务必先在服务器上添加好你的公钥并测试密钥登录成功,再禁用密码,否则可能被锁定。可以使用 ssh-copy-id user@host 分发公钥。

启用防火墙 (UFW)

Uncomplicated Firewall 基于 iptables,语法简单,适合大多数场景。

# 默认拒绝所有入站流量,允许所有出站
ufw default deny incoming
ufw default allow outgoing

# 允许新 SSH 端口和常用服务
ufw allow 2222/tcp
ufw allow 80/tcp
ufw allow 443/tcp

# 启用防火墙
ufw enable

# 查看状态
ufw status verbose

生产环境中,建议仅开放必要端口,并定期审查规则。

配置自动安全更新

保持系统处于最新状态是防范已知漏洞的基本要求。Debian 提供 unattended-upgrades 工具。

apt install unattended-upgrades apt-listchanges -y

# 启用自动更新
dpkg-reconfigure -plow unattended-upgrades
# 在对话框中选择“Yes”

进一步编辑 /etc/apt/apt.conf.d/50unattended-upgrades,可以指定只自动安装安全更新:

Unattended-Upgrade::Origins-Pattern {
        "origin=Debian,codename=${distro_codename},label=Debian-Security";
};

还可设置自动清理和邮件通知,确保及时知晓更新情况。

包管理最佳实践

善用 APT 与 aptitude

  • apt:新版命令行工具,适用于日常安装、更新、卸载。
  • aptitude:功能更强大的交互式包管理器,可以处理复杂的依赖关系,推荐安装在服务器上以备不时之需。
apt install aptitude

# 使用 aptitude 搜索包
aptitude search '?name(nginx)'

# 交互式界面解决依赖冲突
aptitude

定期清理无用包

系统运行一段时间后,会留下大量不再需要的依赖包、旧的下载缓存。

# 清理已下载的安装包缓存
apt clean

# 移除自动安装且不再被依赖的包
apt autoremove --purge

# 查看残留的配置文件
apt list '?config-files' | grep -v "^Listing"

建议将 apt autoremove 加入定期维护脚本,或与安全更新配合使用。

固定包版本与回滚

当某软件的新版本与你的应用不兼容时,可以利用 APT 的“hold”功能锁定包版本。

# 锁定 nginx 版本
apt-mark hold nginx

# 解封
apt-mark unhold nginx

# 查看被锁定的包
apt-mark showhold

如果需要回滚到特定版本,可以指定版本号安装:

apt install package=1.2.3-1

前提是该旧版本仍存在于你的仓库中,或可从 snapshot.debian.org 获取。

系统监控与日志管理

使用 systemd 日志

Debian 默认使用 journald 收集日志,常用指令:

# 查看本次启动后的所有日志
journalctl -b

# 实时跟踪日志
journalctl -f

# 查看特定服务的日志
journalctl -u nginx.service

# 按时间过滤
journalctl --since "2024-01-01 10:00:00" --until "2024-01-01 12:00:00"

为避免日志无限增长,需配置日志持久化及大小限制。编辑 /etc/systemd/journald.conf

Storage=persistent
SystemMaxUse=500M
RuntimeMaxUse=200M

重启服务 systemctl restart systemd-journald 生效。

配置 logrotate 防止磁盘爆满

系统服务和应用程序日志通常位于 /var/log/logrotate 负责定期压缩、轮替和删除老旧日志。

为自定义应用添加配置,在 /etc/logrotate.d/ 下创建文件,例如 myapp

/var/log/myapp/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 640 myapp myapp
}

测试配置:logrotate -d /etc/logrotate.d/myapp,然后可强制运行一次:logrotate -f /etc/logrotate.d/myapp

部署轻量监控

不必一开始就上 Prometheus 等重型系统。用 htopiotopnethogs 可以快速定位性能瓶颈。

apt install iotop nethogs sysstat

# 查看磁盘 I/O 实时情况
iotop

# 查看进程占用的带宽
nethogs

# sar 收集的历史性能数据
sar -u 5 3

在服务器上安装 lm-sensors 可以监测 CPU 温度和风扇转速(需传感器支持)。

备份与恢复

任何系统都可能遭遇硬件故障或误操作。制定并演练备份策略是专业运维的基本素养。

核心配置文件备份

使用 rsync 将关键目录同步到另一台机器或外部存储。

rsync -avz --delete /etc /backup/location/etc_$(date +%Y%m%d)

更完善的做法是结合 git 管理 /etc:进入 /etc,执行 git init,将配置文件纳入版本控制,每次修改后用 git diff 对比,git commit 保存。注意过滤掉敏感信息(如私钥)并配合 .gitignore

数据库与用户数据备份

对于数据库,使用其原生转储工具,如 mysqldumppg_dump,并通过 cron 定期执行。将转储文件与文件系统备份一起保留多个历史版本。

系统快照与裸机恢复

对于完整系统恢复,推荐使用 rsync 全量备份或创建磁盘镜像。在虚拟机环境中利用快照功能。也可以使用 tar 配合排除文件进行备份:

tar -cvpzf /backup/system_backup_$(date +%Y%m%d).tar.gz \
  --exclude=/proc \
  --exclude=/tmp \
  --exclude=/sys \
  --exclude=/dev \
  --exclude=/run \
  --exclude=/mnt \
  --exclude=/media \
  --exclude=/lost+found /

确保定期测试恢复流程,否则备份形同虚设。

性能调优基础

在硬件资源固定时,合理的内核参数和资源限制能显著提高系统响应能力。

调整 swappiness 和文件句柄限制

减少系统对 swap 的偏好,让内存更积极被使用:

# 临时调整
sysctl vm.swappiness=10

# 永久生效,写入 /etc/sysctl.d/99-custom.conf
echo "vm.swappiness=10" > /etc/sysctl.d/99-swappiness.conf
sysctl -p /etc/sysctl.d/99-swappiness.conf

增加系统最大文件句柄数,对于高并发服务至关重要:

echo "fs.file-max = 65535" >> /etc/sysctl.d/99-fs.conf
sysctl -p /etc/sysctl.d/99-fs.conf

同时需调整 /etc/security/limits.conf 为用户或服务设置 nofile 限制。

使用 systemd 资源控制

通过 service 文件可以对进程进行资源限制,避免单个服务耗尽 CPU 或内存。

systemctl edit nginx.service --full
# 在 [Service] 段添加
MemoryMax=512M
CPUQuota=50%

重启服务后,使用 systemctl show nginx -p MemoryCurrent 验证。

定期任务优化

将非紧急但耗资源的任务(如 logrotateupdatedb)安排在低负载时段。使用 systemd-timerscron 均可。

# 每天凌晨3点更新文件数据库
0 3 * * * /usr/bin/updatedb -f "$(cat /etc/updatedb.conf)"