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)
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
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
2.3.2 SELinux设置
SELinux这东西,说白了就是Linux的「内部保安」。它管得特别细,连进程能不能读某个文件都要管。很多运维嫌麻烦直接关了,但我建议你先开着,遇到问题再调。
查看SELinux状态:
getenforce
# 输出:Enforcing(强制模式)或 Permissive(宽容模式)或 Disabled(禁用)
临时切换模式:
# 设为宽容模式(只记录不阻止)
setenforce 0
# 恢复强制模式
setenforce 1
永久修改(需要重启):
# 编辑 /etc/selinux/config
SELINUX=enforcing # 或 permissive 或 disabled
如果遇到SELinux阻止服务运行,正确的做法是:
- 先看审计日志:
ausearch -m avc -ts recent - 根据日志生成策略:
audit2allow -a -M mypolicy - 加载策略:
semodule -i mypolicy.pp
说白了,SELinux就像个严格的保安,你只要教会它「哪些人是自己人」,它就能帮你挡住很多麻烦。
2.4 本章知识体系
下面这张图,是我梳理的本章核心逻辑。你照着这个思路走,基本不会出大问题:
嗯,到这里,Linux基础环境搭建就告一段落了。你可能会觉得这些配置琐碎,但相信我——基础打得牢,后面才不慌。我见过太多项目,前期图省事跳过这些步骤,结果上线后各种问题冒出来,最后花十倍的时间去补课。
对了,有个细节差点忘了说:所有配置改完后,记得重启一次机器。不是必须的,但我个人习惯这么做——确保所有配置在重启后依然生效。毕竟,服务器不可能永远不重启,对吧?