Debian 最佳实践
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
强烈推荐同时启用 contrib、non-free 和 non-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 等重型系统。用 htop、iotop、nethogs 可以快速定位性能瓶颈。
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。
数据库与用户数据备份
对于数据库,使用其原生转储工具,如 mysqldump、pg_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 验证。
定期任务优化
将非紧急但耗资源的任务(如 logrotate、updatedb)安排在低负载时段。使用 systemd-timers 或 cron 均可。
# 每天凌晨3点更新文件数据库
0 3 * * * /usr/bin/updatedb -f "$(cat /etc/updatedb.conf)"