Ubuntu 服务器管理:软件安装与安全加固
Ubuntu 服务器管理:软件安装与安全加固
概述
Ubuntu Server 凭借其稳定性、庞大的社区支持和丰富的软件生态,成为众多开发者和企业的首选操作系统。本教程面向初学者,聚焦于服务器的两大核心主题:软件安装管理与基础安全加固。你将学会如何高效地通过 apt 管理软件包,并掌握一系列立即可用的安全配置策略,将一台“裸机”服务器快速转变为生产就绪环境。
软件安装与管理
apt:Ubuntu 的包管理基石
Ubuntu 使用 apt(Advanced Package Tool)来管理 .deb 格式的软件包。在安装任何软件前,务必更新本地软件源索引,以确保获取到最新版本信息。
sudo apt update # 更新可用软件包列表
sudo apt upgrade # 升级所有已安装的软件包
推荐将两者合为一条命令:
sudo apt update && sudo apt upgrade -y
安装、卸载与搜索软件
- 安装软件
sudo apt install <package_name> - 卸载软件但保留配置文件
sudo apt remove <package_name> - 彻底卸载(含配置文件)
sudo apt purge <package_name> - 搜索软件
apt search <keyword> - 查看已安装软件的详细信息
apt show <package_name>
常用服务器软件快速部署
以下是生产环境中高频使用的软件及安装指令,可直接参考:
| 软件 | 用途 | 安装命令 |
|---|---|---|
| Nginx | Web 服务器 / 反向代理 | sudo apt install nginx -y |
| Docker | 容器运行时 | sudo apt install docker.io -y |
| MySQL | 关系型数据库 | sudo apt install mysql-server -y |
| PostgreSQL | 对象关系型数据库 | sudo apt install postgresql postgresql-contrib -y |
| Node.js | JavaScript 运行时 | 使用 NodeSource 官方源;或 sudo apt install nodejs npm -y |
| Git | 版本控制 | sudo apt install git -y |
| curl / wget | 数据传输工具 | sudo apt install curl wget -y |
| htop | 交互式进程查看器 | sudo apt install htop -y |
对于需要特定版本(如 Python 3.11、Node.js 18)的场景,可使用 PPA(Personal Package Archive) 或官方维护的第三方源。比如添加 Docker 官方源:
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io -y
处理依赖问题与清理
sudo apt --fix-broken install:修复损坏的依赖关系。sudo apt autoremove:自动移除不再需要的依赖包。sudo apt autoclean:清除已下载的软件包缓存。
安全加固
系统更新自动化
未打补丁的软件是最大风险之一。配置无人值守安全更新,可让系统自动安装关键补丁。
sudo apt install unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades
选择 Yes 即可开启自动更新。配置文件位于 /etc/apt/apt.conf.d/50unattended-upgrades,可按需调整更新源(通常仅启用 -security 来源)。
防火墙配置 (UFW)
Ubuntu 内置 UFW (Uncomplicated Firewall),极大简化了 iptables 规则管理。默认规则应为 拒绝所有入站,允许所有出站,然后按需开放服务端口。
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 开放 SSH、HTTP、HTTPS 端口
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 开启防火墙
sudo ufw enable
sudo ufw status verbose
常见规则示例:
- 允许来自特定 IP 的 SSH:
sudo ufw allow from 203.0.113.4 to any port 22 - 限制连接速率(防暴力破解):
sudo ufw limit 22/tcp
SSH 安全强化
OpenSSH 服务器的默认配置存在被暴力攻击的风险,建议修改以下参数(文件:/etc/ssh/sshd_config):
# 禁止 root 直接登录
PermitRootLogin no
# 禁止空密码登录
PermitEmptyPasswords no
# 禁止密码认证(启用密钥认证后)
PasswordAuthentication no
# 使用非标准端口(可减少扫描)
Port 2222
# 限制允许登录的用户
AllowUsers your_admin_user
每次修改后需重启服务:sudo systemctl restart sshd。重要:在禁用密码认证前,请确保已将你的 SSH 公钥添加到 ~/.ssh/authorized_keys 并测试无误。
用户与权限管理
遵循最小权限原则:
- 创建非 root 管理员用户:
sudo adduser alice sudo usermod -aG sudo alice - 删除不必要的用户:
sudo userdel -r username - 使用
sudo visudo精确控制 sudo 权限,而非直接修改/etc/sudoers。 - 设置强密码策略(编辑
/etc/login.defs和/etc/pam.d/common-password):PASS_MAX_DAYS 90 PASS_MIN_DAYS 7 PASS_WARN_AGE 14
入侵防御工具 Fail2Ban
Fail2Ban 实时监控日志文件,对多次失败登录的 IP 实施临时封禁。
sudo apt install fail2ban -y
sudo systemctl enable fail2ban --now
默认配置即对 SSH 有效。可通过 /etc/fail2ban/jail.local 自定义保护更多服务,例如 Nginx:
[nginx-http-auth]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 5
查看封禁状态:sudo fail2ban-client status sshd
日志审计与核心防护
- 安装并配置
logwatch或直接使用journalctl定期审查系统日志。journalctl -u ssh --since "1 hour ago" - 启用内核安全模块 AppArmor(默认已启用并运行):
sudo aa-status - 使用
rkhunter或chkrootkit检测 Rootkit:sudo apt install rkhunter -y sudo rkhunter --check
禁用不必要服务
列出所有监听端口,关闭非必需服务以减少攻击面:
sudo ss -tunlp
sudo systemctl stop <service>
sudo systemctl disable <service>
验证清单
在完成所有配置后,建议逐项核对:
- 系统已运行
apt update && apt upgrade - UFW 已启用且仅必要端口开放
- SSH 禁用 root 登录和密码认证(若使用密钥)
- 普通管理员账户已创建并可 sudo
- Fail2Ban 正在保护 SSH 服务
- 自动安全更新已激活
- 无陌生服务在监听端口
这套组合拳能让你的 Ubuntu 服务器在面对互联网时具备基础防御能力。后续可根据业务需求引入更高级的监控(如 OSSEC、Wazuh)和强制访问控制,但上述步骤已能覆盖 80% 的常见威胁场景。