尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Linux 系统引导修复、服务管理与防火墙配置实战指南

Linux 系统引导修复、服务管理与防火墙配置实战指南 目录系统引导修复1. GRUB 引导损坏与修复1.1 引导配置文件损坏1.2 通过 BIOS/UEFI 设置从光盘启动1.3 进入救援模式修复2. 救援模式下的两种修复方案方案一使用网络安装内核推荐方案二使用安装介质ISO修复1.4 修复后调整启动顺序系统服务管理1. systemctl 基础命令2. 服务控制命令3. systemd 配置文件路径Nginx 服务配置1. 配置 Nginx 开机自启动systemd 方式1.1 创建 systemd 服务文件1.2 加载配置并启动1.3 常见问题端口占用1.4 设置开机自启2. 使用 /etc/rc.local 实现开机自启传统方式3. 手动管理 Nginxiptables 防火墙配置1. iptables 表与链2. 数据包流向与链选择3. 表应用顺序4. iptables 安装与基础配置5. 规则管理命令5.1 查看规则5.2 清空规则5.3 删除规则6. 规则语法7. 规则示例7.1 基本规则7.2 访问控制7.3 修改现有规则7.4 多端口匹配7.5 单向 ping 控制8. 保存规则firewalld 防火墙配置1. 基础命令2. 服务管理3. 端口管理Apache HTTP Server 配置1. 安装与启动2. 配置文件详解3. 修改监听端口4. 访问控制4.1 基于 IP 的访问控制4.2 用户认证5. 虚拟主机配置5.1 创建虚拟主机配置文件5.2 创建网站目录5.3 客户端测试6. 基于域名的虚拟主机SELinux 安全配置1. 访问控制模型对比2. SELinux 运行模式3. SELinux 上下文管理3.1 查看上下文3.2 临时修改上下文3.3 永久修改上下文4. CGI 程序配置4.1 创建 CGI 程序4.2 设置执行权限并测试5. SELinux 端口管理5.1 查看当前 HTTP 端口5.2 添加新端口到 SELinux5.3 修改 Apache 监听端口5.4 配置防火墙并重启服务6. SELinux 故障排查6.1 查看 SELinux 日志6.2 常用 SELinux 布尔值6.3 临时禁用 SELinux仅用于测试系统引导修复1. GRUB 引导损坏与修复1.1 引导配置文件损坏若误移或删除/boot/grub2/grub.cfg文件系统引导将被破坏需进入救援模式手动引导。手动引导命令示例# 设置根分区根据实际分区调整setroothd0,msdos1# 加载内核linux16 /vmlinuz-0-rescue-b779ed2e864f47dca44fd3a5db95021froot/dev/mapper/centos-root# 加载初始内存盘initrd16 /initramfs-0-rescue-b779ed2e864f47dca44fd3a5db95021f.img# 启动之后mv/grub.cfg /boot/grub2/注意若整个/boot/grub2/目录被移走重启后将直接报错无法进入上述手动引导界面。1.2 通过 BIOS/UEFI 设置从光盘启动关闭虚拟机重新打开电源时进入固件BIOS/UEFI设置界面使用方向键移动到Boot选项卡向下移动到CD-ROM Drive选中 CD-ROM按Shift “”将其移动到启动顺序最顶部按F10保存选择Yes后按Enter1.3 进入救援模式修复选择Troubleshooting故障排除选择Rescue a CentOS system挽救模式获取 root shellchroot /mnt/sysimage/此时可能发现/boot目录为空需重新安装内核并重建 GRUB。2. 救援模式下的两种修复方案方案一使用网络安装内核推荐救援模式默认无网络需先激活网络# 激活网络网卡名可能为 ens32、eth0 等请按实际情况调整nmcli c up ens32# 安装内核yuminstall-ykernel方案二使用安装介质ISO修复# 挂载安装光盘mount/dev/cdrom /mnt/# 强制安装内核包版本号请根据实际情况调整rpm-ivh/mnt/Packages/kernel-3.10.0-957.el7.x86_64.rpm--force# 安装 GRUB2 到磁盘grub2-install /dev/sda# 生成 GRUB2 配置文件grub2-mkconfig/boot/grub2/grub.cfg# 退出 chroot 环境exitexit1.4 修复后调整启动顺序重启后进入 BIOS/UEFI将Hard Drive移动到启动顺序最顶部保存退出。系统服务管理1. systemctl 基础命令查看服务状态systemctl status sshd状态说明loaded单元配置文件已加载active (running)服务正在运行有一个或多个持续进程active (exited)成功完成一次性配置任务active (waiting)正在运行但等待某个事件inactive服务未运行enabled将在系统启动时自动启动disabled不会在系统启动时自动启动2. 服务控制命令systemctl stop service_name# 停止服务systemctl start service_name# 启动服务systemctl restart service_name# 重启服务systemctl reload service_name# 重新加载配置不停止服务systemctlenable--nowservice_name# 启用并立即启动服务systemctl mask service_name# 屏蔽服务防止手动或自动启动3. systemd 配置文件路径维护者文件/usr/lib/systemd/system/软件包安装管理员文件/etc/systemd/system/自定义配置运行时数据/run/systemd/非持久化优先级/etc/systemd/system/下的单元文件优先于/usr/lib/systemd/system/下的文件。Nginx 服务配置1. 配置 Nginx 开机自启动systemd 方式1.1 创建 systemd 服务文件vim/etc/systemd/system/nginx.service添加以下内容[Unit] Descriptionnginx - high performance web server Afternetwork.target remote-fs.target nss-lookup.target [Service] Typeforking PIDFile/usr/local/nginx/logs/nginx.pid ExecStartPre/usr/local/nginx/sbin/nginx -t ExecStart/usr/local/nginx/sbin/nginx ExecReload/usr/local/nginx/sbin/nginx -s reload ExecStop/usr/local/nginx/sbin/nginx -s stop PrivateTmptrue [Install] WantedBymulti-user.target1.2 加载配置并启动# 重新加载 systemd 配置systemctl daemon-reload# 启动 Nginx 服务systemctl start nginx1.3 常见问题端口占用发现报错ExecStartPre 语法检查通过了status0/SUCCESS若启动失败并提示bind() to 0.0.0.0:80 failed表示 80 端口已被占用# 查看 80 端口占用情况ss-tlnp|grep:80# 如果被 httpdApache占用停止 httpdsystemctl stop httpd systemctl disable--nowhttpd1.4 设置开机自启systemctlenablenginx2. 使用 /etc/rc.local 实现开机自启传统方式# 编辑 rc.local 文件vim/etc/rc.local# 在 exit 0 之前添加/usr/local/nginx/sbin/nginx# 赋予执行权限chmodx /etc/rc.local重启测试reboot然后检查 Nginx 是否运行psaux|grepnginx3. 手动管理 Nginx/usr/local/nginx/sbin/nginx# 启动/usr/local/nginx/sbin/nginx-sstop# 停止/usr/local/nginx/sbin/nginx-sreload# 重新加载配置iptables 防火墙配置1. iptables 表与链表名主要功能包含的链filter默认过滤数据包允许/拒绝/丢弃INPUT入站、OUTPUT出站、FORWARD转发nat网络地址转换端口转发、上网共享PREROUTING路由前、POSTROUTING路由后、OUTPUTmangle修改数据包头部TTL、TOS 等所有链PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTINGraw跳过连接追踪用于优化性能PREROUTING、OUTPUT2. 数据包流向与链选择从外部访问本机SSH、HTTP数据包走INPUT链本机访问外部如 yum 更新数据包走OUTPUT链本机作为路由器转发数据包走FORWARD链端口映射DNAT规则写在PREROUTING链上网共享SNAT/Masquerade规则写在POSTROUTING链3. 表应用顺序raw→mangle→nat→filter4. iptables 安装与基础配置# 安装 iptablesyuminstall-yiptables iptables-services# 关闭 firewalld如果已安装systemctl disable--nowfirewalld# 关闭 SELinux临时setenforce0# 启用 iptables 服务systemctlenable--nowiptables.service5. 规则管理命令5.1 查看规则iptables-nL# 以数字形式显示 IP 和端口iptables-nL--line-numbers# 显示行号iptables-nL-v# 详细显示规则信息5.2 清空规则iptables-F# 清空所有规则iptables-FINPUT# 清空 INPUT 链规则iptables-tnat-FINPUT# 清空 nat 表的 INPUT 链规则5.3 删除规则iptables-tfilter-DINPUT5# 删除 filter 表 INPUT 链第 5 条规则iptables -D INPUT 3删除第三条6. 规则语法iptables-t表名 动作[链名][-p 匹配条件][-j 控制类型]参数说明-t指定表不写默认 filter动作-A追加、-I插入、-D删除、-R替换、-P设置默认策略-p匹配协议tcp、udp、icmp 等-j控制类型ACCEPT、REJECT、DROP7. 规则示例7.1 基本规则# 允许所有 TCP 流量进入iptables-tfilter-AINPUT-ptcp-jACCEPT# 在 INPUT 链开头插入允许 UDP 的规则iptables-IINPUT-pudp-jACCEPT# 在 INPUT 链第 4 行插入允许 ICMP 的规则iptables-IINPUT4-picmp-jACCEPT例iptables -t filter -A INPUT -p tcp -j ACCEPT-t filter指定了filter表-A INPUT是在INPUT链末尾追加规则-p tcp匹配TCP协议-j ACCEPT是放行动作。所以这条命令的意思是在INPUT链末尾添加一条规则放行所有进入本机的TCP流量iptables -I INPUT -p udp -j ACCEPT第一行插入iptables -I INPUT 4 -p icmp -j ACCEPT在第四行插入指定序号7.2 访问控制禁止所有主机 ping 本机REJECT 会返回拒绝信息iptables -A INPUT -p icmp -j REJECT丢弃所有 ICMP 数据包无响应iptables -I INPUT 1 -p icmp -j DROP拒绝特定 IP 的 SSH 连接iptables -A INPUT -s 192.168.150.136 -p tcp --dport 22 -j REJECT重要提示iptables 规则从上到下顺序匹配。如果已有ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22这样的规则后面针对特定 IP 的拒绝规则将不会生效。7.3 修改现有规则# 修改第 5 条规则允许特定 IP 访问 80 端口iptables-RINPUT5-ptcp--dport80-s192.168.150.136-jACCEPT7.4 多端口匹配# 拒绝特定 IP 访问 22 和 80 端口iptables-AINPUT-ptcp-mmultiport--dports22,80-s192.168.246.133-jREJECT7.5 单向 ping 控制# 本机可以 ping 其他机器但其他机器不能 ping 本机iptables-IOUTPUT-oeth0-picmp --icmp-type0-jREJECT8. 保存规则# 保存当前规则到配置文件iptables-save/etc/sysconfig/iptables# 重启服务后规则依然生效systemctl restart iptablesfirewalld 防火墙配置1. 基础命令firewall-cmd --list-all# 查看所有规则firewall-cmd--reload# 重载配置立即生效firewall-cmd--permanent# 永久生效需配合 --reloadfirewall-cmd --get-default-zone# 查看默认区域firewall-cmd --set-default-zonetrusted# 更改默认区域403表示没有找到index.html或者php文件需要新建一个2. 服务管理# 添加 HTTP 服务到 public 区域firewall-cmd--permanent--add-servicehttp--zonepublic# 从 public 区域移除 HTTP 服务firewall-cmd--permanent--zonepublic --remove-servicehttp# 添加 IP 段到 drop 区域firewall-cmd--permanent--add-source192.168.150.133/24--zonedrop3. 端口管理# 添加端口firewall-cmd--permanent--add-port8080/tcp# 移除端口firewall-cmd--permanent--remove-port8080/tcpApache HTTP Server 配置1. 安装与启动# 安装 Apacheyuminstallhttpd httpd-manual-y# 启动服务systemctl start httpd systemctlenablehttpd# 如果使用 firewalld开放 HTTP 服务firewall-cmd--permanent--add-servicehttp firewall-cmd--reload2. 配置文件详解主配置文件/etc/httpd/conf/httpd.conf关键配置项ServerRoot /etc/httpd # Apache 运行目录 Listen 80 # 监听端口 User apache # 运行用户 Group apache # 运行组 ServerAdmin rootlocalhost # 管理员邮箱 DocumentRoot /var/www/html # 网站根目录 # 目录权限配置 Directory /var/www/html Require all granted /Directory3. 修改监听端口将Listen 80改为Listen 8080后# 添加防火墙规则firewall-cmd--permanent--add-port8080/tcp firewall-cmd--reload# 访问方式curlhttp://IP:80804. 访问控制cd /var/www/html/mkdir admin4.1 基于 IP 的访问控制Directory /var/www/html/admin Require ip 192.168.150.0/24 Require not ip 192.168.150.133 /Directoryvim /etc/httpd/conf/httpd.conf像如图所示更改192.168.150.133不能访问别的ip可以访问4.2 用户认证Directory /var/www/html/admin AuthUserFile /etc/httpd/conf/htpasswd AuthName Input user name and password AuthType basic Require user admin # Require valid-user # 允许所有有效用户 /Directorysystemctl restart httpd创建密码文件htpasswd-c/etc/httpd/conf/htpasswd admin参数说明-c创建新密码文件如果文件已存在会覆盖/etc/httpd/conf/htpasswd密码文件路径必须与配置中的 AuthUserFile 一致admin用户名必须与配置中的 Require user admin 一致5. 虚拟主机配置5.1 创建虚拟主机配置文件vim/etc/httpd/conf.d/vhost.conf示例配置VirtualHost *:80 ServerName www.example.com DocumentRoot /var/www/example ErrorLog /var/log/httpd/example_error.log CustomLog /var/log/httpd/example_access.log combined /VirtualHost5.2 创建网站目录mkdir-p/var/www/exampleechoWelcome to example.com/var/www/example/index.html5.3 客户端测试# 在客户端添加 hosts 解析echo服务器IP www.example.com/etc/hosts# 测试访问curlwww.example.com6. 基于域名的虚拟主机# 定义默认发布站点 VirtualHost _default_:80 DocumentRoot /var/www/html /VirtualHostcurl server2/admin/index.html -u admin:123456SELinux 安全配置虚拟主机访问控制vim /etc/httpd/conf.d/vhost.conf1. 访问控制模型对比特性DAC自主访问控制MAC强制访问控制控制者文件所有者root 或用户系统安全策略SELinux 规则核心工具chmod、chownsetenforce、chcon、restorecon能否绕过root 用户可以绕过任何限制即使是 root 也无法绕过除非关闭或修改策略常见报错Permission deniedPermission denied日志中显示 SELinux is preventing2. SELinux 运行模式模式实际效果适用场景Enforcing强制严格生效拦截违规操作并记录日志生产环境默认Permissive宽容只警告不拦截允许违规操作但记录日志调试排错Disabled禁用彻底关闭内核不加载 SELinux 策略极少数性能敏感场景不推荐3. SELinux 上下文管理3.1 查看上下文# 查看文件上下文ls-Z/var/www/html/index.html# 查看进程上下文psauxZ|grephttpd# 查看目录及其内容的上下文ls-Zd/var/www/html/3.2 临时修改上下文# 递归修改目录类型为 httpd_sys_content_tchcon-R-thttpd_sys_content_t /www# 修改文件类型chcon-thttpd_sys_content_t /var/www/html/index.html# 恢复默认上下文restorecon-v/var/www/html/index.html3.3 永久修改上下文# 查看所有文件和服务的安全上下文semanage fcontext-l|grephttpd# 添加永久规则允许 /www 目录及其子目录为 Web 内容semanage fcontext-a-thttpd_sys_content_t/www(/.*)?# 刷新安全上下文使修改生效restorecon-vvFR/www4. CGI 程序配置Apache 默认 CGI 目录/var/www/cgi-bin/此目录中的脚本可以直接执行。4.1 创建 CGI 程序cd/var/www/cgi-bin/vimtest.cgi添加以下内容#!/bin/bashechoContent-type:text/htmlechoechohtmlbodyechoh1CGI Test Page/h1echopCurrent directory listing:/pechoprels-l/echo/preecho/body/html4.2 设置执行权限并测试# 添加执行权限chmodax /var/www/cgi-bin/test.cgi# 测试访问假设服务器 IP 为 192.168.150.133curlhttp://192.168.150.133/cgi-bin/test.cgiServer3可以访问5. SELinux 端口管理当修改 Apache 监听端口时修改监听端口为81重启服务会报错需要相应调整 SELinux 端口策略。原因:防火墙要添加端口 firewall-cmd --permanent --add-port81/tcp改为82报错因为只修改了安全上下文没有加端口将 TCP 端口 82 永久添加到 SELinux 的 http_port_t 端口类型中然后再firewall-cmd --permanent --add-port82/tcp5.1 查看当前 HTTP 端口semanage port-l|grephttp_port_t5.2 添加新端口到 SELinux# 添加 TCP 端口 81 到 http_port_t 类型semanage port-a-thttp_port_t-ptcp81# 添加 TCP 端口 82semanage port-a-thttp_port_t-ptcp825.3 修改 Apache 监听端口编辑 Apache 配置文件vim/etc/httpd/conf/httpd.conf将Listen 80改为Listen 81 # 或 Listen 825.4 配置防火墙并重启服务# 添加防火墙规则以端口 81 为例firewall-cmd--permanent--add-port81/tcp firewall-cmd--reload# 重启 Apachesystemctl restart httpd# 验证服务状态systemctl status httpd ss-tlnp|grep:816. SELinux 故障排查6.1 查看 SELinux 日志# 查看最近 SELinux 拒绝记录ausearch-mavc-tsrecent# 查看特定进程的 SELinux 上下文ps-eZ|grephttpd# 查看 SELinux 布尔值开关设置getsebool-a|grephttpd6.2 常用 SELinux 布尔值# 允许 HTTPD 访问网络setsebool-Phttpd_can_network_connect on# 允许 HTTPD 发送邮件setsebool-Phttpd_can_sendmail on# 允许 HTTPD 运行 CGI 脚本setsebool-Phttpd_enable_cgi on# 允许 HTTPD 访问家目录setsebool-Phttpd_enable_homedirs on6.3 临时禁用 SELinux仅用于测试# 设置为宽容模式只记录不阻止setenforce0# 查看当前模式getenforce# 重新启用强制模式setenforce1# SELinux 状态管理getenforce# 查看当前模式setenforce0# 临时设为宽容模式setenforce1# 临时设为强制模式sestatus# 查看详细状态# 上下文管理ls-Z# 查看文件上下文chcon# 临时修改上下文restorecon# 恢复默认上下文semanage fcontext# 永久修改上下文规则# 端口管理semanage port-l# 查看端口映射semanage port-a# 添加端口映射# 布尔值管理getsebool-a# 查看所有布尔值setsebool-P# 永久修改布尔值
返回列表