2、Linux基础环境搭建:CentOS 7/Ubuntu 20.04 系统安装与初始化、SSH远程连接配置、防火墙与SELinux设置

说实话,做运维这些年,我装过的Linux系统少说也有上千台了。从最开始对着屏幕发懵,到现在闭着眼都能配完一套环境,中间踩过的坑真不少。这一章咱们就聊聊基础环境搭建,说白了就是给咱们的在线学习投资系统铺好第一块砖。

你可能会问:「为啥非得用Linux?Windows不香吗?」嗯,我当年也这么想过。直到有一次生产环境出了故障,Windows服务器重启花了40分钟,而旁边的Linux机器30秒就起来了。从那以后,我个人的习惯是——凡是跟钱打交道的系统,一律上Linux。

2.1 系统安装与初始化

咱们这次选两个主流发行版:CentOS 7和Ubuntu 20.04 LTS。为什么是这两个?CentOS 7在服务器领域根深蒂固,Ubuntu 20.04则是开发者的心头好。我建议你根据团队熟悉度二选一,别纠结。

2.1.1 最小化安装原则

安装时记住一个原则:能少则少。别勾选「带GUI的服务器」,那玩意儿除了吃内存没别的用。我在项目中遇到过一台机器装了图形界面,结果内存被吃掉2GB,业务高峰期直接OOM了。

安装时只需要选这些基础组件:

  • 基础存储工具(文件系统、磁盘管理)
  • 网络工具(ifconfig、ping、traceroute)
  • 开发工具(gcc、make、git)—— 后面编译用得上
  • 安全工具(openssh-server、firewalld)
我的小技巧:安装时把磁盘分区规划好。我习惯分三个区:/boot 500MB、swap 等于内存大小、剩下的全给根分区。别搞什么/home单独分区,麻烦。

2.1.2 初始化配置清单

系统装完后,别急着部署业务。先跑一遍初始化脚本,我列了个清单:

配置项 CentOS 7 Ubuntu 20.04 说明
主机名 hostnamectl set-hostname hostnamectl set-hostname 别用默认的localhost
时区 timedatectl set-timezone Asia/Shanghai timedatectl set-timezone Asia/Shanghai 不然日志时间对不上
DNS /etc/resolv.conf /etc/systemd/resolved.conf 配两个备用DNS
yum/apt源 阿里云镜像 清华镜像 国内下载快很多
内核参数 /etc/sysctl.conf /etc/sysctl.d/ 优化网络和内存

举个例子,改主机名:

# CentOS 7
hostnamectl set-hostname invest-server-01
echo "127.0.0.1 invest-server-01" >> /etc/hosts

# Ubuntu 20.04
hostnamectl set-hostname invest-server-01
sed -i "s/127.0.1.1.*/127.0.1.1 invest-server-01/" /etc/hosts
注意:改完主机名记得重启network服务或者重启机器。我曾经改完没重启,结果SSH连上去显示的还是旧主机名,排查了半天。

2.2 SSH远程连接配置

服务器装好了,总不能天天蹲机房吧?SSH就是咱们的远程遥控器。我个人习惯是:密码登录只用于首次,之后必须切到密钥登录

2.2.1 生成密钥对

在本地机器上执行:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

这里有个坑:密钥的密码(passphrase)一定要设。我见过有人图省事不设密码,结果私钥泄露了,服务器直接被扫。你想想看,投资系统的服务器被黑,那损失可不是闹着玩的。

2.2.2 配置SSH服务端

编辑 /etc/ssh/sshd_config,这几项必须改:

# 禁止root直接登录
PermitRootLogin no

# 只允许密钥登录
PasswordAuthentication no

# 修改默认端口(可选,但推荐)
Port 2222

# 限制登录用户
AllowUsers deploy admin

改完记得重启服务:

systemctl restart sshd
避坑指南:我曾经在改端口后忘了放行防火墙,结果把自己锁在外面了。还好当时在机房有物理访问权限,不然就尴尬了。所以改端口前,一定先确认防火墙规则。

2.2.3 配置免密登录

把公钥传到服务器上:

ssh-copy-id -i ~/.ssh/id_rsa.pub deploy@服务器IP -p 2222

如果ssh-copy-id不好使,手动复制也行:

cat ~/.ssh/id_rsa.pub | ssh deploy@服务器IP -p 2222 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

2.3 防火墙与SELinux设置

说到防火墙和SELinux,很多新手第一反应就是「关掉」。别急,听我说完。

2.3.1 firewalld配置

CentOS 7默认用firewalld,Ubuntu 20.04用ufw。我个人的习惯是:开最小权限,只放行业务端口

CentOS 7示例:

# 启动防火墙
systemctl start firewalld
systemctl enable firewalld

# 放行SSH端口(如果你改了端口)
firewall-cmd --permanent --add-port=2222/tcp

# 放行业务端口(比如投资系统用8080)
firewall-cmd --permanent --add-port=8080/tcp

# 重载规则
firewall-cmd --reload

# 查看已放行端口
firewall-cmd --list-all

Ubuntu 20.04示例:

# 安装ufw(一般自带)
apt install ufw -y

# 设置默认规则
ufw default deny incoming
ufw default allow outgoing

# 放行SSH
ufw allow 2222/tcp

# 放行业务端口
ufw allow 8080/tcp

# 启用防火墙
ufw enable

# 查看状态
ufw status verbose
我的经验:防火墙规则别搞太复杂。我见过有人写了50多条规则,结果自己都看不懂。保持简单,每加一条规则都问自己:「这个端口真的需要对外开放吗?」

2.3.2 SELinux设置

SELinux这东西,说白了就是Linux的「内部保安」。它管得特别细,连进程能不能读某个文件都要管。很多运维嫌麻烦直接关了,但我建议你先开着,遇到问题再调

查看SELinux状态:

getenforce
# 输出:Enforcing(强制模式)或 Permissive(宽容模式)或 Disabled(禁用)

临时切换模式:

# 设为宽容模式(只记录不阻止)
setenforce 0

# 恢复强制模式
setenforce 1

永久修改(需要重启):

# 编辑 /etc/selinux/config
SELINUX=enforcing  # 或 permissive 或 disabled
注意:千万别在生产环境直接关SELinux!我有个同事,直接把SELinux设成disabled,结果系统里有个服务因为文件上下文不对,死活起不来。排查了两天才发现是SELinux的问题,但已经关了,只能手动修复文件标签。

如果遇到SELinux阻止服务运行,正确的做法是:

  1. 先看审计日志:ausearch -m avc -ts recent
  2. 根据日志生成策略:audit2allow -a -M mypolicy
  3. 加载策略:semodule -i mypolicy.pp

说白了,SELinux就像个严格的保安,你只要教会它「哪些人是自己人」,它就能帮你挡住很多麻烦。

2.4 本章知识体系

下面这张图,是我梳理的本章核心逻辑。你照着这个思路走,基本不会出大问题:

Linux基础环境搭建核心流程 系统安装 CentOS 7 / Ubuntu 20.04 系统初始化 主机名/时区/DNS/源 SSH远程连接 密钥登录/端口修改 防火墙配置 firewalld / ufw SELinux设置 Enforcing/Permissive 安全加固 最小权限原则 ✅ 可用的基础环境

嗯,到这里,Linux基础环境搭建就告一段落了。你可能会觉得这些配置琐碎,但相信我——基础打得牢,后面才不慌。我见过太多项目,前期图省事跳过这些步骤,结果上线后各种问题冒出来,最后花十倍的时间去补课。

对了,有个细节差点忘了说:所有配置改完后,记得重启一次机器。不是必须的,但我个人习惯这么做——确保所有配置在重启后依然生效。毕竟,服务器不可能永远不重启,对吧?


专注资料整理