SELinux & SSH密钥登录配置 & 服务器初始化

发布于:2025-08-29 ⋅ 阅读:(13) ⋅ 点赞:(0)

1、selinux

1.1 selinux概述

SELinux( Security Enhanced Linux 安全性增强的Linux),由美国国家安全局 NSA(National Security Agency)开发,构建与 Kernel 之上,拥有灵活的强制性访问控制结构,主要用在提高 Linux 的安全性,提供强健的安全保证,可以防御未知攻击,据称相当于 B1 级的军事安全性能(信息安全评估标准)
传统的 Linux 在没有 Selinux 保护的时候,倘若运行于之上的服务器被骇客攻陷,其服务器最高权限就可能随之丧失,但是倘若有了SElinux的保护,入侵的也只有服务本身,整个服务器的最高权限依然还健在
Selinux 的作用:增强 Linux 系统安全性

1.2 selinux特点

  • MAC(Mandator Access Control)对访问控制彻底化,对所有的文件/目录/端口的访问都是基于策略设定的,这些策略都是由管理员设定的,一般用户无权限管理和更改
  • RBAC(Role Base Access Control)对用户只赋予最小权限,即使是root 用户,你要是不在 sysadm_r 里,也不能实行sysadm_t 的管理操作
  • TE(Type Enforcement)对进程只赋予最小运行权限,TE 的概念在SElinux 中非常重要, 其特点是对文件赋予一个叫 type 的标签类型,对进程赋予一个叫 domain 的标签,可以规定某个标签进程只能执行某类文件

1.3 工作原理&执行模式

在这里插入图片描述

执行模式

  • enforcing ## 强制模式,只要 selinux 不允许,就无法执行
  • permissive ## 警告模式,你可以执行,但你所做事件全部记录
  • disabled ## 关闭selinux
##	配置文件位置
ls /etc/sysconfig/selinux
## 查看selinux的状态
getenforce
## 临时修改selinux
setenforce 0		## 警告模式
setenforce 1		## 强制模式
## 永久修改需到位置文件
vim /etc/sysconfig/selinux

2、ssh 公钥和私钥

2.1 概念

公钥和私钥是非对称加密体系的核心组件,二者通过数学算法关联但功能互补,共同保障数据安全与身份认证

  • 公钥‌:用于加密数据或验证数字签名 ‌
  • 私钥‌:用于解密公钥加密的数据或创建数字签名

2.2 LinuxSSH基于密钥交换的自动登录

原理图
在这里插入图片描述

2.2.1 Linux客户端演示登录

## linux本地创建密钥对
ssh-keygen -t rsa -P '' -f /root/.ssh/id_rsa
## 将公钥复制到远程机器上
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.10.23
## 测试登录
ssh root@192.168.10.23
  • ssh-keygen:生成 SSH 密钥的工具
  • -t rsa:指定生成 RSA 类型的密钥
  • -P ‘’:设置空密码
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.2.2 Windows环境Xshell登录演示

第一步:进入xshell,单击 工具 > 用户密钥管理者 ,再点击生成
第二步:在打开的密钥创建向导中,选择默认的 RSA 密钥算法及密钥长度(默认 2048 位)后,点击 下一步
第三步:程序生成密钥对后,点击 下一步
在这里插入图片描述
第四步:复制生成的公钥到目标主机的/root/.ssh/authorized_keys 尾部追加
在这里插入图片描述

echo 'ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA1WPScj31fl+c8biyb9PbQILRX5s4fZkdaOAqy2d043edDkbVi0FHymyVELu5cIBmJ8oQIBnHAs9jQmzxyDNQoZ0hO3lUC6a9eqp0kgj/dX31FghJzCVK5+dE9qSvGu6nRz3wN5F/xvs/hTuFzipFBwB1C51lchdrUiZcDfSrqMkWhKcmF+axK0CKHSDo2lwxqYCcW9b1d7Ww==' >> /root/.ssh/authorized_keys

第五步:复制完成后返回Xshell,输入目标主机IP,用户身份认证选择公钥认证
在这里插入图片描述
在这里插入图片描述
第六步:点击“确定” 就能连接上了

3、服务器初始化

3.1 配置Yum 源

# 1. 备份原有的源文件,以防万一
sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

# 2. 下载阿里云的 CentOS 7 源文件 (推荐阿里云,速度快且稳定)
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

# 3. 下载阿里云的 EPEL 源 (Extra Packages for Enterprise Linux,提供大量额外软件)
sudo yum install -y epel-release
sudo sudo sed -e 's|^metalink=|#metalink=|g' \
         -e 's|^#baseurl=|baseurl=|g' \
         -e 's|^//download.fedoraproject.org/pub|//mirrors.aliyun.com|g' \
         -e 's|http://download.example|https://mirrors.aliyun.com|g' \
         -i /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel-testing.repo

# 4. 清理旧缓存并生成新缓存
sudo yum clean all
sudo yum makecache

3.2 更新系统与安装必备工具

# 1. 更新整个系统(内核更新需要重启生效)
sudo yum update -y

# 2. 安装一批最常用的工具
sudo yum install -y \
    vim-enhanced \    # 加强版的vi编辑器
    wget \            # 命令行下载工具
    curl \            # 网络数据传输工具
    telnet \          # 网络诊断工具
    net-tools \       # 包含ifconfig等网络工具
    bash-completion \ # 命令自动补全增强
    lsof \            # 列出打开的文件
    sysstat \         # 系统性能监控工具(包含iostat, sar等)
    htop \            # 交互式进程查看器(比top更好用)
    tree \            # 以树状图列出目录内容
    git \             # 版本控制工具
    unzip \           # 解压zip文件
    lrzsz             # 提供sz(下载)、rz(上传)命令,方便Xshell等终端传输文件

# 如果需要开发环境,还可以安装
# sudo yum groupinstall -y "Development Tools"


yum install -y vim-enhanced wget curl telnet net-tools bash-completio lsof sysstat htop tree git unzip lrzsz       

3.3 网络连接验证

# 1. 查看当前IP地址,确认网络接口已启动
ip addr show
# 或
ifconfig

# 2. 测试是否能解析域名(检查DNS)
ping -c 4 www.baidu.com

# 3. 测试是否能访问外网
ping -c 4 114.114.114.114

# 如果无法上网,需要检查网络配置
# cat /etc/sysconfig/network-scripts/ifcfg-eth0 (网卡名可能不同,如ens33)

3.4 配置主机名

# 1. 查看当前主机名
hostname

# 2. 设置新的主机名(例如:centos7-master)
sudo hostnamectl set-hostname centos7-master

# 3. 修改 hosts 文件,将本机主机名解析到本地,避免某些软件报错
# 在文件末尾添加一行:127.0.0.1 <你的主机名>
sudo vim /etc/hosts
# 例如添加:127.0.0.1 centos7-master

# 4. 重新登录Shell后生效,或者执行以下命令立即生效
bash

3.5 同步时间

# 1. 安装 chrony 时间同步服务(CentOS 7 首选)
sudo yum install -y chrony

# 2. 启动 chronyd 服务并设置开机自启
sudo systemctl start chronyd
sudo systemctl enable chronyd

# 3. 强制立即与时间服务器同步
sudo chronyc -a makestep

# 4. 查看时间同步状态
sudo chronyc sources -v
# 或查看当前系统时间
date

3.6 配置防火墙

3.6.1 iptables

整体思路

  1. 停止并禁用 firewalld:为 iptables 让路
  2. 安装 iptables-services:提供 iptables 的保存和服务管理功能
  3. 设置默认策略:定义“默认拒绝”的安全基础
  4. 编写具体的放行规则:按需开放端口
  5. 保存规则并设置开机自启:确保配置永久生效

第 1 步:停止并禁用 Firewalld

sudo systemctl stop firewalld
sudo systemctl disable firewalld

第 2 步:安装并启动 Iptables Services

# 安装 iptables-services 包,它提供了保存规则和作为服务管理的功能
sudo yum install -y iptables-services

# 启动iptables服务并设置开机自启
sudo systemctl start iptables
sudo systemctl enable iptables

第 3 步:设置默认策略(安全基础)
在添加任何允许规则之前,先设置最严格的默认策略:拒绝所有传入连接,允许所有传出连接,允许转发
在执行以下命令前,请确保你已经放行了 SSH 端口(通常是22),否则会立即断开远程连

# 1. 设置默认策略(非常重要!先做这一步)
sudo iptables -P INPUT DROP    # 默认拒绝所有进来的流量
sudo iptables -P FORWARD DROP  # 默认拒绝所有转发的流量
sudo iptables -P OUTPUT ACCEPT # 默认允许所有出去的流量

# 2. 允许所有本地回环(lo)接口的通信,这是系统内部通信所必需的
sudo iptables -A INPUT -i lo -j ACCEPT

# 3. 允许已建立的和相关联的连接通过
# 这条规则至关重要!它允许对外请求的返回数据包进入,否则无法正常上网和使用大多数服务。
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

第 4 步:添加具体的放行规则(按需开放)

# 1. 允许SSH连接 (端口22) - 这是远程管理的生命线,必须开放!
# 可以使用 --dport 22-m tcp -p tcp --dport 22,后者更精确
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 2. 允许PING (ICMP协议),便于网络诊断
sudo iptables -A INPUT -p icmp -j ACCEPT

# 3. 允许HTTP (80)HTTPS (443)
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 4. 如果需要放行其他端口,例如MySQL (3306)、自定义端口(8080)
# sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
# sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT

第 5 步:保存规则并重启服务
iptables 的命令规则默认只在内存中生效,重启后会丢失。必须使用以下命令保存到配置文件中

# 保存当前内存中的规则到 /etc/sysconfig/iptables 文件
sudo service iptables save
# 或者使用
sudo /usr/libexec/iptables/iptables.init save

# 重启iptables服务,确保配置加载无误
sudo systemctl restart iptables

第 6 步:验证配置

# 查看当前生效的所有iptables规则,检查配置是否正确
sudo iptables -L -v -n --line-numbers

# 检查iptables服务状态
sudo systemctl status iptables

3.6.2 firewalld

配置原则:默认拒绝所有传入连接,只开放必要的端口

# 1. 查看防火墙状态
sudo systemctl status firewalld
# 如果未启动,则启动并设置开机自启
sudo systemctl start firewalld
sudo systemctl enable firewalld

# 2. 查看当前开放的端口和服务
sudo firewall-cmd --list-all

# 3. 放行常用的服务端口(根据需求选择)
# 放行 SSH 端口(默认22,极其重要,确保自己能连上)
sudo firewall-cmd --permanent --add-service=ssh
# 放行 HTTP (80)HTTPS (443) 端口,用于Web服务
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
# 如果需要放行自定义端口,例如 8080
# sudo firewall-cmd --permanent --add-port=8080/tcp

# 4. 重新加载防火墙配置使其生效
sudo firewall-cmd --reload

# 5. 再次确认规则已生效
sudo firewall-cmd --list-all

重要安全提示:如果修改了 SSH 端口(例如改为 5922),一定要先放行新端口再关闭旧端口,否则可能导致自己无法远程连接

sudo firewall-cmd --permanent --add-port=5922/tcp
sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --reload

建议最后重启一次服务器 以确保所有更改(特别是内核更新和主机名)完全生效

总结

本文介绍了selinux 的三种执行模式:enforcing 强制模式、permissive 警告模式、disabled 关闭 selinux;ssh 公钥和私钥登录;服务器初始化:1、配置yum源 2、安装必备工具 3、检查网络连接 4、配置主机名 5、同步时间 6、防火墙设置