CE(SELinux)

1 概述

1.1 概念

SELinux(Security-Enhanced Linux)是由美国国家安全局(NSA)主导、Linux 开源社区协作开发的强制访问控制(MAC,Mandatory Access Control) 安全子系统。其核心设计目标是打破传统 Linux 权限模型的 "信任边界",强制约束每个服务进程仅能访问其完成核心功能所必需的资源,从根本上限制恶意程序或越权进程的破坏范围。

典型场景举例

  • 正常逻辑下,美图软件仅需访问本地图片文件、显卡资源,但如果其后台进程试图读取浏览器的密码配置文件(如 Chrome 的Login Data),SELinux 会基于预设规则拦截该越权行为;
  • 即使是root用户启动的进程,SELinux 也会按策略限制其权限(如httpd进程以root启动后,仍无法写入/etc/shadow)。

1.2 核心作用

SELinux 通过两大核心机制实现权限管控:

  1. 域限制(Domain Restriction) :针对进程(主体)的功能约束,定义进程能执行的操作(如httpd进程禁止执行ssh命令、禁止绑定非预设端口);
  2. 安全上下文(Security Context):针对文件 / 目录(目标)的访问限制,只有进程的上下文与文件上下文匹配且策略允许时,才能访问资源。

1.3 SELinux 与传统权限(DAC)的核心区别

对比维度 传统自主访问控制(DAC) SELinux 强制访问控制(MAC)
控制核心 基于 "用户 - 文件" 的权限映射(rwx) 基于 "进程 - 文件" 的策略规则 + 上下文匹配
控制主体 用户 / 用户组(如rootwww用户) 进程(如httpdsshd进程)
root权限 root用户不受任何权限限制(万能权限) root进程的权限由 SELinux 策略定义,仍受约束
权限生效逻辑 只要用户对文件有对应 rwx 权限,即可访问 需同时满足:1. 传统 rwx 权限匹配2. SELinux 策略允许3. 进程与文件上下文匹配
灵活性 配置简单,依赖chmod/chown,易被绕过 配置精细,可针对单个进程 / 文件定制规则,安全性高
适用场景 普通服务器、非敏感环境 高安全要求场景(如金融、政务、互联网服务端)

2 SELinux 工作原理

2.1 核心名词深度解析

  1. 主体(Subject)
  • 定义 :试图访问文件 / 目录资源的运行中进程(唯一标识:PID),是 SELinux 权限控制的核心对象。
  • 进程生成流程:用户执行命令 → 内核创建进程 → 进程继承用户的基础权限,但受 SELinux 域约束。
  • 关键区别
    • DAC 模型中,控制主体是 "用户"(如root用户执行的所有操作都有最高权限);
    • MAC 模型中,控制主体是 "进程"(即使root启动httpd,该进程仍受httpd_t域的限制)。
  1. 目标(Object)
  • 定义 :被进程访问的文件、目录、端口、设备等资源(SELinux 支持对端口、套接字等非文件资源的管控)。
  • 标识方式 :文件 / 目录通过路径 + inode 标识,端口通过 "协议 + 端口号" 标识(如tcp/80)。
  1. 策略(Policy)

SELinux 内置预设策略以简化海量规则的配置,核心策略如下:

策略类型 适用场景 限制范围 特点
targeted(默认) 服务器 / 通用场景 仅限制网络服务进程(httpdsshdnameddhcpd等约 50 + 核心服务),对本地进程(如bashls)几乎无限制 兼顾安全性与易用性,99% 的场景首选
mls(多级安全) 高安全场景(如军工、政务) 对所有进程 / 文件按 "安全级别" 分级管控(如 s0<s1<s2),不同级别资源禁止跨级访问 限制极严格,配置复杂,需专业运维
minimum 轻量安全场景 仅限制targeted策略中的核心服务,规则更简化 极少使用,兼容性优先
  1. 安全上下文(Security Context)

安全上下文是 SELinux 识别 "主体 - 目标" 匹配关系的核心标识,所有进程、文件、端口都有唯一的上下文 ,格式为身份标识:角色:类型:灵敏度(冒号分隔 4 个字段),例如:system_u:object_r:httpd_sys_content_t:s0

字段详解(按优先级排序)

字段 作用 核心取值 备注
类型(Type) 核心字段,决定 "进程 - 文件" 能否匹配 进程类型(域):httpd_tsshd_tbash_t文件类型:httpd_sys_content_tssh_port_tadmin_home_t 90% 的 SELinux 配置仅需修改此字段
身份标识(User) 标识资源所属的安全身份 system_u(系统内置资源)、unconfined_u(普通用户资源)、root(root 用户资源) 仅用于身份分类,几乎无需手动修改
角色(Role) 区分资源类型(进程 / 文件) system_r(进程角色)、object_r(文件 / 目录角色) 系统自动分配,无需修改
灵敏度(Level) 多级安全(MLS)场景的分级 s0(默认)、s1s2...s15 mls策略生效,targeted策略下固定为s0

核心访问逻辑(三步验证)

  • AVC 日志 :SELinux 拒绝访问时,会将详细信息记录到/var/log/audit/audit.log(关键词:AVC denied),可通过ausearch -m avc查询。

2.2 安全上下文的查看与解析

  1. 前置条件:启用 SELinux

SELinux 默认可能为disabled状态,需先启用并配置为强制 / 宽容模式,步骤如下:

复制代码
# 步骤1:安装SELinux核心依赖包
[root@server ~]# yum install -y selinux-policy selinux-policy-targeted setools-console policycoreutils-python-utils

# 步骤2:临时切换为宽容模式(避免直接强制模式导致服务异常)
[root@server ~]# vim /etc/selinux/config
SELINUX=permissive  # 宽容模式:仅记录警告,不拦截
SELINUXTYPE=targeted  # 启用targeted策略
[root@server ~]# touch /.autorelabel  # 标记重建文件上下文(重启后生效)
[root@server ~]# reboot

# 步骤3:验证宽容模式生效
[root@server ~]# getenforce  # 输出:Permissive

# 步骤4:切换为强制模式(稳定后)
[root@server ~]# vim /etc/selinux/config
SELINUX=enforcing  # 强制模式:拦截越权行为
[root@server ~]# reboot

# 步骤5:最终验证
[root@server ~]# getenforce  # 输出:Enforcing
[root@server ~]# sestatus  # 查看完整状态(关键字段:enabled、targeted、enforcing)
  1. 核心查看命令
查看对象 命令 示例 & 解析
单个文件 / 目录 ls -Z [文件/目录] ls -Z /etc/passwd输出:system_u:object_r:passwd_file_t:s0 /etc/passwd解析:系统身份 + 文件角色 + 密码文件类型 + 默认灵敏度
目录(递归) ls -Zd [目录] ls -Zd /usr/share/nginx/html输出:system_u:object_r:httpd_sys_content_t:s0 /usr/share/nginx/html解析:nginx 网页目录的默认类型为httpd_sys_content_t
进程上下文 ps -Z [进程名] `ps -Z grep httpd<br>输出:system_u:system_r:httpd_t:s0 root 1234 ? 00:00:00 httpd<br>解析:httpd进程的域为httpd_t`
端口上下文 `semanage port -l grep [服务名]` `semanage port -l grep ssh<br>输出:ssh_port_t tcp 22<br>解析:ssh服务的默认端口类型为ssh_port_t`,绑定 22 端口
  1. 辅助工具:seinfo(SELinux 策略查询)

sinfo用于查询 SELinux 内置的身份、角色、类型、布尔值等元数据,需先安装setools-console

复制代码
# 安装工具
[root@server ~]# yum install -y setools-console

# 常用查询命令
[root@server ~]# seinfo -u  # 列出所有安全身份(如system_u、unconfined_u)
[root@server ~]# seinfo -r  # 列出所有角色(如system_r、object_r)
[root@server ~]# seinfo -t  # 列出所有类型(默认超4000个,可管道过滤:seinfo -t | grep http)
[root@server ~]# seinfo -b  # 列出所有布尔值规则(如httpd_can_network_connect)
[root@server ~]# seinfo -t httpd_t -x  # 查看httpd_t域的详细规则(-x:扩展信息)

3 SELinux 运行模式管理

3.1 三种运行模式(完整说明)

模式 英文 核心行为 适用场景 日志记录
强制模式 Enforcing 启用 SELinux,严格拦截所有越权行为 生产环境(稳定后) 记录所有拒绝行为(AVC 日志)
宽容模式 Permissive 启用 SELinux,仅记录越权警告,不拦截 调试 / 上线前测试 记录所有潜在越权行为(无实际拦截)
关闭模式 Disabled 完全关闭 SELinux,不加载任何策略 临时排障 / 非安全场景 无 SELinux 相关日志

3.2 模式切换(临时 / 永久)

  1. 查看当前模式

    简洁查看

    [root@server ~]# getenforce # 输出:Enforcing/Permissive/Disabled

    详细状态查看(核心)

    [root@server ~]# sestatus
    SELinux status: enabled # 是否启用
    SELinuxfs mount: /sys/fs/selinux # SELinux临时文件系统(核心)
    SELinux root directory: /etc/selinux # 配置文件根目录
    Loaded policy name: targeted # 加载的策略类型
    Current mode: enforcing # 当前运行模式(实时生效)
    Mode from config file: enforcing # 配置文件预设模式(重启生效)
    Policy MLS status: enabled # MLS策略是否启用
    Policy deny_unknown status: allowed # 是否允许未知策略
    Max kernel policy version: 33 # 内核支持的最高策略版本

  2. 临时切换模式(重启失效)

仅支持Enforcing ↔ Permissive切换,Disabled需修改配置文件 + 重启:

复制代码
# 切换为宽容模式(0=Permissive)
[root@server ~]# setenforce 0
[root@server ~]# getenforce  # 验证:Permissive

# 切换为强制模式(1=Enforcing)
[root@server ~]# setenforce 1
[root@server ~]# getenforce  # 验证:Enforcing

# 注意:setenforce无法切换到Disabled,会报错:setenforce: SELinux is disabled
  1. 永久切换模式(需重启)

修改核心配置文件/etc/selinux/config(或软链接/etc/sysconfig/selinux):

复制代码
# 步骤1:编辑配置文件
[root@server ~]# vim /etc/selinux/config
# 可选值:enforcing/permissive/disabled
SELINUX=enforcing  # 强制模式(推荐)
# SELINUX=permissive  # 宽容模式
# SELINUX=disabled  # 关闭模式(不推荐)
SELINUXTYPE=targeted  # 策略类型(固定为targeted)

# 步骤2:重启系统生效
[root@server ~]# reboot

# 步骤3:验证
[root@server ~]# sestatus | grep "Current mode"
Current mode:                   enforcing

关键注意事项

  • Enforcing ↔ Permissive:部分场景(如上下文未重建)需重启才能完全生效;
  • Enforcing/Permissive ↔ Disabled必须重启(内核需重新加载 SELinux 模块);
  • 禁用 SELinux 后重新启用:需执行touch /.autorelabel并重启,重建所有文件的安全上下文,否则会导致上下文丢失、服务异常。

4 安全上下文的修改与恢复

4.1 chcon(手动临时修改)

核心特性

  • 手动修改文件 / 目录的安全上下文,修改仅临时生效 (重启、执行restorecon或重建上下文时会恢复默认);
  • 适用于临时调试、验证上下文匹配性,不建议用于生产环境的永久配置。

完整语法与参数

复制代码
# 语法1:指定单个字段修改(核心)
chcon [选项] [-u 身份] [-r 角色] [-t 类型] 目标文件/目录

# 语法2:参考范例文件的上下文批量修改
chcon [选项] --reference=范例文件 目标文件/目录
参数 作用 示例
-R 递归修改目录及所有子文件 / 子目录 chcon -R -t httpd_sys_content_t /www
-t 修改 "类型" 字段(核心,99% 的场景仅需此参数) chcon -t net_conf_t /etc/test
-u 修改 "身份" 字段 chcon -u system_u /etc/test
-r 修改 "角色" 字段 chcon -r object_r /etc/test
-v 显示修改的详细过程(便于验证) chcon -v -t httpd_t /usr/sbin/httpd
--reference 参考指定文件的上下文,完全复制 chcon --reference=/etc/passwd /tmp/test

实操示例(分步验证)

复制代码
# 示例1:修改单个文件的类型字段
# 1. 创建测试文件,查看默认上下文
[root@server ~]# touch test.txt
[root@server ~]# ls -Z test.txt
unconfined_u:object_r:admin_home_t:s0 test.txt  # 默认类型:admin_home_t

# 2. 修改类型为net_conf_t(网络配置文件类型)
[root@server ~]# chcon -v -t net_conf_t test.txt
正在更改 '/root/test.txt' 的安全上下文
[root@server ~]# ls -Z test.txt
unconfined_u:object_r:net_conf_t:s0 test.txt  # 验证:类型已修改

# 示例2:递归修改目录上下文(参考nginx默认目录)
# 1. 创建自定义网页目录,查看默认上下文
[root@server ~]# mkdir -p /www/nginx
[root@server ~]# ls -Zd /www/nginx
unconfined_u:object_r:default_t:s0 /www/nginx  # 默认类型:default_t

# 2. 参考nginx默认目录修改上下文
[root@server ~]# chcon -Rv --reference=/usr/share/nginx/html /www/nginx
正在更改 '/www/nginx' 的安全上下文
[root@server ~]# ls -Zd /www/nginx
system_u:object_r:httpd_sys_content_t:s0 /www/nginx  # 验证:类型匹配默认目录

4.2 restorecon(恢复默认上下文)

核心特性

  • 将文件 / 目录的安全上下文恢复为系统默认值 (默认值由semanage fcontext定义);
  • 适用于修正手动修改(如chcon)后的上下文,或修复因上下文异常导致的服务故障。

语法与参数

复制代码
restorecon [选项] 目标文件/目录
参数 作用 示例
-R 递归恢复目录及子文件 restorecon -R /www/nginx
-v 显示恢复过程(哪些文件被修改) restorecon -Rv /www/nginx
-F 强制恢复(即使上下文看似匹配) restorecon -RF /usr/share/nginx/html

实操示例

复制代码
# 1. 基于上例,恢复test.txt的默认上下文
[root@server ~]# restorecon -v test.txt
restorecon reset /root/test.txt context unconfined_u:object_r:net_conf_t:s0->unconfined_u:object_r:admin_home_t:s0
[root@server ~]# ls -Z test.txt
unconfined_u:object_r:admin_home_t:s0 test.txt  # 验证:恢复默认类型

# 2. 恢复自定义nginx目录的默认上下文
[root@server ~]# restorecon -Rv /www/nginx
restorecon reset /www/nginx context system_u:object_r:httpd_sys_content_t:s0->unconfined_u:object_r:default_t:s0

4.3 semanage(永久管理策略 / 上下文)

核心特性

  • SELinux 策略的 "终极管理工具",可永久修改文件默认上下文、端口绑定规则、布尔值等;
  • 修改后会写入 SELinux 策略库,重启 /restorecon后仍生效,是生产环境的首选工具。

前置步骤:安装依赖

复制代码
[root@server ~]# yum install -y policycoreutils-python-utils

核心功能分类与实操

功能 1:管理文件默认上下文(fcontext)

复制代码
# 语法:semanage fcontext [选项] [规则]

# 1. 查询文件的默认上下文规则
[root@server ~]# semanage fcontext -l | grep /etc/passwd
/etc/passwd[-\+]?        regular file    system_u:object_r:passwd_file_t:s0
/etc/passwd\.OLD         regular file    system_u:object_r:passwd_file_t:s0

# 2. 新增自定义目录的默认上下文(永久生效)
# 场景:让/www/nginx目录默认使用httpd_sys_content_t类型
[root@server ~]# semanage fcontext -a -t httpd_sys_content_t "/www/nginx(/.*/)?"
# 参数解析:
# -a:添加规则
# -t:指定类型
# "/www/nginx(/.*/)?":匹配/www/nginx及所有子目录/文件(正则表达式)

# 3. 应用新规则(需执行restorecon)
[root@server ~]# restorecon -Rv /www/nginx

# 4. 验证:即使重启,上下文仍保持不变
[root@server ~]# reboot
[root@server ~]# ls -Zd /www/nginx
system_u:object_r:httpd_sys_content_t:s0 /www/nginx

# 5. 删除自定义规则(如需)
[root@server ~]# semanage fcontext -d "/www/nginx(/.*/)?"

功能 2:管理服务端口(port)

SELinux 默认限制服务绑定的端口(如httpd仅允许绑定http_port_t类型的端口),需通过semanage port修改:

复制代码
# 语法:semanage port [选项] [-t 端口类型] [-p 协议] 端口号

# 1. 查询服务的默认端口规则
[root@server ~]# semanage port -l | grep http_port_t
http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000

# 2. 新增端口(如让nginx绑定7777端口)
[root@server ~]# semanage port -a -t http_port_t -p tcp 7777
# 参数解析:
# -a:添加
# -t:指定端口类型(必须匹配服务的域,如httpd_t对应http_port_t)
# -p:指定协议(tcp/udp)

# 3. 验证新增结果
[root@server ~]# semanage port -l | grep http_port_t
http_port_t                    tcp      7777, 80, 81, 443, 488, 8008, 8009, 8443, 9000

# 4. 修改端口(如需)
[root@server ~]# semanage port -m -t http_port_t -p tcp 7777  # -m=modify

# 5. 删除端口(如需)
[root@server ~]# semanage port -d -t http_port_t -p tcp 7777  # -d=delete

功能 3:管理布尔值(boolean)

布尔值是 SELinux 策略的 "开关",可快速启用 / 禁用某类权限(无需修改上下文 / 端口),核心命令:

复制代码
# 1. 查询所有布尔值(-a=all)
[root@server ~]# getsebool -a
httpd_can_network_connect --> off  # httpd禁止连接外部网络
httpd_can_sendmail --> off         # httpd禁止发送邮件
sshd_enable_homedirs --> on        # sshd允许访问用户家目录

# 2. 查询单个布尔值
[root@server ~]# getsebool httpd_can_network_connect
httpd_can_network_connect --> off

# 3. 临时修改布尔值(重启失效)
[root@server ~]# setsebool httpd_can_network_connect on

# 4. 永久修改布尔值(-P=persistent,写入策略)
[root@server ~]# setsebool -P httpd_can_network_connect on

# 5. 批量修改(如启用所有httpd相关布尔值)
[root@server ~]# setsebool -P httpd_can* on

4.4 实战实验(完整流程 + 排障)

实验 1:Nginx 自定义目录的上下文配置

目标 :让 Nginx 访问/www/zy目录(默认上下文为default_t,需改为httpd_sys_content_t)。

步骤 1:环境准备

复制代码
# 1. 启用SELinux强制模式(已完成则跳过)
[root@server ~]# getenforce  # 确保输出Enforcing

# 2. 安装Nginx
[root@server ~]# yum install -y nginx

# 3. 创建自定义目录并写入测试页面
[root@server ~]# mkdir -p /www/zy
[root@server ~]# echo "<h1>SELinux Test Page</h1>" > /www/zy/index.html

# 4. 修改Nginx配置文件,指向自定义目录
[root@server ~]# vim /etc/nginx/nginx.conf
server {
    listen       80;
    server_name  localhost;
    root         /www/zy;  # 关键修改
    index        index.html;
}

# 5. 重启Nginx并测试
[root@server ~]# systemctl restart nginx
[root@server ~]# curl http://localhost  # 输出403 Forbidden(上下文不匹配)

步骤 2:排障与修复

复制代码
# 1. 查看自定义目录的上下文
[root@server ~]# ls -Zd /www/zy
unconfined_u:object_r:default_t:s0 /www/zy  # 类型为default_t,不匹配httpd_t

# 2. 临时修改上下文(chcon)
[root@server ~]# chcon -Rv -t httpd_sys_content_t /www/zy

# 3. 验证修改
[root@server ~]# ls -Zd /www/zy
system_u:object_r:httpd_sys_content_t:s0 /www/zy

# 4. 重启Nginx并测试
[root@server ~]# systemctl restart nginx
[root@server ~]# curl http://localhost  # 输出<h1>SELinux Test Page</h1>(成功)

# 5. 永久化上下文(semanage + restorecon)
[root@server ~]# semanage fcontext -a -t httpd_sys_content_t "/www/zy(/.*/)?"
[root@server ~]# restorecon -Rv /www/zy  # 应用永久规则

实验 2:Nginx 自定义端口(7777)配置

目标:让 Nginx 绑定 7777 端口(默认 SELinux 拦截)。

步骤 1:修改 Nginx 端口并测试

复制代码
# 1. 修改Nginx配置文件
[root@server ~]# vim /etc/nginx/nginx.conf
server {
    listen       7777;  # 改为7777端口
    server_name  localhost;
    root         /www/zy;
    index        index.html;
}

# 2. 重启Nginx(失败)
[root@server ~]# systemctl restart nginx
Job for nginx.service failed because the control process exited with error code.

# 3. 查看错误日志(核心排障)
[root@server ~]# journalctl -xeu nginx
# 关键报错:SELinux is preventing nginx from name_bind access on the tcp_socket port 7777.

步骤 2:添加 SELinux 端口规则

复制代码
# 1. 查看httpd允许的端口
[root@server ~]# semanage port -l | grep http_port_t
http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000

# 2. 添加7777端口到http_port_t
[root@server ~]# semanage port -a -t http_port_t -p tcp 7777

# 3. 验证端口规则
[root@server ~]# semanage port -l | grep http_port_t
http_port_t                    tcp      7777, 80, 81, 443, 488, 8008, 8009, 8443, 9000

# 4. 重启Nginx并测试
[root@server ~]# systemctl restart nginx
[root@server ~]# curl http://localhost:7777  # 输出测试页面(成功)

实验 3:SSH 自定义端口(2222)配置

目标:修改 SSH 端口为 2222,适配 SELinux 规则。

步骤 1:修改 SSH 配置

复制代码
# 1. 编辑sshd配置文件
[root@server ~]# vim /etc/ssh/sshd_config
Port 2222  # 注释原Port 22,新增Port 2222

# 2. 重启sshd(失败)
[root@server ~]# systemctl restart sshd
Job for sshd.service failed because the control process exited with error code.

步骤 2:添加 SELinux 端口规则

复制代码
# 1. 查看ssh允许的端口
[root@server ~]# semanage port -l | grep ssh_port_t
ssh_port_t                     tcp      22

# 2. 添加2222端口到ssh_port_t
[root@server ~]# semanage port -a -t ssh_port_t -p tcp 2222

# 3. 验证规则
[root@server ~]# semanage port -l | grep ssh_port_t
ssh_port_t                     tcp      2222, 22

# 4. 重启sshd并测试
[root@server ~]# systemctl restart sshd
[root@server ~]# ssh root@localhost -p 2222  # 成功登录

5 常见问题与排障技巧

5.1 核心排障工具

  1. AVC 日志查询

    复制代码
    # 查看最近的SELinux拒绝日志
    [root@server ~]# ausearch -m avc -ts recent
    # 过滤特定服务的拒绝日志
    [root@server ~]# ausearch -m avc -c httpd
  2. SELinux 故障排查工具

    复制代码
    # 安装setroubleshoot(自动分析SELinux故障)
    [root@server ~]# yum install -y setroubleshoot
    # 查看故障建议
    [root@server ~]# sealert -l $(ausearch -m avc -ts recent | grep uuid | awk '{print $2}')

5.2 典型故障场景与解决

故障现象 根因 解决方法
Nginx 启动成功但访问报 403 网页目录上下文非httpd_sys_content_t chcon -R -t httpd_sys_content_t 目录semanage fcontext永久配置
服务绑定自定义端口失败 端口未加入对应 SELinux 端口类型 semanage port -a -t 端口类型 -p 协议 端口号
root进程无法访问文件 进程上下文与文件上下文不匹配 检查ps -Zls -Z,调整上下文或策略
重启后上下文恢复默认 使用chcon临时修改,未永久配置 semanage fcontext+restorecon永久设置

5.3 生产环境最佳实践

  1. 优先使用targeted策略,避免mls(配置复杂);
  2. 上线前先在Permissive模式运行,收集 AVC 日志,确认无越权后切换为Enforcing
  3. 避免直接禁用 SELinux(可通过布尔值 / 端口规则灵活调整权限);
  4. 对自定义目录 / 端口,使用semanage永久配置,而非chcon临时修改;
  5. 定期备份 SELinux 策略(/etc/selinux/),避免策略损坏导致服务异常。
相关推荐
viqjeee2 小时前
Linux ALSA驱动详解
linux·运维·服务器·alsa
夜未央312 小时前
HTTPS 原理与 PHP 文件包含及伪协议详解
运维·服务器·安全·网络安全
云川之下2 小时前
【网络】变长子网划分 (VLSM) 示例、点到点网络
运维·服务器·网络·变长子网
Dovis(誓平步青云)2 小时前
《epoll深度解析:从原理到使用,解锁Linux高并发I/O的核心能力(终篇)》
linux·运维·服务器·网络
不会kao代码的小王2 小时前
服务器、存储与网络核心知识全解析
运维·服务器·网络
Xの哲學2 小时前
Linux Workqueue 深度剖析: 从设计哲学到实战应用
linux·服务器·网络·算法·边缘计算
nix.gnehc2 小时前
Anolis23 环境下 Docker 与私有 Harbor 仓库完整部署指南
运维·docker·容器
代码游侠2 小时前
学习笔记——ARM Cortex-A 裸机开发实战指南
linux·运维·开发语言·前端·arm开发·笔记
weixin_307779132 小时前
在AWS上构建类Manus的生产级AI Agent服务
运维·人工智能·云计算·aws·agi