Linux 脚本执行:由一个补丁分析说起

事情背景 补丁链接:a4ae32c71fe9 (“exec: Always set cap_ambient in cap_bprm_set_creds”) 补丁信息中提到,该补丁是为了确保 cap_bprm_set_creds() 每次都会设置 cap_ambient 变量。另外还提到了下述内容: … if there is a suid or sgid script with an interpreter that has neither the suid nor the sgid bits set the interpreter should be able to accept …

进程切换与抢占

进程切换 概念 进程切换,又称上下文切换,分为 自愿(voluntary)切换:进程本身无法继续运行 例如需要等待 IO 完成(TASK_UNINTERRUPTABLE),或等待某个资源或事件的就绪(TASK_INTERRUPTIBLE),或正在被 debug/trace(TASK_STOPPED/TASK_TRACED) 强制(involuntary)切换:进程还可以运行,但内核不让它运行了 例如进程时间片用尽,或有优先级更高的其他进程 又例如进程自己决定主动让出 CPU(注意:这不属于自愿切换,因为进程仍处于 TASK_RUNNING 状态) 用户态程序通过 sched_yield …

关于一个神奇的 Linux 目录权限问题的探究

TL;DR su 与单纯的 set{u,g}id 不一样:前者会通过 setgroups 系统调用来设置进程的 Supplementary Group1;而后者不会,只会修改进程的 {,s,e,fs}{u,g}id。 Supplementary Group 在内核中体现为 struct cred 下的 group_info,本质上是一个长度不固定的 gid 数组(类似 C++ 中的 string_view) 通过内核代码(init_cred 和 init_groups)确认,内核不会为进程添加 Supplementary Group;且 /etc/group 中也没有对应的条目,但 root 用户进程的 Supplementary …

利用云服务器建立个人博客网站

背景 所谓“云服务器”,就是运行在云上的一个虚拟机,可供用户远程连接后像一台普通 PC 那样去使用。有意思的是,之前不去了解还不知道:其实就是这么个玩意儿,现国内几大厂商提供这类产品时,起的名字都不一样:华为云的叫 Elastic Cloud Server(ECS) ;腾讯云的称 Cloud Virtual Machine(CVM) 或 Lighthouse ;而阿里云则是 Elastic Compute Service(也是 ECS) 。看着唬人,实际上都一回事。 一开始我的个人博客是借助 Gitee Page 服务搭建的。后来使用该服务需要提供的个人信息也越来越多,包括身份证照片和本人手持身份证照片这种敏感信息。我心想,这要求跟 …

Makefile 实例参考

通过将一个 Makefile 从最原始的状态一步步简化,来展现多种常见的 Makefile 语法和技巧。 最初始的形态: 1main: main.o submodule.o utils.o 2 gcc main.o submodule.o util.o -o main 3 4main.o: main.c submodule.h utils.h 5 gcc -g -c main.c -o main.o 6 7submodule.o: submodule.c submodule.h utils.h 8 gcc -g -c submodule.c -o submodule.o 9 10utils.o: utils.c utils.h 11 …