当前位置: 首页 > 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.gsyq.cn/news/1553326.html

相关文章:

  • Segger Embedded Studio实战:深入剖析链接脚本与内存布局的定制策略
  • RFID微型标签制作厂家的发展现状与未来前景深度分析
  • 宁波海曙区黄金回收行情与正规机构选择指南 - 专业黄金回收
  • 从零到一:基于xinetd与Docker的CTF Pwn靶场稳定部署指南
  • 2026重庆黄金回收优选榜单|收的顶综合指数领跑全城 - 奢侈品回收测评
  • 提升企业财税管理效率的上海财税公司解决方案
  • 石家庄井陉矿区黄金回收三个硬指标,教你安全变现 - 上门黄金回收
  • 2026临汾黄金回收白银回收铂金回收门店+工商公安双备案+中检认证商家推荐 - 诚金汇钻回收公司
  • 2026邯郸黄金回收白银回收铂金回收门店+工商公安双备案+中检认证商家推荐 - 诚金汇钻回收公司
  • 高价款秒结省心变现,2026哈尔滨黄金回收门店全维度测评 - 名奢变现站
  • 24AA01H与24LC01BH选型指南:从电压差异到实战应用
  • 剪映API云原生架构:3大核心能力构建智能视频自动化流水线
  • 5分钟掌握本地Cookie导出:Get cookies.txt LOCALLY隐私保护终极指南
  • 不踩坑!2026深圳8家黄金回收门店真实测评,金价、资质一目了然! - 开心测评
  • 复杂网络分析在科学概念演变研究中的应用与实践
  • 2026乌海黄金回收白银回收铂金回收门店实测|本地正规实体老店无套路门店推荐 - 中安检金银铂钻回收
  • 金价透明+无隐形消费!深圳8家黄金回收门店实测,附排名推荐! - 开心测评
  • 如何快速重置JetBrains IDE试用期:终极免费解决方案指南
  • 【电影】速度与激情系列 11部合集典藏版
  • 从芯片手册到系统理解:ATA DMA与USB OHCI硬件协议深度解析
  • 2026黑河黄金回收白银回收铂金回收门店+工商公安双备案+中检认证商家推荐 - 诚金汇钻回收公司
  • 2026嘉兴黄金回收白银回收铂金回收门店实测|本地正规实体老店无套路门店推荐 - 中安检金银铂钻回收
  • 商洛商南县行车龙门吊深度检修保养,液压升降平台故障维修,电动葫芦起重机配件销售 - 天堂海洋
  • J2Cache 多级缓存配置与使用
  • GD32F30x Keil 开发中 FreeRTOS 任务浮点运算 HardFault 的编译优化陷阱(一)
  • SoloX:10分钟上手移动端性能测试,实时监控CPU内存帧率
  • Android自动化测试框架对比:uiautomator与Appium的核心原理与选型指南
  • 仙桃音响改装:音改坊汽车音响旗舰店权威方案全解析,奔驰音响改装/问界原厂音响升级/音响改装,音响改装官方门店有哪些 - 音响改装门店分享
  • RAG 从入门到落地:我在企业级知识管理平台中集成大语言模型的完整实践
  • 从文案策划到视频渲染:多模型混合链路的最佳实践指南