|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
引言
AlmaLinux作为CentOS的替代品之一,已经成为企业级Linux服务器的重要选择。它是一个开源的、社区驱动的Linux发行版,完全兼容RHEL(Red Hat Enterprise Linux),提供了稳定、安全和高性能的操作环境。本教程将带您从AlmaLinux的基础配置开始,逐步深入到系统优化和安全设置,帮助您掌握企业级Linux管理技能,提升工作效率。
1. AlmaLinux基础:安装和初始配置
1.1 安装AlmaLinux
AlmaLinux的安装过程直观且用户友好。您可以从官方网站下载ISO镜像,然后使用以下方法之一进行安装:
• USB启动盘:使用dd命令或Rufus等工具创建启动USB
• 网络安装:通过PXE服务器进行网络安装
• 虚拟化平台:在VMware、VirtualBox或KVM中安装
以下是使用dd命令创建启动USB的示例:
- # 检查USB设备名称(假设为/dev/sdb)
- lsblk
- # 卸载设备(如果已挂载)
- umount /dev/sdb*
- # 使用dd命令写入ISO镜像
- dd if=AlmaLinux-9.0-x86_64-dvd.iso of=/dev/sdb bs=4M status=progress
- # 同步写入
- sync
复制代码
1.2 初始系统配置
安装完成后,需要进行一些基本配置:
- # 更新系统
- sudo dnf update -y
- # 安装常用工具
- sudo dnf install -y vim git curl wget net-tools
- # 配置主机名
- sudo hostnamectl set-hostname almalinux-server
- # 检查主机名配置
- hostnamectl status
复制代码
1.3 网络配置
AlmaLinux使用NetworkManager进行网络管理:
- # 查看网络连接
- nmcli connection show
- # 配置静态IP(假设连接名称为ens33)
- sudo nmcli connection modify ens33 ipv4.addresses 192.168.1.100/24
- sudo nmcli connection modify ens33 ipv4.gateway 192.168.1.1
- sudo nmcli connection modify ens33 ipv4.dns "8.8.8.8 8.8.4.4"
- sudo nmcli connection modify ens33 ipv4.method manual
- # 重启网络连接
- sudo nmcli connection down ens33 && sudo nmcli connection up ens33
- # 验证网络配置
- ip addr show
- ping -c 4 google.com
复制代码
1.4 添加用户和权限管理
- # 创建新用户
- sudo useradd -m -s /bin/bash adminuser
- # 设置密码
- sudo passwd adminuser
- # 将用户添加到wheel组(sudo权限)
- sudo usermod -aG wheel adminuser
- # 验证sudo权限
- su - adminuser
- sudo whoami
复制代码
2. 系统优化:性能调优、资源管理
2.1 内核参数调优
通过修改/etc/sysctl.conf文件可以优化内核参数:
- # 编辑sysctl配置文件
- sudo vim /etc/sysctl.conf
- # 添加以下参数
- # 网络优化
- net.core.rmem_max = 16777216
- net.core.wmem_max = 16777216
- net.ipv4.tcp_rmem = 4096 87380 16777216
- net.ipv4.tcp_wmem = 4096 65536 16777216
- net.ipv4.tcp_congestion_control = bbr
- net.core.default_qdisc = fq
- # 文件系统优化
- fs.file-max = 100000
- fs.inotify.max_user_watches = 100000
- # 应用配置
- sudo sysctl -p
复制代码
2.2 文件系统优化
选择合适的文件系统并优化其参数:
- # 安装XFS文件系统工具(如果使用XFS)
- sudo dnf install -y xfsprogs
- # 格式化分区为XFS(假设为/dev/sdb1)
- sudo mkfs.xfs /dev/sdb1
- # 创建挂载点并挂载
- sudo mkdir -p /data
- sudo mount /dev/sdb1 /data
- # 添加到/etc/fstab实现永久挂载
- echo "/dev/sdb1 /data xfs defaults 0 0" | sudo tee -a /etc/fstab
- # 优化挂载选项(在/etc/fstab中)
- /dev/sdb1 /data xfs defaults,noatime,nodiratime,largeio,inode64,swalloc 0 0
复制代码
2.3 内存管理优化
- # 创建交换文件(如果没有交换分区)
- sudo fallocate -l 2G /swapfile
- sudo chmod 600 /swapfile
- sudo mkswap /swapfile
- sudo swapon /swapfile
- echo "/swapfile none swap sw 0 0" | sudo tee -a /etc/fstab
- # 调整swappiness值(0-100,推荐10)
- echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
- sudo sysctl -p
- # 检查内存使用情况
- free -h
- cat /proc/meminfo
复制代码
2.4 CPU性能调优
- # 安装cpufreq工具
- sudo dnf install -y cpupowerutils
- # 查看当前CPU频率策略
- sudo cpupower frequency-info
- # 设置性能模式(高性能)
- sudo cpupower frequency-set -g performance
- # 或者设置ondemand模式(平衡性能和功耗)
- sudo cpupower frequency-set -g ondemand
- # 安装tuned工具进行系统级调优
- sudo dnf install -y tuned
- # 启动并启用tuned服务
- sudo systemctl enable --now tuned
- # 查看可用配置文件
- sudo tuned-adm list
- # 应用性能优化配置
- sudo tuned-adm profile throughput-performance
复制代码
2.5 磁盘I/O优化
- # 检查磁盘I/O调度器
- cat /sys/block/sda/queue/scheduler
- # 临时更改调度器为deadline(适合数据库服务器)
- echo deadline | sudo tee /sys/block/sda/queue/scheduler
- # 永久更改(通过GRUB配置)
- sudo vim /etc/default/grub
- # 在GRUB_CMDLINE_LINUX行添加"elevator=deadline"
- # 例如:GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/almalinux-swap rhgb quiet elevator=deadline"
- # 更新GRUB配置
- sudo grub2-mkconfig -o /boot/grub2/grub.cfg
- # 使用ionice设置进程I/O优先级
- ionice -c 1 -n 0 -p $PID # 最高优先级
- ionice -c 3 -p $PID # 最低优先级
复制代码
3. 安全设置:防火墙、SELinux、访问控制
3.1 防火墙配置
AlmaLinux使用firewalld作为默认防火墙:
- # 安装并启用firewalld
- sudo dnf install -y firewalld
- sudo systemctl enable --now firewalld
- # 检查防火墙状态
- sudo firewall-cmd --state
- # 查看默认区域和活动区域
- sudo firewall-cmd --get-default-zone
- sudo firewall-cmd --get-active-zones
- # 开放端口(例如HTTP和HTTPS)
- sudo firewall-cmd --permanent --add-service=http
- sudo firewall-cmd --permanent --add-service=https
- # 或者指定端口
- sudo firewall-cmd --permanent --add-port=8080/tcp
- # 重新加载防火墙配置
- sudo firewall-cmd --reload
- # 查看开放的端口和服务
- sudo firewall-cmd --list-all
- # 限制特定IP访问
- sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept'
- sudo firewall-cmd --reload
复制代码
3.2 SELinux配置
SELinux是Linux系统的重要安全组件:
- # 检查SELinux状态
- sestatus
- # 临时设置SELinux为 enforcing 模式
- sudo setenforce 1
- # 永久设置SELinux模式
- sudo vim /etc/selinux/config
- # 修改 SELINUX=enforcing
- # 查看文件和进程的SELinux上下文
- ls -Z
- ps -eZ
- # 修改文件的安全上下文
- sudo chcon -t httpd_sys_content_t /var/www/html/index.html
- # 恢复默认安全上下文
- sudo restorecon -Rv /var/www/html
- # 查看SELinux布尔值
- getsebool -a
- # 设置SELinux布尔值(例如允许HTTP连接网络)
- sudo setsebool -P httpd_can_network_connect on
- # 查看SELinux日志(如果被拒绝)
- sudo ausearch -m AVC -ts recent
复制代码
3.3 SSH安全配置
- # 备份SSH配置文件
- sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
- # 编辑SSH配置
- sudo vim /etc/ssh/sshd_config
- # 修改以下参数以提高安全性
- Port 2222 # 更改默认端口
- PermitRootLogin no # 禁止root登录
- PasswordAuthentication no # 禁用密码认证,仅允许密钥认证
- PubkeyAuthentication yes # 启用密钥认证
- PermitEmptyPasswords no # 禁止空密码
- X11Forwarding no # 禁用X11转发
- MaxAuthTries 3 # 最大尝试次数
- AllowUsers adminuser # 允许特定用户登录
- # 重启SSH服务
- sudo systemctl restart sshd
- # 为用户生成SSH密钥(在客户端)
- ssh-keygen -t rsa -b 4096
- # 将公钥复制到服务器
- ssh-copy-id -i ~/.ssh/id_rsa.pub adminuser@server -p 2222
复制代码
3.4 系统访问控制
- # 配置PAM(可插拔认证模块)
- sudo vim /etc/pam.d/system-auth
- # 添加密码强度策略(在password sufficient行之前)
- password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
- password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
- # 配置密码策略
- sudo vim /etc/security/pwquality.conf
- # 修改以下参数
- minlen = 12
- minclass = 3
- maxrepeat = 3
- dcredit = -1
- ucredit = -1
- lcredit = -1
- ocredit = -1
- # 配置登录失败锁定
- sudo vim /etc/pam.d/system-auth
- # 在auth部分添加
- auth required pam_tally2.so deny=5 unlock_time=300 onerr=fail silent
- # 查看失败登录尝试
- sudo pam_tally2 --user=adminuser
- # 解锁用户账户
- sudo pam_tally2 --user=adminuser --reset
复制代码
3.5 系统审计与日志
- # 安装和配置auditd
- sudo dnf install -y audit
- sudo systemctl enable --now auditd
- # 配置审计规则
- sudo vim /etc/audit/rules.d/audit.rules
- # 添加以下规则
- -w /etc/passwd -p wa -k identity
- -w /etc/shadow -p wa -k identity
- -w /etc/sudoers -p wa -k identity
- -w /etc/ssh/sshd_config -p wa -k ssh_config
- -a always,exit -F arch=b64 -S execve -k process_creation
- # 重新加载审计规则
- sudo augenrules --load
- # 查看审计日志
- sudo ausearch -k identity
- sudo ausearch -k process_creation
- # 配置日志轮转
- sudo vim /etc/logrotate.conf
- # 修改保留周期
- rotate 52
- weekly
- compress
- delaycompress
复制代码
4. 网络配置:高级网络设置、服务管理
4.1 高级网络配置
- # 配置网络绑定(Bonding)
- # 安装绑定工具
- sudo dnf install -y teamd
- # 创建绑定接口配置
- sudo vim /etc/sysconfig/network-scripts/ifcfg-bond0
- DEVICE=bond0
- NAME=bond0
- TYPE=Bond
- BONDING_MASTER=yes
- IPADDR=192.168.1.100
- PREFIX=24
- GATEWAY=192.168.1.1
- DNS1=8.8.8.8
- ONBOOT=yes
- BOOTPROTO=none
- BONDING_OPTS="mode=4 miimon=100"
- # 配置从接口
- sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
- DEVICE=ens33
- NAME=ens33
- TYPE=Ethernet
- ONBOOT=yes
- BOOTPROTO=none
- MASTER=bond0
- SLAVE=yes
- sudo vim /etc/sysconfig/network-scripts/ifcfg-ens34
- DEVICE=ens34
- NAME=ens34
- TYPE=Ethernet
- ONBOOT=yes
- BOOTPROTO=none
- MASTER=bond0
- SLAVE=yes
- # 重启网络服务
- sudo systemctl restart NetworkManager
- # 验证绑定状态
- cat /proc/net/bonding/bond0
- # 配置VLAN接口
- sudo vim /etc/sysconfig/network-scripts/ifcfg-bond0.100
- DEVICE=bond0.100
- NAME=bond0.100
- VLAN=yes
- IPADDR=10.0.0.100
- PREFIX=24
- ONBOOT=yes
- # 重启网络服务
- sudo systemctl restart NetworkManager
- # 验证VLAN接口
- ip addr show bond0.100
复制代码
4.2 网络服务优化
- # 优化TCP/IP栈参数
- sudo vim /etc/sysctl.conf
- # 添加以下参数
- net.ipv4.tcp_tw_reuse = 1
- net.ipv4.tcp_fin_timeout = 10
- net.ipv4.tcp_keepalive_time = 1200
- net.ipv4.tcp_max_syn_backlog = 8192
- net.ipv4.tcp_max_tw_buckets = 5000
- net.ipv4.tcp_rfc1337 = 1
- net.ipv4.ip_local_port_range = 1024 65000
- # 应用配置
- sudo sysctl -p
- # 配置网络服务(以Nginx为例)
- # 安装Nginx
- sudo dnf install -y nginx
- # 优化Nginx配置
- sudo vim /etc/nginx/nginx.conf
- # 修改worker进程数和连接数
- worker_processes auto;
- worker_rlimit_nofile 100000;
- events {
- worker_connections 4000;
- use epoll;
- multi_accept on;
- }
- # 配置HTTP参数
- http {
- sendfile on;
- tcp_nopush on;
- tcp_nodelay on;
- keepalive_timeout 30;
- keepalive_requests 100000;
- reset_timedout_connection on;
- client_body_timeout 10;
- send_timeout 2;
-
- # 启用gzip压缩
- gzip on;
- gzip_vary on;
- gzip_proxied any;
- gzip_comp_level 6;
- gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
- }
- # 启动并启用Nginx
- sudo systemctl enable --now nginx
复制代码
4.3 网络安全配置
- # 配置fail2ban防止暴力破解
- sudo dnf install -y epel-release
- sudo dnf install -y fail2ban
- # 创建fail2ban配置
- sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
- # 编辑配置
- sudo vim /etc/fail2ban/jail.local
- # 修改SSH保护设置
- [sshd]
- enabled = true
- port = 2222
- filter = sshd
- logpath = /var/log/secure
- maxretry = 3
- bantime = 3600
- findtime = 600
- # 启动并启用fail2ban
- sudo systemctl enable --now fail2ban
- # 查看被禁止的IP
- sudo fail2ban-client status sshd
- # 配置iptables防火墙(替代firewalld)
- # 安装iptables服务
- sudo dnf install -y iptables-services
- # 停止firewalld并禁用
- sudo systemctl stop firewalld
- sudo systemctl disable firewalld
- # 启用iptables
- sudo systemctl enable --now iptables
- # 配置iptables规则
- sudo vim /etc/sysconfig/iptables
- # 添加以下规则
- *filter
- :INPUT DROP [0:0]
- :FORWARD DROP [0:0]
- :OUTPUT ACCEPT [0:0]
- -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
- -A INPUT -i lo -j ACCEPT
- -A INPUT -p icmp -j ACCEPT
- -A INPUT -p tcp -m state --state NEW -m tcp --dport 2222 -j ACCEPT
- -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
- -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
- COMMIT
- # 重启iptables服务
- sudo systemctl restart iptables
- # 保存规则
- sudo service iptables save
复制代码
5. 存储管理:磁盘分区、LVM、文件系统优化
5.1 高级磁盘分区
- # 使用parted进行GPT分区
- sudo dnf install -y parted
- # 对新磁盘进行分区(假设为/dev/sdc)
- sudo parted /dev/sdc mklabel gpt
- sudo parted -a opt /dev/sdc mkpart primary ext4 0% 100%
- sudo parted /dev/sdc set 1 lvm on
- # 创建物理卷
- sudo pvcreate /dev/sdc1
- # 查看物理卷信息
- sudo pvdisplay /dev/sdc1
复制代码
5.2 LVM配置与管理
- # 创建卷组
- sudo vgcreate vg_data /dev/sdc1
- # 查看卷组信息
- sudo vgdisplay vg_data
- # 创建逻辑卷
- sudo lvcreate -n lv_data -l 100%FREE vg_data
- # 查看逻辑卷信息
- sudo lvdisplay /dev/vg_data/lv_data
- # 格式化逻辑卷
- sudo mkfs.xfs /dev/vg_data/lv_data
- # 创建挂载点并挂载
- sudo mkdir -p /data
- sudo mount /dev/vg_data/lv_data /data
- # 添加到/etc/fstab实现永久挂载
- echo "/dev/vg_data/lv_data /data xfs defaults 0 0" | sudo tee -a /etc/fstab
- # 扩展逻辑卷(添加新磁盘/dev/sdd)
- # 创建新分区并设置为LVM
- sudo parted /dev/sdd mklabel gpt
- sudo parted -a opt /dev/sdd mkpart primary ext4 0% 100%
- sudo parted /dev/sdd set 1 lvm on
- # 创建物理卷
- sudo pvcreate /dev/sdd1
- # 扩展卷组
- sudo vgextend vg_data /dev/sdd1
- # 扩展逻辑卷
- sudo lvextend -l +100%FREE /dev/vg_data/lv_data
- # 扩展文件系统(XFS)
- sudo xfs_growfs /data
- # 对于ext4文件系统,使用以下命令
- # sudo resize2fs /dev/vg_data/lv_data
- # 创建LVM快照
- sudo lvcreate -L 1G -s -n lv_data_snapshot /dev/vg_data/lv_data
- # 查看快照
- sudo lvdisplay /dev/vg_data/lv_data_snapshot
- # 从快照恢复(需要先卸载逻辑卷)
- sudo umount /data
- sudo lvconvert --merge /dev/vg_data/lv_data_snapshot
- sudo mount /dev/vg_data/lv_data /data
复制代码
5.3 RAID配置
- # 安装mdadm工具
- sudo dnf install -y mdadm
- # 创建RAID 1(镜像)阵列(使用/dev/sde和/dev/sdf)
- sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sde /dev/sdf
- # 查看RAID状态
- sudo mdadm --detail /dev/md0
- cat /proc/mdstat
- # 创建文件系统并挂载
- sudo mkfs.xfs /dev/md0
- sudo mkdir -p /raid
- sudo mount /dev/md0 /raid
- # 添加到/etc/fstab实现永久挂载
- echo "/dev/md0 /raid xfs defaults 0 0" | sudo tee -a /etc/fstab
- # 保存RAID配置
- sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
- # 模拟磁盘故障并替换
- # 标记磁盘为故障
- sudo mdadm --fail /dev/md0 /dev/sde
- # 移除故障磁盘
- sudo mdadm --remove /dev/md0 /dev/sde
- # 添加新磁盘(假设为/dev/sdg)
- sudo mdadm --add /dev/md0 /dev/sdg
- # 查看重建进度
- cat /proc/mdstat
复制代码
5.4 文件系统优化与配额
- # 配置磁盘配额
- # 安装配额工具
- sudo dnf install -y quota
- # 编辑/etc/fstab启用配额
- sudo vim /etc/fstab
- # 修改挂载选项,添加usrquota和grpquota
- /dev/vg_data/lv_data /data xfs defaults,usrquota,grpquota 0 0
- # 重新挂载文件系统
- sudo mount -o remount /data
- # 创建配额数据库
- sudo quotacheck -cug /data
- # 启用配额
- sudo quotaon -v /data
- # 为用户设置配额
- sudo edquota -u adminuser
- # 设置软限制和硬限制(以块为单位)
- Disk quotas for user adminuser (uid 1000):
- Filesystem blocks soft hard inodes soft hard
- /dev/mapper/vg_data-lv_data 0 1000000 2000000 0 0 0
- # 设置宽限期(超过软限制后的宽限时间)
- sudo edquota -t
- # 查看配额报告
- sudo repquota -a
- # 优化XFS文件系统
- # 查看XFS文件系统信息
- sudo xfs_info /data
- # 调整XFS日志大小(需要先卸载)
- sudo umount /data
- sudo xfs_admin -l size=32768b /dev/vg_data/lv_data
- sudo mount /dev/vg_data/lv_data /data
- # 优化ext4文件系统
- # 检查文件系统
- sudo e2fsck -f /dev/vg_data/lv_data
- # 调整文件系统参数
- sudo tune2fs -o journal_data_writeback /dev/vg_data/lv_data
- sudo tune2fs -O ^has_journal /dev/vg_data/lv_data # 禁用日志(提高性能,降低安全性)
复制代码
6. 监控与故障排除:系统监控工具、日志分析
6.1 系统监控工具
- # 安装系统监控工具
- sudo dnf install -y htop iotop iftop nethogs sysstat
- # 使用htop监控系统资源
- htop
- # 使用iotop监控磁盘I/O
- sudo iotop
- # 使用iftop监控网络流量
- sudo iftop
- # 使用nethogs监控进程网络使用
- sudo nethogs
- # 配置sysstat收集系统性能数据
- sudo vim /etc/sysconfig/sysstat
- # 启用数据收集
- ENABLED="true"
- # 启动并启用sysstat服务
- sudo systemctl enable --now sysstat
- # 查看CPU使用统计
- sar -u
- # 查看内存使用统计
- sar -r
- # 查看磁盘I/O统计
- sar -b
- # 查看网络统计
- sar -n DEV
- # 安装和配置Prometheus监控
- # 安装Prometheus
- sudo dnf install -y prometheus
- # 配置Prometheus
- sudo vim /etc/prometheus/prometheus.yml
- # 添加以下配置
- global:
- scrape_interval: 15s
- scrape_configs:
- - job_name: 'prometheus'
- static_configs:
- - targets: ['localhost:9090']
- - job_name: 'node_exporter'
- static_configs:
- - targets: ['localhost:9100']
- # 启动并启用Prometheus
- sudo systemctl enable --now prometheus
- # 安装Node Exporter
- sudo dnf install -y node_exporter
- sudo systemctl enable --now node_exporter
- # 访问Prometheus Web界面
- # http://server-ip:9090
复制代码
6.2 日志分析与管理
- # 安装和配置ELK日志分析系统
- # 安装Java运行时
- sudo dnf install -y java-11-openjdk
- # 安装Elasticsearch
- sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
- sudo vim /etc/yum.repos.d/elasticsearch.repo
- # 添加以下内容
- [elasticsearch]
- name=Elasticsearch repository for 7.x packages
- baseurl=https://artifacts.elastic.co/packages/7.x/yum
- gpgcheck=1
- gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
- enabled=0
- autorefresh=1
- type=rpm-md
- # 安装Elasticsearch
- sudo dnf install --enablerepo=elasticsearch elasticsearch
- # 配置Elasticsearch
- sudo vim /etc/elasticsearch/elasticsearch.yml
- # 修改以下配置
- network.host: 0.0.0.0
- discovery.type: single-node
- # 启动并启用Elasticsearch
- sudo systemctl enable --now elasticsearch
- # 安装Logstash
- sudo dnf install --enablerepo=elasticsearch logstash
- # 配置Logstash
- sudo vim /etc/logstash/conf.d/logstash.conf
- # 添加以下配置
- input {
- file {
- path => "/var/log/messages"
- start_position => "beginning"
- }
- }
- filter {
- grok {
- match => { "message" => "%{SYSLOGBASE} %{GREEDYDATA:log_message}" }
- }
- }
- output {
- elasticsearch {
- hosts => ["localhost:9200"]
- index => "syslog-%{+YYYY.MM.dd}"
- }
- }
- # 启动并启用Logstash
- sudo systemctl enable --now logstash
- # 安装Kibana
- sudo dnf install --enablerepo=elasticsearch kibana
- # 配置Kibana
- sudo vim /etc/kibana/kibana.yml
- # 修改以下配置
- server.host: "0.0.0.0"
- elasticsearch.hosts: ["http://localhost:9200"]
- # 启动并启用Kibana
- sudo systemctl enable --now kibana
- # 访问Kibana Web界面
- # http://server-ip:5601
复制代码
6.3 性能分析与故障排除
- # 使用perf进行性能分析
- sudo dnf install -y perf
- # 记录系统调用
- sudo perf record -a
- # 查看报告
- sudo perf report
- # 使用strace跟踪进程系统调用
- sudo dnf install -y strace
- # 跟踪特定进程
- sudo strace -p <PID>
- # 跟踪命令执行
- sudo strace -f -e trace=execve ls -l
- # 使用lsof查看打开的文件
- sudo dnf install -y lsof
- # 查看特定进程打开的文件
- sudo lsof -p <PID>
- # 查看特定文件被哪些进程使用
- sudo lsof /path/to/file
- # 查看网络连接
- sudo lsof -i
- # 使用netstat和ss查看网络连接
- sudo netstat -tulpn
- sudo ss -tulpn
- # 使用tcpdump抓包
- sudo dnf install -y tcpdump
- # 抓取特定端口的流量
- sudo tcpdump -i eth0 port 80
- # 保存抓包结果
- sudo tcpdump -i eth0 -w capture.pcap
- # 使用Wireshark分析抓包文件(需要图形界面)
- sudo dnf install -y wireshark
- wireshark capture.pcap
- # 使用systemd分析服务问题
- # 查看服务状态
- sudo systemctl status nginx
- # 查看服务日志
- sudo journalctl -u nginx
- # 查看内核日志
- sudo journalctl -k
- # 查看特定时间段的日志
- sudo journalctl --since "2023-01-01" --until "2023-01-02"
- # 使用dmesg查看内核环缓冲区消息
- sudo dmesg | tail
复制代码
7. 自动化与脚本:提高工作效率的自动化技巧
7.1 Shell脚本编程
- # 创建备份脚本
- sudo vim /usr/local/bin/backup.sh
- #!/bin/bash
- # 定义变量
- DATE=$(date +%Y%m%d)
- BACKUP_DIR="/backup"
- SOURCE_DIR="/data"
- # 创建备份目录
- mkdir -p $BACKUP_DIR/$DATE
- # 执行备份
- tar -czf $BACKUP_DIR/$DATE/data_backup_$DATE.tar.gz $SOURCE_DIR
- # 删除30天前的备份
- find $BACKUP_DIR -type d -mtime +30 -exec rm -rf {} \;
- # 记录日志
- echo "Backup completed on $DATE" >> /var/log/backup.log
- # 设置脚本可执行
- sudo chmod +x /usr/local/bin/backup.sh
- # 添加到cron定期执行
- sudo crontab -e
- # 添加以下行,每天凌晨2点执行备份
- 0 2 * * * /usr/local/bin/backup.sh
复制代码
7.2 Ansible自动化配置
7.3 Docker容器化应用
- # 安装Docker
- sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- sudo dnf install -y docker-ce docker-ce-cli containerd.io
- # 启动并启用Docker
- sudo systemctl enable --now docker
- # 添加用户到docker组
- sudo usermod -aG docker $USER
- newgrp docker
- # 验证Docker安装
- docker run hello-world
- # 创建Dockerfile
- mkdir myapp && cd myapp
- vim Dockerfile
- # 添加以下内容
- FROM almalinux:8
- RUN dnf install -y nginx
- COPY index.html /usr/share/nginx/html/
- EXPOSE 80
- CMD ["nginx", "-g", "daemon off;"]
- # 创建index.html
- echo "<h1>Hello from AlmaLinux Docker Container</h1>" > index.html
- # 构建Docker镜像
- docker build -t myapp:latest .
- # 运行容器
- docker run -d -p 8080:80 --name myapp-container myapp:latest
- # 使用Docker Compose管理多容器应用
- # 安装Docker Compose
- sudo dnf install -y docker-compose
- # 创建docker-compose.yml
- vim docker-compose.yml
- version: '3'
- services:
- web:
- build: .
- ports:
- - "8080:80"
- volumes:
- - ./html:/usr/share/nginx/html
- networks:
- - app-network
- db:
- image: mysql:8.0
- environment:
- MYSQL_ROOT_PASSWORD: password
- MYSQL_DATABASE: myapp
- volumes:
- - db-data:/var/lib/mysql
- networks:
- - app-network
- volumes:
- db-data:
- networks:
- app-network:
- # 启动服务
- docker-compose up -d
- # 查看运行状态
- docker-compose ps
- # 停止服务
- docker-compose down
复制代码
8. 企业级应用部署:常见服务配置
8.1 Web服务器配置
- # 安装Apache HTTP Server
- sudo dnf install -y httpd
- # 创建网站目录
- sudo mkdir -p /var/www/example.com
- sudo chown -R apache:apache /var/www/example.com
- sudo chmod -R 755 /var/www/example.com
- # 创建示例网页
- echo "<h1>Welcome to Example.com</h1>" | sudo tee /var/www/example.com/index.html
- # 创建虚拟主机配置
- sudo vim /etc/httpd/conf.d/example.com.conf
- <VirtualHost *:80>
- ServerName example.com
- ServerAlias www.example.com
- DocumentRoot /var/www/example.com
-
- <Directory /var/www/example.com>
- Options Indexes FollowSymLinks
- AllowOverride All
- Require all granted
- </Directory>
-
- ErrorLog /var/log/httpd/example.com-error.log
- CustomLog /var/log/httpd/example.com-access.log combined
- </VirtualHost>
- # 启动并启用Apache
- sudo systemctl enable --now httpd
- # 配置SSL/TLS(使用Let's Encrypt)
- # 安装Certbot
- sudo dnf install -y certbot python3-certbot-apache
- # 获取SSL证书
- sudo certbot --apache -d example.com -d www.example.com
- # 配置自动续期
- sudo echo "0 0,12 * * * root python3 -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew -q" | sudo tee -a /etc/crontab
- # 安装和配置Nginx作为反向代理
- # 安装Nginx
- sudo dnf install -y nginx
- # 创建反向代理配置
- sudo vim /etc/nginx/conf.d/reverse_proxy.conf
- server {
- listen 80;
- server_name example.com www.example.com;
-
- location / {
- proxy_pass http://localhost:8080;
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- }
- }
- # 启动并启用Nginx
- sudo systemctl enable --now nginx
复制代码
8.2 数据库服务器配置
- # 安装MariaDB
- sudo dnf install -y mariadb-server
- # 启动并启用MariaDB
- sudo systemctl enable --now mariadb
- # 安全配置
- sudo mysql_secure_installation
- # 创建数据库和用户
- mysql -u root -p
- CREATE DATABASE myapp;
- CREATE USER 'myappuser'@'localhost' IDENTIFIED BY 'strongpassword';
- GRANT ALL PRIVILEGES ON myapp.* TO 'myappuser'@'localhost';
- FLUSH PRIVILEGES;
- EXIT;
- # 配置MariaDB优化
- sudo vim /etc/my.cnf.d/mariadb-server.cnf
- [mysqld]
- # 内存设置
- innodb_buffer_pool_size = 2G
- innodb_log_file_size = 256M
- innodb_log_buffer_size = 8M
- # 连接设置
- max_connections = 200
- max_connect_errors = 100000
- thread_cache_size = 8
- # 查询缓存
- query_cache_type = 1
- query_cache_size = 128M
- query_cache_limit = 2M
- # 重启MariaDB
- sudo systemctl restart mariadb
- # 安装PostgreSQL
- sudo dnf install -y postgresql-server postgresql-contrib
- # 初始化数据库
- sudo postgresql-setup --initdb
- # 启动并启用PostgreSQL
- sudo systemctl enable --now postgresql
- # 设置postgres用户密码
- sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD 'strongpassword';"
- # 创建数据库和用户
- sudo -u postgres createdb myapp
- sudo -u postgres createuser myappuser
- # 设置用户密码和权限
- sudo -u postgres psql
- ALTER USER myappuser WITH PASSWORD 'strongpassword';
- GRANT ALL PRIVILEGES ON DATABASE myapp TO myappuser;
- \q
- # 配置PostgreSQL优化
- sudo vim /var/lib/pgsql/data/postgresql.conf
- # 内存设置
- shared_buffers = 512MB
- effective_cache_size = 2GB
- work_mem = 16MB
- maintenance_work_mem = 128MB
- # 连接设置
- max_connections = 100
- # 日志设置
- logging_collector = on
- log_directory = 'pg_log'
- log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
- log_statement = 'all'
- # 重启PostgreSQL
- sudo systemctl restart postgresql
复制代码
8.3 文件服务器配置
- # 配置NFS服务器
- # 安装NFS服务
- sudo dnf install -y nfs-utils
- # 创建共享目录
- sudo mkdir -p /data/nfs/share
- sudo chmod 777 /data/nfs/share
- # 配置NFS导出
- sudo vim /etc/exports
- /data/nfs/share 192.168.1.0/24(rw,sync,no_root_squash)
- # 启动并启用NFS服务
- sudo systemctl enable --now nfs-server rpcbind
- # 配置防火墙
- sudo firewall-cmd --permanent --add-service=nfs
- sudo firewall-cmd --permanent --add-service=mountd
- sudo firewall-cmd --permanent --add-service=rpc-bind
- sudo firewall-cmd --reload
- # 在客户端挂载NFS共享
- sudo mkdir -p /mnt/nfs
- sudo mount -t nfs 192.168.1.100:/data/nfs/share /mnt/nfs
- # 添加到/etc/fstab实现永久挂载
- echo "192.168.1.100:/data/nfs/share /mnt/nfs nfs defaults 0 0" | sudo tee -a /etc/fstab
- # 配置Samba服务器
- # 安装Samba
- sudo dnf install -y samba samba-client samba-common
- # 创建共享目录
- sudo mkdir -p /data/samba/share
- sudo chmod 777 /data/samba/share
- # 配置Samba用户
- sudo useradd -s /sbin/nologin smbuser
- sudo smbpasswd -a smbuser
- # 配置Samba共享
- sudo vim /etc/samba/smb.conf
- [global]
- workgroup = WORKGROUP
- server string = Samba Server %v
- netbios name = almalinux
- security = user
- map to guest = bad user
- dns proxy = no
- [Share]
- path = /data/samba/share
- browsable = yes
- writable = yes
- guest ok = no
- valid users = smbuser
- create mask = 0777
- directory mask = 0777
- # 启动并启用Samba服务
- sudo systemctl enable --now smb nmb
- # 配置防火墙
- sudo firewall-cmd --permanent --add-service=samba
- sudo firewall-cmd --reload
- # 测试Samba配置
- sudo testparm
复制代码
9. 最佳实践和总结
9.1 系统维护最佳实践
- # 创建系统维护脚本
- sudo vim /usr/local/bin/system_maintenance.sh
- #!/bin/bash
- # 更新系统
- echo "Updating system..."
- dnf update -y
- # 清理旧软件包
- echo "Cleaning old packages..."
- dnf autoremove -y
- dnf clean all
- # 检查磁盘空间
- echo "Checking disk space..."
- df -h
- # 检查系统资源使用情况
- echo "Checking system resources..."
- free -h
- uptime
- # 检查失败的服务
- echo "Checking failed services..."
- systemctl --failed
- # 清理日志
- echo "Cleaning old logs..."
- journalctl --vacuum-time=30d
- # 检查文件系统
- echo "Checking file systems..."
- fsck -A -C -t nonfs
- # 记录维护完成时间
- echo "System maintenance completed on $(date)" >> /var/log/system_maintenance.log
- # 设置脚本可执行
- sudo chmod +x /usr/local/bin/system_maintenance.sh
- # 添加到cron定期执行(每月一次)
- sudo crontab -e
- # 添加以下行
- 0 0 1 * * /usr/local/bin/system_maintenance.sh
复制代码
9.2 安全最佳实践
- # 创建安全加固脚本
- sudo vim /usr/local/bin/harden_system.sh
- #!/bin/bash
- # 禁用root SSH登录
- echo "Disabling root SSH login..."
- sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
- systemctl restart sshd
- # 禁用密码认证(仅允许密钥认证)
- echo "Disabling password authentication for SSH..."
- sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
- systemctl restart sshd
- # 配置自动安全更新
- echo "Configuring automatic security updates..."
- dnf install -y dnf-automatic
- sed -i 's/apply_updates = no/apply_updates = yes/' /etc/dnf/automatic.conf
- systemctl enable --now dnf-automatic.timer
- # 安装和配置fail2ban
- echo "Installing and configuring fail2ban..."
- dnf install -y epel-release
- dnf install -y fail2ban
- systemctl enable --now fail2ban
- # 配置防火墙
- echo "Configuring firewall..."
- systemctl enable --now firewalld
- firewall-cmd --permanent --add-service=ssh
- firewall-cmd --permanent --remove-service=dhcpv6-client
- firewall-cmd --reload
- # 禁用不必要的服务
- echo "Disabling unnecessary services..."
- systemctl disable avahi-daemon cups bluetooth
- # 设置强密码策略
- echo "Setting strong password policies..."
- sed -i 's/# minlen = 9/minlen = 12/' /etc/security/pwquality.conf
- sed -i 's/# minclass = 3/minclass = 3/' /etc/security/pwquality.conf
- # 配置登录失败锁定
- echo "Configuring login failure lockout..."
- sed -i '/auth.*pam_unix.so/i auth required pam_tally2.so deny=5 unlock_time=300 onerr=fail silent' /etc/pam.d/system-auth
- # 设置脚本可执行
- sudo chmod +x /usr/local/bin/harden_system.sh
复制代码
9.3 备份和恢复策略
- # 创建备份策略脚本
- sudo vim /usr/local/bin/backup_strategy.sh
- #!/bin/bash
- # 定义变量
- DATE=$(date +%Y%m%d_%H%M%S)
- BACKUP_DIR="/backup"
- RETENTION_DAYS=30
- # 创建备份目录
- mkdir -p $BACKUP_DIR/system
- mkdir -p $BACKUP_DIR/config
- mkdir -p $BACKUP_DIR/data
- # 系统备份(备份重要系统文件和配置)
- echo "Creating system backup..."
- tar -czf $BACKUP_DIR/system/system_backup_$DATE.tar.gz \
- /etc \
- /home \
- /var/spool/cron \
- /var/log \
- --exclude=/var/log/journal
- # 配置备份(备份服务配置)
- echo "Creating configuration backup..."
- tar -czf $BACKUP_DIR/config/config_backup_$DATE.tar.gz \
- /etc/nginx \
- /etc/httpd \
- /etc/php.ini \
- /etc/my.cnf \
- /etc/postgresql \
- /etc/samba
- # 数据库备份(MySQL/MariaDB)
- echo "Creating database backup..."
- mysqldump --all-databases --single-transaction --routines --triggers --events | gzip > $BACKUP_DIR/data/mysql_backup_$DATE.sql.gz
- # 数据库备份(PostgreSQL)
- echo "Creating PostgreSQL backup..."
- pg_dumpall -U postgres | gzip > $BACKUP_DIR/data/postgresql_backup_$DATE.sql.gz
- # 文件系统备份(rsync)
- echo "Creating file system backup..."
- rsync -avz --delete /data/ $BACKUP_DIR/data/files_backup_$DATE/
- # 清理旧备份
- echo "Cleaning old backups..."
- find $BACKUP_DIR -type f -name "*.tar.gz" -mtime +$RETENTION_DAYS -delete
- find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +$RETENTION_DAYS -delete
- find $BACKUP_DIR -type d -name "*_backup_*" -mtime +$RETENTION_DAYS -exec rm -rf {} \;
- # 记录备份完成
- echo "Backup completed on $(date)" >> /var/log/backup.log
- # 设置脚本可执行
- sudo chmod +x /usr/local/bin/backup_strategy.sh
- # 添加到cron定期执行
- sudo crontab -e
- # 添加以下行,每天凌晨3点执行备份
- 0 3 * * * /usr/local/bin/backup_strategy.sh
复制代码
9.4 总结
通过本教程,我们详细探讨了AlmaLinux的高级配置和管理技巧,从基础安装到系统优化,再到安全设置和企业级应用部署。这些技能对于系统管理员和DevOps工程师来说至关重要,能够帮助您构建稳定、安全、高效的企业级Linux环境。
关键要点总结:
1. 系统优化:通过调整内核参数、优化文件系统、管理内存和CPU资源,可以显著提高系统性能。
2. 安全设置:防火墙配置、SELinux使用、SSH安全加固和系统访问控制是保护系统安全的关键措施。
3. 网络配置:高级网络设置、服务优化和网络安全配置确保了网络通信的高效和安全。
4. 存储管理:LVM和RAID技术提供了灵活的存储管理方案,而文件系统优化和配额管理则提高了存储效率。
5. 监控与故障排除:使用系统监控工具、日志分析和性能分析工具可以帮助您及时发现和解决系统问题。
6. 自动化:通过Shell脚本、Ansible和Docker容器技术,您可以实现系统管理的自动化,提高工作效率。
7. 企业级应用部署:Web服务器、数据库服务器和文件服务器的配置是企业环境中的常见需求。
8. 最佳实践:系统维护、安全加固和备份恢复策略是确保系统长期稳定运行的重要保障。
系统优化:通过调整内核参数、优化文件系统、管理内存和CPU资源,可以显著提高系统性能。
安全设置:防火墙配置、SELinux使用、SSH安全加固和系统访问控制是保护系统安全的关键措施。
网络配置:高级网络设置、服务优化和网络安全配置确保了网络通信的高效和安全。
存储管理:LVM和RAID技术提供了灵活的存储管理方案,而文件系统优化和配额管理则提高了存储效率。
监控与故障排除:使用系统监控工具、日志分析和性能分析工具可以帮助您及时发现和解决系统问题。
自动化:通过Shell脚本、Ansible和Docker容器技术,您可以实现系统管理的自动化,提高工作效率。
企业级应用部署:Web服务器、数据库服务器和文件服务器的配置是企业环境中的常见需求。
最佳实践:系统维护、安全加固和备份恢复策略是确保系统长期稳定运行的重要保障。
通过掌握这些技能,您将成为一名出色的AlmaLinux系统管理员,能够应对各种企业级Linux管理挑战,提升工作效率,为企业提供稳定可靠的IT基础设施支持。 |
|