CentOS7 安装及初始化配置
大约 12 分钟约 3463 字
CentOS7 安装及初始化配置
简介
CentOS(Community Enterprise Operating System)是基于 Red Hat Enterprise Linux(RHEL)源代码编译而成的社区版企业级 Linux 发行版。CentOS 7 是目前广泛使用的服务器操作系统之一,具有稳定、安全、免费的特点,广泛应用于 Web 服务器、数据库服务器、容器化部署等场景。
本文档介绍 CentOS 7 在 VMware 虚拟机上的安装步骤以及完成后的初始化配置,包括网络配置、主机名设置、时区配置、用户管理、SSH 配置和 yum 源配置等。
特点
安装 VMware 和 Linux 系统
安装 VMware
注意
无法安装 VMware 虚拟机的可能原因:
- 电脑不支持虚拟化或者没有开启虚拟化(需在 BIOS 中开启)
- Windows 10/11 系统默认有 Hyper-V 虚拟机,需要关闭 Windows 自带虚拟机
# 以管理员身份运行 PowerShell 关闭 Hyper-V dism.exe /online /enable-feature /featurename:Microsoft-Hyper-V-All /all /norestart
安装 CentOS 7
注意
注意以太网设置必须开启,否则安装完成后无法联网。
初始化网络配置
安装基础网络工具
# 安装 net-tools,使用 ifconfig 查看IP
sudo yum install -y net-tools
# 查看IP地址
ifconfig配置静态 IP
防止每次重启造成 IP 变动,便于使用 SSH 工具远程连接:
# 查看网卡名称(一般为 ens33 或 ens32)
ifconfig
# 编辑网卡配置文件
vi /etc/sysconfig/network-scripts/ifcfg-ens33重点修改和添加以下配置项:
BOOTPROTO="static" # static 表示静态IP
IPADDR=192.168.38.133 # 配置IP地址,需确保在局域网内未被使用
NETMASK=255.255.255.0 # 子网掩码,参考主机 ipconfig 查看
GATEWAY=192.168.38.2 # 网关地址,参考主机默认网关
DNS1=8.8.8.8 # DNS 服务器,8.8.8.8 为谷歌公共 DNS完整配置文件参考:
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
IPADDR=192.168.38.133
NETMASK=255.255.255.0
GATEWAY=192.168.38.2
DNS1=8.8.8.8
DNS2=114.114.114.114
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="07b0303f-d194-4c92-a6f9-29bf2cbfbd76"
DEVICE="ens33"
ONBOOT="yes"
ZONE=public# 编辑完成后重启网络服务
service network restart
# 或者使用 nmcli 命令
nmcli connection reload
nmcli connection up ens33设置主机名
# 查看当前主机名
hostname
# 设置主机名
hostnamectl set-hostname myserver
# 验证设置结果
hostname
# 配置 hosts 文件(可选)
vi /etc/hosts
# 添加:192.168.38.133 myserver配置时区
# 查看当前时区
timedatectl
# 设置为上海时区(中国标准时间)
timedatectl set-timezone Asia/Shanghai
# 安装并启用 NTP 时间同步
yum install -y chrony
systemctl start chronyd
systemctl enable chronyd
# 验证时间同步
chronyc tracking用户管理
创建新用户
# 创建新用户
useradd myuser
# 设置密码
passwd myuser
# 将用户加入 wheel 组(拥有 sudo 权限)
usermod -aG wheel myuser
# 切换到新用户
su - myuser
# 验证 sudo 权限
sudo whoami用户管理常用命令
# 查看所有用户
cat /etc/passwd
# 删除用户
userdel -r myuser
# 修改用户信息
usermod -aG docker myuser # 将用户加入 docker 组
# 查看 sudo 配置
visudoSSH 配置
SSH 服务管理
# 查看 SSH 服务状态
systemctl status sshd
# 启动 SSH 服务
systemctl start sshd
# 设置开机自启
systemctl enable sshdSSH 安全配置
# 编辑 SSH 配置文件
vi /etc/ssh/sshd_config常用安全配置项:
Port 22 # 修改默认端口(建议改为非标准端口)
PermitRootLogin no # 禁止 root 远程登录
PasswordAuthentication yes # 密码认证(建议配合密钥认证使用)
MaxAuthTries 3 # 最大认证尝试次数
ClientAliveInterval 300 # 客户端存活检测间隔(秒)
ClientAliveCountMax 2 # 最大无响应次数配置 SSH 密钥登录
# 在客户端生成密钥对
ssh-keygen -t rsa -b 4096
# 将公钥上传到服务器
ssh-copy-id -i ~/.ssh/id_rsa.pub myuser@192.168.38.133
# 或者手动复制
# 将公钥内容追加到服务器的 ~/.ssh/authorized_keys 文件中# 修改配置后重启 SSH 服务
systemctl restart sshd防火墙配置
CentOS 7 默认使用 firewalld 作为防火墙:
# 查看防火墙状态
systemctl status firewalld
# 启动防火墙
systemctl start firewalld
# 设置开机自启
systemctl enable firewalld
# 查看已开放的端口
firewall-cmd --list-ports
# 开放指定端口
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=443/tcp --permanent
firewall-cmd --add-port=3306/tcp --permanent
# 重新加载防火墙
firewall-cmd --reload
# 查看所有规则
firewall-cmd --list-all更新 yum 源
更新 yum 源是为了使用国内镜像,加速软件包下载。
# 1. 安装 wget
yum install -y wget
# 2. 备份原始配置文件
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
# 3. 下载阿里云 yum 源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 4. 清理缓存
yum clean all
# 5. 重新生成缓存
yum makecache
# 6. 查看启用的 yum 源
yum repolist enabled
# 7. 更新系统
yum -y update安装 EPEL 源
# 安装 EPEL 扩展仓库
yum install -y epel-release
# 查看所有可用的 yum 源
yum repolist allSELinux 配置
# 查看 SELinux 状态
getenforce
# 临时关闭 SELinux
setenforce 0
# 永久关闭 SELinux(需重启)
vi /etc/selinux/config
# 修改:SELINUX=disabled常用基础软件安装
# 安装常用工具
yum install -y vim git curl wget net-tools lrzsz tree unzip
# 安装开发工具组
yum groupinstall -y "Development Tools"
# 查看已安装的软件包
yum list installed优点
缺点
总结
CentOS7 是企业级 Linux 服务器首选,掌握安装配置、网络设置、安全加固是运维基础。生产环境务必做好防火墙、SELinux、定时更新和监控配置。
系统初始化脚本
一键初始化脚本
#!/bin/bash
# centos7-init.sh — CentOS 7 系统初始化脚本
# 用途:新安装的 CentOS 7 服务器一键初始化
set -e
echo "=== CentOS 7 系统初始化 ==="
# 1. 配置网络(如果未启用)
echo "[1/10] 配置网络..."
if ! nmcli connection show | grep -q "connected"; then
nmcli connection up "System eth0" 2>/dev/null || true
fi
# 2. 配置静态 IP(根据实际环境修改)
echo "[2/10] 配置静态 IP..."
# 备份原有配置
cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens33.bak
cat > /etc/sysconfig/network-scripts/ifcfg-ens33 << 'EOF'
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=223.5.5.5
DNS2=8.8.8.8
EOF
# 3. 设置主机名
echo "[3/10] 设置主机名..."
read -p "请输入主机名: " HOSTNAME
hostnamectl set-hostname "$HOSTNAME"
# 4. 配置 /etc/hosts
echo "[4/10] 配置 hosts..."
cat >> /etc/hosts << EOF
127.0.0.1 $HOSTNAME localhost
EOF
# 5. 配置时区
echo "[5/10] 配置时区..."
timedatectl set-timezone Asia/Shanghai
timedatectl set-ntp yes
# 6. 关闭 SELinux
echo "[6/10] 关闭 SELinux..."
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 7. 关闭防火墙(可选)
echo "[7/10] 配置防火墙..."
systemctl stop firewalld
systemctl disable firewalld
# 8. 配置 yum 源
echo "[8/10] 配置 yum 源..."
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
yum clean all && yum makecache
# 9. 安装常用工具
echo "[9/10] 安装常用工具..."
yum install -y vim wget curl git net-tools lrzsz tree bash-completion \
htop iotop iftop unzip nc nmap telnet sysstat rsync
# 10. 内核参数优化
echo "[10/10] 内核参数优化..."
cat > /etc/sysctl.d/99-system.conf << 'EOF'
# 网络优化
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_max_tw_buckets = 65535
# 文件系统优化
fs.file-max = 65535
fs.inotify.max_user_watches = 524288
# 内存优化
vm.swappiness = 10
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
EOF
sysctl -p /etc/sysctl.d/99-system.conf
# 11. 文件描述符限制
cat >> /etc/security/limits.conf << 'EOF'
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
root soft nofile 65535
root hard nofile 65535
EOF
# 12. SSH 安全加固
echo "=== SSH 安全加固 ==="
sed -i 's/#PermitRootLogin yes/PermitRootLogin prohibit-password/' /etc/ssh/sshd_config
sed -i 's/#MaxAuthTries 6/MaxAuthTries 3/' /etc/ssh/sshd_config
sed -i 's/#Port 22/Port 22/' /etc/ssh/sshd_config
systemctl restart sshd
echo "=== 初始化完成 ==="
echo "建议重启系统: reboot"安全加固检查清单
#!/bin/bash
# security-check.sh — CentOS 7 安全检查脚本
echo "=== CentOS 7 安全检查 ==="
# 检查 SELinux 状态
SELINUX=$(getenforce 2>/dev/null || echo "disabled")
echo "SELinux: $SELINUX"
# 检查防火墙状态
FIREWALL=$(systemctl is-active firewalld 2>/dev/null || echo "inactive")
echo "防火墙: $FIREWALL"
# 检查空密码用户
EMPTY_PASS=$(awk -F: '($2 == "" || $2 == "!") {print $1}' /etc/shadow)
if [ -n "$EMPTY_PASS" ]; then
echo "警告:存在空密码用户: $EMPTY_PASS"
else
echo "空密码用户: 无"
fi
# 检查可远程登录的用户
REMOTE_USERS=$(awk -F: '$7 !~ /(nologin|false|sync|shutdown|halt)/ && $3 >= 1000 {print $1}' /etc/passwd)
echo "可远程登录用户: $REMOTE_USERS"
# 检查 SUID 文件
echo "SUID 文件数量: $(find / -perm -4000 -type f 2>/dev/null | wc -l)"
# 检查开放端口
echo "监听端口:"
ss -tlnp | awk 'NR>1 {print $4, $6}'
# 检查定时任务
echo "root 定时任务:"
crontab -l 2>/dev/null || echo "无"
# 检查内核版本
echo "内核版本: $(uname -r)"
# 检查已安装的安全更新
echo "待安装的安全更新: $(yum check-update --security 2>/dev/null | wc -l)"系统监控脚本
#!/bin/bash
# system-monitor.sh — CentOS 7 系统监控脚本
echo "=== 系统监控报告 $(date) ==="
# CPU 信息
echo "--- CPU ---"
echo "负载: $(uptime | awk -F'load average:' '{print $2}')"
echo "CPU 使用率: $(top -bn1 | grep 'Cpu(s)' | awk '{print $2}' | awk -F'%' '{print $1}')%"
# 内存信息
echo "--- 内存 ---"
free -h | head -2
# 磁盘信息
echo "--- 磁盘 ---"
df -h | grep -v tmpfs | grep -v overlay
# 网络流量
echo "--- 网络 ---"
cat /proc/net/dev | tail -n +3 | awk '{printf "%-10s 接收: %s 字节 发送: %s 字节\n", $1, $2, $10}'
# Top 10 进程
echo "--- CPU Top 10 ---"
ps aux --sort=-%cpu | head -11
echo "--- 内存 Top 10 ---"
ps aux --sort=-%mem | head -11
# 登录用户
echo "--- 登录用户 ---"
who
# 系统运行时间
echo "--- 运行时间 ---"
uptime常用初始化命令速查
# 查看系统版本
cat /etc/redhat-release
cat /etc/os-release
hostnamectl
# 查看内核版本
uname -r
uname -a
# 查看硬件信息
lscpu # CPU 信息
free -h # 内存信息
lsblk # 磁盘信息
lspci # PCI 设备
lsusb # USB 设备
dmidecode -t system # 系统制造商信息
# 时间相关
date # 查看当前时间
timedatectl # 查看时区配置
timedatectl set-timezone Asia/Shanghai
hwclock --hctosys # 硬件时间同步到系统时间
# 服务管理
systemctl list-unit-files --type=service | grep enabled # 查看已启用的服务
systemctl list-units --type=service --state=running # 查看正在运行的服务
# 查看系统运行时间
uptime
cat /proc/uptime | awk '{printf "运行时间: %.2f 天\n", $1/86400}'
# 查看系统启动日志
journalctl -b # 本次启动日志
journalctl -b -1 # 上次启动日志
journalctl --since today关键知识点
- 部署类主题的核心不是“装成功”,而是“稳定运行、可排障、可回滚”。
- 同一个服务通常至少要关注版本、目录、端口、权限、数据、日志和备份。
- Linux 问题经常跨越系统层、网络层、服务层和应用层。
项目落地视角
- 把安装步骤补成可重复执行的清单,必要时写成脚本或配置文件。
- 把配置目录、数据目录、日志目录和挂载点明确拆开。
- 上线前检查防火墙、SELinux、时区、磁盘、系统服务和健康检查。
常见误区
- 使用 latest 或未固定版本,导致环境不可复现。
- 只验证启动成功,不验证持久化、开机自启和故障恢复。
- 遇到问题先改配置而不是先看日志和依赖链路。
进阶路线
- 继续补齐 systemd、性能监控、安全加固和备份恢复。
- 把单机操作升级成 Docker、Kubernetes 或 IaC 方案。
- 建立标准化运维手册,包括巡检、扩容、回滚和灾备演练。
适用场景
- 当你准备把《CentOS7 安装及初始化配置》真正落到项目里时,最适合先在一个独立模块或最小样例里验证关键路径。
- 适合单机环境初始化、中间件快速搭建、测试环境验证和生产部署前准备。
- 当服务稳定性依赖端口、权限、目录、网络和系统参数时,这类主题会直接影响成败。
落地建议
- 固定版本号与镜像标签,避免“latest”带来的不可预期变化。
- 把配置、数据、日志目录拆开管理,并记录恢复步骤。
- 上线前确认端口、防火墙、SELinux、时区和磁盘空间。
排错清单
- 先查 systemctl、容器日志和应用日志,确认失败发生在哪一层。
- 检查端口占用、目录权限、挂载路径和网络连通性。
- 如果是新环境问题,优先对比与已知正常环境的差异。
复盘问题
- 如果把《CentOS7 安装及初始化配置》放进你的当前项目,最先要验证的输入、输出和失败路径分别是什么?
- 《CentOS7 安装及初始化配置》最容易在什么规模、什么边界条件下暴露问题?你会用什么指标或日志去确认?
- 相比默认实现或替代方案,采用《CentOS7 安装及初始化配置》最大的收益和代价分别是什么?
