当前位置: 首页 > news >正文

Linux之SELinux 概述、SSH 密钥登录、服务器初始化

1. SELinux 概述

1.1 SELinux 核心概述

1.1.1 基本定义与开发背景

  • 全称:Security Enhanced Linux(安全性增强的 Linux)。
  • 开发者:美国国家安全局(NSA),构建于 Linux Kernel 之上。
  • 集成版本:已整合到 Linux 2.6 及以上版本的内核中,可通过 uname -r 命令查看当前内核版本。
  • 安全级别:相当于信息安全评估标准(4 类 7 级:D、C1、C2、B1、B2、B3、A)中的 B1 级军事安全性能

1.1.2 核心作用

  • 增强系统安全性:防御未知攻击,限制入侵范围。即使服务器上的服务(如 Apache、httpd)被攻陷,入侵者仅能获取该服务权限,无法获得服务器最高权限,避免整个系统被控制。
  • 示例:若 Apache 服务器(httpd 服务)被入侵,入侵行为仅被 “禁锢” 在 httpd 服务范围内,系统整体权限不受影响。

1.1.3 三大核心特点

特点缩写全称核心说明
MAC强制访问控制(Mandatory Access Control)对文件、目录、端口的所有访问均基于管理员设定的策略,普通用户无权修改策略,实现彻底的访问控制。
RBAC基于角色的访问控制(Role Base Access Control)为用户分配最小权限,用户需归属特定角色(如 sysadm_r);即使是 root 用户,若不在对应角色中,也无法执行该角色的操作(如 sysadm_t 相关管理)。
TE类型强制(Type Enforcement)为文件赋予 type 标签、为进程赋予 domain 标签,仅允许特定 domain 标签的进程访问特定 type 标签的文件。
示例:vim 进程(特定 domain)仅可读取 type 为 T1 的 a.txt,无法读取 type 为 T2 的 b.txt

1.2 SELinux 执行模式

SELinux 有三种核心执行模式,分别对应不同的安全管控强度:

  1. enforcing(强制模式):严格执行 SELinux 策略,只要策略不允许的操作,就无法执行。
  2. permissive(警告模式):允许执行所有操作,但会将 SELinux 策略不允许的行为记录到日志中,用于测试和排查策略问题。
  3. disabled(关闭模式):完全关闭 SELinux,不进行任何安全管控。

1.3 SELinux 工作原理与相关文件

1.3.1 工作逻辑

  1. 发起请求:进程(Subject)发起访问请求(如读取文件、访问端口)。
  2. 策略校验:SELinux 读取安全策略数据库(Policy Database),判断该进程(对应 domain 标签)是否有权访问目标对象(文件 / 端口,对应 type 标签)。
  3. 执行结果
    • 校验通过:允许操作(Granted)。
    • 校验失败:拒绝操作(Denied),并生成 AVC(Access Vector Cache)拒绝信息。

1.3.2 相关软件包

SELinux 依赖以下默认已安装的软件包,可通过 rpm -qa | grep selinux 命令查看:

  • libselinux-utils-2.0.94-5.3.el6_4.1.x86_64
  • libselinux-devel-2.0.94-5.3.el6_4.1.x86_64
  • selinux-policy-3.7.19-231.el6.noarch
  • libselinux-python-2.0.94-5.3.el6_4.1.x86_64
  • selinux-policy-targeted-3.7.19-231.el6.noarch
  • libselinux-2.0.94-5.3.el6_4.1.x86_64

1.3.3 核心配置文件

  • 路径/etc/sysconfig/selinux
  • 查看命令ls /etc/sysconfig/selinux

1.4 SELinux 状态查看与切换

1.4.1 查看当前状态

通过 getenforce 命令查看 SELinux 实时运行状态,输出结果对应三种模式:

  • Enforcing:当前为强制模式
  • Permissive:当前为警告模式
  • Disabled:当前为关闭模式

1.4.2 临时状态切换(无需重启,重启后失效)

  • 强制模式 → 警告模式setenforce 0,执行后用 getenforce 验证,输出 Permissive
  • 警告模式 → 强制模式setenforce 1,执行后用 getenforce 验证,输出 Enforcing
  • ⚠️ 注意:此方式无法在 “关闭模式(Disabled)” 与其他模式间切换。

1.4.3 永久状态切换(需重启系统,修改配置文件)

  1. 编辑核心配置文件:vim /etc/sysconfig/selinux
  2. 修改 SELINUX 字段值,设置目标模式:
    • 强制模式:SELINUX=enforcing
    • 警告模式:SELINUX=permissive
    • 关闭模式:SELINUX=disabled
  3. 保存文件并重启系统:重启后配置生效,初次开启 SELinux 时,系统会自动更新文件标签,此过程耗时可能较长。

2. Linux SSH 基于密钥交换的自动登录原理与配置

2.1 SSH 密钥登录核心原理(协商交互过程)

SSH 密钥登录基于非对称加密算法(如 RSA),通过 “公钥加密、私钥解密” 的逻辑完成身份认证,避免每次登录输入密码,具体交互步骤如下:

  1. 发起请求:客户端向目标服务器发送 SSH 登录请求,若服务器启用证书验证,会优先进入证书认证流程。
  2. 读取公钥:服务器根据自身 SSH 配置(默认读取用户家目录下 .ssh/authorized_keys 文件),获取该客户端对应的有效公钥。
  3. 加密随机数:服务器生成一串唯一的随机数,使用读取到的客户端公钥对该随机数进行加密,生成密文。
  4. 回传密文:服务器将加密后的密文发送回客户端,作为身份验证的 “挑战信息”。
  5. 客户端解密:客户端查找默认私钥(路径通常为 ~/.ssh/id_rsa),或通过 -i 参数指定私钥文件,尝试解密服务器发来的密文。
    • 若解密失败:自动切换到密码验证等其他登录方式,继续校验。
    • 若解密成功:将解密得到的 “随机数原文” 重新发送给服务器,证明自己拥有对应的私钥。
  6. 服务器比对:服务器将客户端回传的 “随机数原文” 与自己最初生成的随机数进行比对。
    • 比对成功:认证通过,客户端直接登录服务器。
    • 比对失败:认证失败,切换到其他验证方式(如密码登录)。

2.2 Linux 客户端配置步骤(含参数详解与操作细节)

2.2.1 本地生成密钥对

通过 ssh-keygen 工具生成 RSA 密钥对,命令及完整参数说明如下:

[root@localhost ~]# ssh-keygen -t rsa -P '' -f /root/.ssh/id_rsa

执行后会输出以下信息,代表密钥生成成功:

Generating public/private rsa key pair.
Your identification has been saved in /root/.ssh/id_rsa.  # 私钥保存路径
Your public key has been saved in /root/.ssh/id_rsa.pub.  # 公钥保存路径
The key fingerprint is:
cb:e4:e8:69:19:86:f7:52:59:95:43:40:ce:c9:06:b9 root@localhost.localdomain
The key's randomart image is:
+--[ RSA 2048]----+
.000..
E..
So
+=0.
0.=十
.+..
.0.
关键参数详解
参数含义详细解释
ssh-keygen密钥生成工具OpenSSH 套件内置工具,专门用于创建 SSH 认证所需的公钥 / 私钥对
-t rsa指定密钥类型-t 是 type 的缩写,rsa 是主流非对称加密算法,兼容性覆盖几乎所有 SSH 服务器(其他可选算法:ed25519 安全性更高、ecdsa 性能更优)
-P ''设置私钥密码(Passphrase)-P 后接密码字符串,''(两个单引号)表示空密码
⚠️ 安全权衡:空密码允许自动化脚本无交互登录,但私钥文件若泄露,任何人可直接使用;若需高安全性,建议设置复杂密码(后续登录需输入密钥密码)
-f /root/.ssh/id_rsa指定密钥保存路径-f 是 file 的缩写,私钥固定保存为该路径;公钥会自动在同目录下生成,文件名追加 .pub 后缀(即 /root/.ssh/id_rsa.pub)。
⚠️ 若路径不存在(如 .ssh 目录),工具会自动创建,无需手动操作

2.2.2 复制公钥到远程服务器

通过 ssh-copy-id 工具将客户端公钥传输到远程服务器的 authorized_keys 文件(该文件是服务器识别客户端公钥的核心文件),命令如下:

[root@localhost ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.10.23
操作细节与交互说明
  1. 首次连接验证:若客户端是第一次连接该服务器,会提示 “无法确认主机身份”,并显示服务器 ECDSA 密钥指纹,示例如下:

    The authenticity of host '192.168.10.23(192.168.10.23)' can't be established.
    ECDSA key fingerprint is dd:6d:e8:68:72:c9:8f:d8:32:18:ba:19:6e:52:4a:60.
    Are you sure you want to continue connecting (yes/no)? 
    

    输入 yes 确认,客户端会将服务器指纹保存到 ~/.ssh/known_hosts 文件,后续连接不再提示。

  2. 输入服务器密码:工具会尝试用当前客户端用户(此处为 root)登录服务器,需输入远程服务器的 root 密码(仅首次传输公钥时需要):

    root@192.168.10.23's password:  # 输入远程服务器root密码
    
  3. 公钥安装成功:密码验证通过后,工具会自动将客户端公钥追加到服务器 root 用户的 ~/.ssh/authorized_keys 文件,并提示成功:

    Number of key(s) added: 1
    Now try logging into the machine, with: "ssh 'root@192.168.10.23'"
    

2.2.3 测试密钥登录

无需输入密码,直接通过 SSH 命令登录服务器,验证配置是否生效:

# 登录命令
[root@localhost ~]# ssh root@192.168.10.23# 登录成功后,会显示服务器上次登录信息,并进⼊服务器命令行
Last login: Sat Mar 25 21:03:27 2017 from 192.168.77.1
[root@localhost ~]#  # 已成功登录远程服务器# 验证服务器网络(可选操作)
[root@localhost ~]# ip addr list ens33  # 查看服务器网卡信息
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:f0:98:fd brd ff:ff:ff:ff:ff:ff
inet 192.168.77.131/24 brd 192.168.77.255 scope global dynamic ens37
valid_lft 1280sec preferred_lft 1280sec
inet6 fe80::41e6:5671:d095:3c24/64 scope link
valid_lft forever preferred_lft forever# 退出服务器
[root@localhost ~]# exit
logout
Connection to 192.168.77.131 closed.  # 连接关闭,返回客户端

2.3 Windows 客户端(Xshell)配置步骤(含界面操作与公钥处理)

2.3.1 生成 RSA 密钥对

  1. 打开 Xshell 软件,点击顶部菜单栏「工具」→「用户密钥管理者」,弹出 “用户密钥” 窗口。
  2. 点击窗口右下角「生成」按钮,启动 “新建用户密钥生成向导”。
  3. 选择密钥算法与长度:默认选择「RSA」算法,密钥长度默认「2048 位」(无需修改,兼容性最佳),点击「下一步」。
  4. 密钥生成:工具会自动生成公钥 / 私钥对,生成过程中无需操作,等待进度条完成后点击「下一步」。
  5. 设置密钥名称与密码:

    • 「密钥名称 (K)」:默认填写 id_rsa_2048(可自定义,便于区分多个密钥)。
    • 「密码 (P)」与「确认 (C)」:留空(同 Linux 客户端,方便自动登录;高安全性场景可设置密码),直接点击「下一步」。

2.3.2 复制公钥到远程服务器

  1. 查看并复制公钥:在 “用户密钥” 窗口中,选中刚生成的 id_rsa_2048 密钥,点击「属性 (P)」→「公钥」选项卡。
    • 公钥格式默认选择「SSH2-OpenSSH」,下方文本框即为公钥内容(以 ssh-rsa 开头,长字符串形式)。
    • 点击「复制」按钮,或直接选中全部文本复制(确保无遗漏、无多余空格)。
  2. 服务器端追加公钥:通过远程连接工具(如初始密码登录)进入服务器,执行以下命令,将复制的公钥追加到 root 用户的 authorized_keys 文件(若文件不存在,命令会自动创建):

    bash

    [root@localhost ~]# echo 'ssh-rsa AAAAB3NzaC1yc2EAAAABlwAAAQEA1WPScj31fl +c8biyb9PbQILRX5s4fZkdaOAqy2d043edDkbVi0FHymyVELu5clBmJ8 of6xMmFeU +adD1GzHsT3NrNS4EZo2MKgywGVybTyjFyd77iS2rvAWdz72sZjbl4e ARKn9EQIBnHAs9jQmzxyDNQoZ0hO3IUC6a9eqp0kgj/dX31FghJzCv K5+dE9qSvGu6nRz3wN5F/xvs/hTuFzipFBwB1C51lchdrUiZcDfSrqM7m suaJhRawmuHdU8W +bfxh6qSSD1wlHy1JQ2hBrLCM/lvZkIGbGyOHoEN+KDJC +1zkP07kWhKcmF+axK0CKHSDo2lwxgYCcW9b1d7Ww==' >> /root/.ssh/authorized_keys
    

    ⚠️ 注意:将命令中的长字符串替换为自己复制的公钥内容,确保单引号包裹完整,无换行错误。

2.3.3 配置 Xshell 会话并登录

  1. 新建会话:点击 Xshell 顶部「文件」→「新建」,弹出 “新建会话属性” 窗口。
  2. 配置基本连接信息(「常规」选项卡):

    • 「协议 (P)」:选择「SSH」(默认)。
    • 「主机 (H)」:输入远程服务器 IP 地址(如 192.168.77.131)。
    • 「端口号 (Q)」:默认 22(SSH 标准端口,若服务器修改过端口需对应调整)。
    • 「名称 (N)」:自定义会话名称(如 Linux-Server-131),便于区分。
  3. 配置公钥认证(「用户身份验证」选项卡):
    • 点击左侧「连接」→「用户身份验证」,进入认证配置。
    • 「方法 (M)」:选择「Public Key」(公钥认证)。
    • 「用户名 (U)」:输入服务器登录用户名(如 root,需与公钥所在用户一致)。
    • 「用户密钥 (K)」:点击「浏览 (B)」,在弹出的 “选择用户密钥” 窗口中,选中之前生成的 id_rsa_2048 密钥,点击「确定」。
    • 「密码 (P)」:若生成密钥时未设置密码,此处留空。
  4. 完成登录:点击 “新建会话属性” 窗口右下角「确定」,双击左侧会话列表中的该会话,即可无需密码直接登录服务器。

3. 服务器(CentOS 7)初始化配置

3.1 配置国内 Yum 源(加速软件安装)

替换默认国外源为国内源(阿里云 / 清华源),提升软件下载速度,步骤如下:

  1. 备份原有源文件sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
  2. 下载主 Yum 源
    • 阿里云(推荐):sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
    • 清华源(可选):sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.tuna.tsinghua.edu.cn/repo/Centos-7.repo
  3. 配置 EPEL 源(提供额外软件):
    • 安装 EPEL 包:sudo yum install -y epel-release
    • 替换 EPEL 源为阿里云:
      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 wget curl telnet net-tools bash-completion lsof sysstat htop tree git unzip lrzsz
    
    • 工具说明:vim-enhanced(加强版编辑器)、net-tools(含 ifconfig)、htop(进程监控)、lrzsz(文件传输,sz 下载 /rz 上传)
  3. 可选:安装开发环境sudo yum groupinstall -y "Development Tools"

3.3 网络连接验证

确保服务器正常联网,为后续操作奠基:

  1. 查看 IP 地址(确认网卡启动):ip addr show 或 ifconfig
  2. 测试 DNS 解析ping -c 4 www.baidu.com(-c 4 表示发送 4 个数据包)
  3. 测试外网连通性ping -c 4 114.114.114.114
  4. 排查网络问题(若无法上网):查看网卡配置文件,cat /etc/sysconfig/network-scripts/ifcfg-eth0(网卡名可能为 ens33 等)

3.4 配置主机名

便于识别服务器,避免依赖 IP 管理:

  1. 查看当前主机名hostname
  2. 设置新主机名(示例:centos7-master):sudo hostnamectl set-hostname centos7-master
  3. 修改 hosts 文件(避免软件报错):
    • 编辑文件:sudo vim /etc/hosts
    • 末尾添加:127.0.0.1 centos7-master(替换为你的主机名)
  4. 生效配置:重新登录 Shell 或执行 bash

3.5 同步系统时间

保证时间准确,对日志分析、证书验证至关重要:

  1. 安装 chrony 时间同步服务sudo yum install -y chrony
  2. 启动服务并设置开机自启sudo systemctl start chronyd && sudo systemctl enable chronyd
  3. 强制立即同步时间sudo chronyc -a makestep
  4. 验证时间状态sudo chronyc sources -v(查看同步源)或 date(查看当前时间)

3.6 配置防火墙(两种方式)

方式 1:iptables(经典方案,适合习惯直接控制规则的场景)

核心思路

停止 firewalld → 安装 iptables 服务 → 设置默认安全策略 → 放行必要端口 → 保存规则并启用服务。

详细步骤
  1. 停止并禁用 firewalldsudo systemctl stop firewalld && sudo systemctl disable firewalld
  2. 安装并启动 iptables 服务
    • 安装:sudo yum install -y iptables-services
    • 启动并设为开机自启:sudo systemctl start iptables && sudo systemctl enable iptables
  3. 设置默认策略(先执行,确保安全):
    sudo iptables -P INPUT DROP       # 默认拒绝所有传入流量
    sudo iptables -P FORWARD DROP     # 默认拒绝所有转发流量
    sudo iptables -P OUTPUT ACCEPT    # 默认允许所有传出流量
    sudo iptables -A INPUT -i lo -j ACCEPT  # 允许本地回环(系统内部通信)
    sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT  # 允许已建立连接的返回流量
    
  4. 放行必要端口(按需选择):
    sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT    # 放行 SSH(远程管理必需)
    sudo iptables -A INPUT -p icmp -j ACCEPT              # 放行 PING(网络诊断)
    sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT    # 放行 HTTP
    sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT   # 放行 HTTPS
    # 按需添加其他端口,如 MySQL(3306):sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
    
  5. 保存规则并重启服务
    • 保存规则(防止重启丢失):sudo service iptables save 或 sudo /usr/libexec/iptables/iptables.init save
    • 重启服务:sudo systemctl restart iptables
  6. 验证配置

    • 查看规则:sudo iptables -L -v -n --line-numbers(显示行号,便于删除规则)
    • 查看服务状态:sudo systemctl status iptables
常用管理命令
命令说明
sudo iptables -L -v -n查看当前规则(详细模式,不解析 IP 为主机名)
sudo iptables -L -v -n --line-numbers查看规则并显示行号(用于删除规则)
sudo iptables -D INPUT <规则行号>删除 INPUT 链中指定行号的规则
sudo service iptables save保存当前规则
sudo systemctl restart iptables重启 iptables 服务

方式 2:firewalld(CentOS 7 默认,适合简化配置场景)

配置步骤

  1. 查看并启动服务
    • 查看状态:sudo systemctl status firewalld
    • 启动并设为开机自启(若未启动):sudo systemctl start firewalld && sudo systemctl enable firewalld
  2. 查看当前开放规则sudo firewall-cmd --list-all
  3. 放行必要端口 / 服务(--permanent 表示永久生效):
    sudo firewall-cmd --permanent --add-service=ssh        # 放行 SSH
    sudo firewall-cmd --permanent --add-service=http       # 放行 HTTP
    sudo firewall-cmd --permanent --add-service=https      # 放行 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

3.7 最终建议

完成以上配置后,执行 sudo reboot 重启服务器,确保内核更新、主机名等配置完全生效,服务器即可进入安全可用状态。

4. 总结

selinux :安全增强型,通过不同的执行模式来控制对系统的资源访问权限

三种核心模式:enforcing,permissive,disabled

ssh 公钥和私钥登录:是登录一种非对称加密技术的一个认证, 将公钥部署到目标服务器上,本地使用对应的私钥验证身份,无需输入密码即可安全的登录

服务器初始化
① 安装yum 网络源
② 安装运维的必备工具 

   ③ 网络验证
④ 配置主机名  并且 设置主机映射 为了加快主机之间访问速度
⑤ 时间同步 
⑥ 防火墙设置,安装并且设置开放端口
⑦ 设置ssh端口以及用户的密码

http://www.xdnf.cn/news/1371043.html

相关文章:

  • 利用AI进行ArcGISPro进行数据库的相关处理?
  • Java数据结构速成【1】
  • 原则性 单一职责原则,第一性原则和ACID原则 : 安全/学习/节约
  • 从双重检查锁定的设计意图、锁的作用、第一次检查提升性能的原理三个角度,详细拆解单例模式的逻辑
  • Markdown学习笔记(4)
  • 矩阵微积分的链式法则(chain rule)
  • 在 Android Studio 中修改 APK 启动图标(2025826)
  • 从线到机:AI 与多模态交互如何重塑 B 端与 App 界面设计
  • 【RAGFlow代码详解-23】聊天系统架构
  • 【LeetCode 热题 100】75. 颜色分类——双指针
  • PWM控制实现呼吸灯
  • 家庭财务规划与投资系统的设计与实现(代码+数据库+LW)
  • Linux SSH 基于密钥交换的自动登录:原理与配置指南
  • (Arxiv-2024)VideoMaker:零样本定制化视频生成,依托于视频扩散模型的内在力量
  • 进程管理详解
  • 如何将视频从安卓设备传输到Mac?
  • 2025改版:npm 新淘宝镜像域名地址
  • 【数据结构】树和二叉树——二叉树
  • 使用字节旗下的TREA IDE快速开发Web应用程序
  • Python中函数的闭包和装饰器
  • 读懂支持向量机(SVM)
  • C++ STL 顶层设计与安全:迭代器、失效与线程安全
  • 【Python实战练习】用 Python与Pygame 打造完整的贪吃蛇小游戏
  • 懂支持向量机(SVM):从原理到实战拆解
  • 机器学习模型可解释库的介绍:Shapash (一)
  • 深度学习(五):正则化:约束模型的复杂度
  • Python 全局变量使用
  • 声明式微服务通信新范式:OpenFeign如何简化RestTemplate调用
  • 乳腺癌数据集支持向量机实践学习总结
  • `stat` 系统调用详解