一、CentOS概述
CentOS(Community Enterprise Operating System)是基于Red Hat Enterprise Linux (RHEL) 源代码构建的开源操作系统,提供稳定、安全的服务器平台。
1.1 CentOS 7 vs CentOS 8
| 特性 | CentOS 7 | CentOS 8 |
|---|---|---|
| 发布日期 | 2014年 | 2019年 |
| 内核版本 | 3.10.x | 4.18.x |
| 包管理 | YUM + RPM | DNF + RPM |
| 默认防火墙 | firewalld | firewalld |
| 网络管理 | NetworkManager | NetworkManager + nmcli |
1.2 系统要求
# 最低系统要求
处理器: 1 GHz 以上
内存: 1 GB 以上
存储: 10 GB 以上
网络: 网络接口
# 推荐系统要求
处理器: 2 GHz 以上多核
内存: 4 GB 以上
存储: 20 GB 以上
网络: 1 Gbps 网卡
二、安装与初始化
2.1 安装步骤
1. 下载CentOS ISO镜像
- CentOS 7: https://www.centos.org/download/
- CentOS 8: https://www.centos.org/download/
2. 创建启动U盘或挂载ISO
3. 启动服务器,从安装介质引导
4. 选择安装语言
5. 配置安装目标
6. 配置网络和fgedu.net.cn
7. 设置根密码
8. 创建用户
9. 开始安装
10. 重启系统
11. 首次启动配置
2.2 初始化配置
# 配置fgedu.net.cn
hostnamectl set-hostname server01
# 配置网络
# CentOS 7
nmcli con add con-name eth0 ifname eth0 type ethernet ip4 192.168.1.100/24 gw4 192.168.1.1
nmcli con mod eth0 ipv4.dns "8.8.8.8 8.8.4.4"
mncli con up eth0
# CentOS 8
nmcli connection add type ethernet con-name eth0 ifname eth0 ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns "8.8.8.8,8.8.4.4" ipv4.method manual
nmcli connection up eth0
# 配置YUM/DNF源
# 备份默认源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# 配置国内源
# CentOS 7
touch /etc/yum.repos.d/CentOS-Base.repo
cat > /etc/yum.repos.d/CentOS-Base.repo << 'EOF'
[base]
name=CentOS-$releasever - Base
baseurl=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
[updates]
name=CentOS-$releasever - Updates
baseurl=https://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
[extras]
name=CentOS-$releasever - Extras
baseurl=https://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
EOF
# 清理缓存
yum clean all
yum makecache
# 安装常用工具
yum install -y vim wget curl net-tools bash-completion
三、系统管理
3.1 用户与权限管理
# 用户管理
# 创建用户
useradd -m -s /bin/bash user1
# 设置密码
passwd user1
# 修改用户
usermod -c "Test User" -d /home/user1 -s /bin/bash user1
# 删除用户
userdel -r user1
# 组管理
# 创建组
groupadd group1
# 添加用户到组
usermod -aG group1 user1
# 查看用户所属组
groups user1
# 权限管理
# 查看文件权限
ls -l file.txt
# 修改权限
chmod 755 file.txt
chmod u+x file.txt
# 修改所有者
chown user1:group1 file.txt
# 特殊权限
chmod u+s /usr/bin/passwd # SUID
chmod g+s /var/www/html # SGID
chmod o+t /tmp # Sticky Bit
# sudo配置
visudo
# 添加:user1 ALL=(ALL) NOPASSWD: ALL
# 查看sudo权限
sudo -l -U user1
3.2 服务管理
# 查看服务状态
systemctl status sshd
# 启动服务
systemctl start sshd
# 停止服务
systemctl stop sshd
# 重启服务
systemctl restart sshd
# 启用服务(开机自启)
systemctl enable sshd
# 禁用服务
systemctl disable sshd
# 查看服务依赖
systemctl list-dependencies sshd
# 查看启动级别
systemctl get-default
# 设置启动级别
systemctl set-default multi-user.target # 命令行模式
systemctl set-default graphical.target # 图形界面模式
# 查看所有服务
systemctl list-units --type=service
systemctl list-units --type=service --state=running
# 服务日志
journalctl -u sshd
journalctl -u sshd -f # 实时查看
# 系统状态
systemctl status
systemctl is-active sshd
systemctl is-enabled sshd
3.3 系统监控
# 系统信息
uname -a
cat /etc/centos-release
# 硬件信息
lscpu
free -h
df -h
lsblk
# 进程管理
ps aux
ps aux | grep sshd
pgrep sshd
pkill sshd
# 性能监控
top
htop # 需要安装
top -c # 显示完整命令
# 内存监控
free -h
vmstat 1
# 磁盘监控
iostat 1
df -h
du -sh /var/*
# 网络监控
netstat -tuln
ss -tuln
ifconfig
ip addr
# 负载监控
uptime
w
# 系统日志
journalctl
tail -f /var/log/messages
tail -f /var/log/secure
# 监控工具
# 安装监控工具
yum install -y htop iotop nethogs
# 使用iotop
iotop
# 使用nethogs
nethogs
四、存储管理
4.1 磁盘管理
# 查看磁盘
lsblk
fdisk -l
# 分区
fdisk /dev/sdb
# 命令:n(新建)-> p(主分区)-> 分区号 -> 起始扇区 -> 结束扇区 -> w(保存)
# 格式化
mkfs.ext4 /dev/sdb1
mkfs.xfs /dev/sdb2
# 挂载
mkdir /data
mount /dev/sdb1 /data
# 自动挂载
# 编辑/etc/fstab
cat >> /etc/fstab << 'EOF'
/dev/sdb1 /data ext4 defaults 0 0
EOF
# 查看挂载
mount
# 卸载
umount /data
# 调整分区
extend filesystem
# 先扩展分区,再扩展文件系统
resize2fs /dev/sdb1 # ext4
xfs_growfs /data # xfs
# 交换分区
# 创建交换文件
dd if=/dev/zero of=/swapfile bs=1G count=4
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
# 自动挂载
cat >> /etc/fstab << 'EOF'
/swapfile swap swap defaults 0 0
EOF
# 查看交换空间
free -h
swapon -s
4.2 LVM管理
# 安装LVM
yum install -y lvm2
# 查看物理卷
pvscan
pvs
# 创建物理卷
pvcreate /dev/sdb /dev/sdc
# 查看卷组
vgscan
vgs
# 创建卷组
vgcreate vg_data /dev/sdb /dev/sdc
# 扩展卷组
vgextend vg_data /dev/sdd
# 查看逻辑卷
lvscan
lvs
# 创建逻辑卷
lvcreate -n lv_data -L 100G vg_data
lvcreate -n lv_log -l 100%FREE vg_data
# 格式化逻辑卷
mkfs.ext4 /dev/vg_data/lv_data
# 挂载
mkdir /data
mount /dev/vg_data/lv_data /data
# 自动挂载
cat >> /etc/fstab << 'EOF'
/dev/vg_data/lv_data /data ext4 defaults 0 0
EOF
# 扩展逻辑卷
lvextend -L +50G /dev/vg_data/lv_data
resize2fs /dev/vg_data/lv_data
# 减少逻辑卷
umount /data
resize2fs /dev/vg_data/lv_data 50G
lvreduce -L 50G /dev/vg_data/lv_data
mount /dev/vg_data/lv_data /data
# 删除逻辑卷
umount /data
lvremove /dev/vg_data/lv_data
vgremove vg_data
pvremove /dev/sdb /dev/sdc
五、网络管理
5.1 网络配置
# 查看网络接口
ip addr
ifconfig
# 查看路由
ip route
route -n
# 查看DNS配置
cat /etc/resolv.conf
# 临时配置IP
ifconfig eth0 192.168.1.100 netmask 255.255.255.0
ipt route add default via 192.168.1.1
# 永久配置(CentOS 7/8)
# 使用nmcli
nmcli connection show
nmcli connection modify eth0 ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns "8.8.8.8,8.8.4.4" ipv4.method manual
nmcli connection up eth0
# 配置文件方式
# /etc/sysconfig/network-scripts/ifcfg-eth0
cat > /etc/sysconfig/network-scripts/ifcfg-eth0 << 'EOF'
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
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=eth0
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.1.100
PREFIX=24
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4
EOF
# 重启网络
# CentOS 7
systemctl restart network
# CentOS 8
nmcli connection reload
nmcli connection up eth0
# 测试网络
ping 192.168.1.1
ping 8.8.8.8
nslookup google.com
5.2 防火墙配置
# 查看防火墙状态
systemctl status firewalld
# 启动防火墙
systemctl start firewalld
# 启用防火墙
systemctl enable firewalld
# 查看规则
firewall-cmd --list-all
# 开放端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=22/tcp --permanent
# 开放服务
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --zone=public --add-service=ssh --permanent
# 重新加载规则
firewall-cmd --reload
# 查看已开放端口
firewall-cmd --list-ports
# 查看已开放服务
firewall-cmd --list-services
# 端口转发
firewall-cmd --zone=public --add-forward-port=port=8080:proto=tcp:toport=80 --permanent
# 禁用防火墙(不推荐)
systemctl stop firewalld
systemctl disable firewalld
# iptables配置(备用)
yum install -y iptables-services
systemctl start iptables
systemctl enable iptables
# 查看iptables规则
iptables -L -n
# 保存规则
iptables-save > /etc/sysconfig/iptables
六、软件管理
6.1 包管理
# CentOS 7 (YUM)
# 安装软件
yum install -y nginx
# 卸载软件
yum remove -y nginx
# 更新软件
yum update -y nginx
# 查看已安装
yum list installed | grep nginx
# 搜索软件
yum search nginx
# 查看软件信息
yum info nginx
# 清理缓存
yum clean all
yum makecache
# CentOS 8 (DNF)
# 安装软件
dnf install -y nginx
# 卸载软件
dnf remove -y nginx
# 更新软件
dnf update -y nginx
# 查看已安装
dnf list installed | grep nginx
# 搜索软件
dnf search nginx
# 查看软件信息
dnf info nginx
# 清理缓存
dnf clean all
dnf makecache
# RPM命令
# 安装RPM包
rpm -ivh package.rpm
# 卸载RPM包
rpm -e package
# 查看已安装RPM包
rpm -qa | grep package
# 查看RPM包信息
rpm -qi package
6.2 源码编译
# 安装编译工具
yum groupinstall -y "Development Tools"
yum install -y gcc gcc-c++ make cmake
# 下载源码
wget https://fgedu.net.cn/package.tar.gz
# 解压
tar -xzf package.tar.gz
cd package
# 配置
./configure --prefix=/usr/local/package
# 编译
make
# 安装
make install
# 配置环境变量
echo 'export PATH=/usr/local/package/bin:$PATH' > /etc/profile.d/package.sh
source /etc/profile.d/package.sh
# 验证
package --version
七、系统安全
7.1 安全配置
# 系统更新
yum update -y
# 密码策略
# 编辑/etc/login.defs
cat > /etc/login.defs << 'EOF'
PASS_MAX_DAYS 90
PASS_MIN_DAYS 7
PASS_MIN_LEN 8
PASS_WARN_AGE 7
EOF
# 密码复杂度
# 安装pam_cracklib
yum install -y pam_cracklib
# 编辑/etc/pam.d/system-auth
cat >> /etc/pam.d/system-auth << 'EOF'
password required pam_cracklib.so try_first_pass retry=3 minlen=8 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1
EOF
# SSH安全配置
# 编辑/etc/ssh/sshd_config
cat > /etc/ssh/sshd_config << 'EOF'
Port 22
PermitRootLogin no
MaxAuthTries 3
MaxSessions 10
PasswordAuthentication yes
ChallengeResponseAuthentication no
UsePAM yes
X11Forwarding no
PrintMotd no
ClientAliveInterval 300
ClientAliveCountMax 3
EOF
# 重启SSH服务
systemctl restart sshd
# 限制sudo权限
visudo
# 配置:user1 ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
# SELinux配置
# 查看SELinux状态
getenforce
# 临时关闭
setenforce 0
# 永久关闭(不推荐)
# 编辑/etc/selinux/config
# SELINUX=disabled
# SELinux上下文
ls -Z /var/www/html
chcon -R -t httpd_sys_content_t /var/www/html
# 查看SELinux日志
tail -f /var/log/audit/audit.log
# 生成SELinux规则
audit2allow -a
7.2 日志管理
# 系统日志
/var/log/messages # 系统消息
/var/log/secure # 安全相关
/var/log/maillog # 邮件日志
/var/log/cron # 定时任务
# 应用日志
/var/log/httpd/ # Apache日志
/var/log/nginx/ # Nginx日志
/var/log/mysql/ # MySQL日志
# 日志轮转
# 查看日志轮转配置
cat /etc/logrotate.conf
# 查看应用日志轮转
ls /etc/logrotate.d/
# 手动执行日志轮转
logrotate -f /etc/logrotate.conf
# journalctl
# 查看所有日志
journalctl
# 查看指定服务日志
journalctl -u sshd
# 实时查看
journalctl -f
# 查看指定时间范围
journalctl --since "2024-01-01" --until "2024-01-02"
# 查看错误
journalctl -p err..emerg
# 清理journal日志
journalctl --vacuum-time=7d
journalctl --vacuum-size=500M
八、故障排除
8.1 常见问题
# 启动问题
# 进入单用户模式
# 重启系统,按e编辑启动项
# 将ro改为rw init=/sysroot/bin/sh
# 进入系统
chroot /sysroot
# 文件系统损坏
e2fsck -y /dev/sda1
# 网络问题
# 检查网络服务
systemctl status NetworkManager
systemctl status firewalld
# 检查网络配置
ip addr
ip route
cat /etc/resolv.conf
# 测试网络连接
ping 127.0.0.1
ping 192.168.1.1
ping 8.8.8.8
# 服务启动失败
# 查看服务状态
systemctl status service
# 查看服务日志
journalctl -u service
# 检查配置文件
syntax check commands
# 磁盘空间不足
df -h
# 查找大文件
du -sh /var/*
find / -type f -size +100M
# 内存不足
free -h
# 查看内存使用进程
ps aux | sort -nrk 4 | head -10
# 进程占用CPU过高
top
# 查找占用CPU的进程
ps aux | sort -nrk 3 | head -10
# 系统负载过高
uptime
# 查看负载来源
top
iotop
# 系统无法启动
# 使用救援模式
# 从安装介质引导,选择Troubleshooting -> Rescue a CentOS system
# 重置root密码
# 进入单用户模式
passwd root
# 修复GRUB
grub2-install /dev/sda
grub2-mkconfig -o /boot/grub2/grub.cfg
8.2 系统备份
# 备份系统
tar -czf /backup/system-$(date +%Y%m%d).tar.gz / --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/backup
# 备份配置文件
tar -czf /backup/config-$(date +%Y%m%d).tar.gz /etc
# 备份数据
tar -czf /backup/data-$(date +%Y%m%d).tar.gz /home /var/www /var/lib/mysql
# 使用rsync备份
rsync -avz /home/ user@remote:/backup/home/
# 定时备份
# 编辑crontab
crontab -e
# 添加备份任务
0 2 * * * tar -czf /backup/system-$(date +\%Y\%m\%d).tar.gz / --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/backup
# 查看crontab
crontab -l
# 测试备份恢复
tar -xzf /backup/system-20240101.tar.gz -C /mnt
九、最佳实践
| 配置项 | 建议值 | 说明 |
|---|---|---|
| 系统更新 | 定期更新 | 修复安全漏洞 |
| 防火墙 | 启用并配置 | 限制网络访问 |
| 密码策略 | 强密码策略 | 提高安全性 |
| 备份 | 定期备份 | 数据安全 |
| 监控 | 启用监控 | 及时发现问题 |
| 权限 | 最小权限原则 | 减少安全风险 |
注意事项:
- 定期更新系统和软件
- 配置合理的防火墙规则
- 使用强密码策略
- 定期备份重要数据
- 监控系统性能和状态
- 遵循最小权限原则
十、总结
CentOS 7/8是企业级Linux服务器的首选操作系统。通过本培训文档,您应该掌握了:
风哥风哥提示:
- CentOS安装与初始化配置
- 用户与权限管理
- 服务管理与监控
- 存储管理与LVM配置
- 网络配置与防火墙管理
- 软件包管理与源码编译
- 系统安全与日志管理
- 故障排除与系统备份
IT运维培训文档系列 | 第82篇 | CentOS 7/8系统管理培训
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
