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

UTS 隔离(主机名隔离)


一、本节目标

上一节我们通过 clone 创建了一个子进程,但还没有在子进程外围包上名称空间。本节的任务就是:clone 定制系统调用参数,在子进程外围创建名称空间,实现资源隔离。

我们先从最直观、最容易观察的资源开始 —— 主机名(UTS)的隔离。对应的系统调用参数叫 CLONE_NEWUTS


二、代码调整

相比上一节的代码,本次做了两处关键修改

2.1 修改一:为 clone 添加 CLONE_NEWUTS 参数

clone 调用中,原来只有 SIGCHLD 一个参数,现在用 | 加上 CLONE_NEWUTS

int container_pid = clone(container_main, container_stack+STACK_SIZE, CLONE_NEWUTS | SIGCHLD, NULL);

这样 clone 除了创建子进程之外,还会依据 CLONE_NEWUTS 参数在外围构建一个名称空间,规定主机名资源是隔离的

2.2 修改二:在 container_main 中设定主机名

光有 CLONE_NEWUTS 隔离还不够 —— 我们还需要让名称空间里面有自己独特的主机名,才能看出它跟宿主机的区别。所以在 container_main 中,execv 之前加一行 sethostname

sethostname("container",10);

三、完整代码

#define _GNU_SOURCE 
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <sched.h>
#include <signal.h>
#include <unistd.h>/* 定义一个给 clone 用的栈,栈大小1M */
#define STACK_SIZE (1024 * 1024) 
static char container_stack[STACK_SIZE];char* const container_args[] = {"/bin/bash",NULL
};int container_main(void* arg)
{printf("Container - inside the container!\n");/* 直接执行一个shell,以便我们观察这个进程空间里的资源是否被隔离了 */sethostname("container",10);execv(container_args[0], container_args);printf("Something's wrong!\n");return 1;
}int main()
{printf("Parent - start a container!\n");/* 调用clone函数,其中传出一个函数,还有一个栈空间的(为什么传尾指针,因为栈是反着的) */int container_pid = clone(container_main, container_stack+STACK_SIZE, CLONE_NEWUTS | SIGCHLD, NULL);/* 等待子进程结束 */waitpid(container_pid, NULL, 0);printf("Parent - container stopped!\n");return 0;
}

四、编译与运行演示

4.1 编译

[root@test04 container_test]# gcc -o test2 test.c

4.2 运行并验证隔离效果

[root@test04 container_test]# ./test2
Parent - start a container!
Container - inside the container!

此时已经进入容器环境,查看主机名:

[root@container container_test]# hostname
container

主机名已经变成了 container,说明容器内的主机名与宿主机隔离了。注意看命令提示符也从 root@test04 变成了 root@container

4.3 退出容器,验证宿主机不受影响

[root@container container_test]# exit
exit
Parent - container stopped![root@test04 container_test]# hostname
test04

退出容器后,宿主机的主机名仍然是 test04,没有被容器内的 sethostname 影响。这就是 UTS 隔离的效果 —— 容器内外的主机名各自独立、互不干扰。


五、本节小结

要素 内容
隔离的资源 UTS(主机名)
系统调用参数 CLONE_NEWUTS
验证方式 容器内 hostname 显示 container,宿主机 hostname 显示 test04,互不影响

本节实现了名称空间的主机名隔离,下一节继续隔离其他资源。

http://www.jsqmd.com/news/1041417/

相关文章:

  • 嘉兴秀洲区商圈实测:黄金回收价差有多大 - 专业黄金回收
  • 2026绥化黄金回收白银回收铂金回收门店实测|本地正规实体老店无套路门店推荐 - 中安检金银铂钻回收
  • 绍兴嵊州市市民须知:黄金回收只看三个硬指标,这样卖才不亏 - 上门黄金回收
  • RFID微型标签制作厂家的发展现状与未来前景深度分析
  • 宁波海曙区黄金回收行情与正规机构选择指南 - 专业黄金回收
  • 2026重庆黄金回收优选榜单|收的顶综合指数领跑全城 - 奢侈品回收测评
  • 【HA】巧用Passive BLE Monitor,无感接入小米温湿度计2代数据
  • 从零到一:基于xinetd与Docker的CTF Pwn靶场稳定部署指南
  • 深入解析UDS 0x85服务:精准掌控DTC诊断开关的艺术
  • 平顶山汝州市幕墙工程专业施工队|铝板幕墙施工外墙铝板装修现场装配|铝板设计安装铝单板加工安装代工 - 天堂海洋
  • 2026荆门黄金回收白银回收铂金回收门店+工商公安双备案+中检认证商家推荐 - 诚金汇钻回收公司
  • 绍兴上虞区黄金回收五维测评与机构亮点解析 - 上门黄金回收
  • 2026文山黄金回收白银回收铂金回收门店实测|本地正规实体老店无套路门店推荐 - 中安检金银铂钻回收
  • 绍兴诸暨黄金回收指南:抓住919元 克高价时机 - 上门黄金回收
  • 2026北京本地人必选防水补漏检测维修公司靠谱服务商TOP5推荐:房屋渗漏水检测维修/卫生间/厨房/天花板/阳台/外墙渗漏水检测补漏维修-暗管漏水检测专业仪器精准定位漏水点 - 即刻修防水
  • 网上登报挂失流程是什么?网上登报挂失费用是多少?
  • Mapbox GL JS 3.25.0 发布:多项功能改进与错误修复,提升性能与稳定性
  • 提升企业财税管理效率的上海财税公司解决方案
  • 深圳南山区金价高企卖金正当时 - 上门黄金回收
  • M68HC16 MCU底层机制:断点、总线仲裁与复位详解
  • 石家庄井陉矿区黄金回收三个硬指标,教你安全变现 - 上门黄金回收
  • 2026临汾黄金回收白银回收铂金回收门店+工商公安双备案+中检认证商家推荐 - 诚金汇钻回收公司
  • 2026淮北黄金回收白银回收铂金回收门店+工商公安双备案+中检认证商家推荐 - 诚金汇钻回收公司
  • 从孤立到对话:Talking-Heads Attention如何重塑多头注意力
  • 2026邯郸黄金回收白银回收铂金回收门店+工商公安双备案+中检认证商家推荐 - 诚金汇钻回收公司
  • 高价款秒结省心变现,2026哈尔滨黄金回收门店全维度测评 - 名奢变现站
  • 常州武进区黄金回收指南:三种硬指标让你卖金不踩坑 - 上门黄金回收
  • 仙桃音响改装难题破解:音改坊汽车音响旗舰店5大权威优势揭秘,保时捷原厂音响升级/路虎音响改装,音响改装旗舰店口碑推荐 - 音响改装门店分享
  • 24AA01H与24LC01BH选型指南:从电压差异到实战应用
  • 2026十堰黄金回收白银回收铂金回收门店实测|本地正规实体老店无套路门店推荐 - 中安检金银铂钻回收