找回密码
 立即注册
首页 业界区 安全 Linux 下 C++ 设置子进程 capability、切换用户、execl ...

Linux 下 C++ 设置子进程 capability、切换用户、execl调用

粹脍誊 2025-6-1 21:07:28
目录

  • 设定时间的程序
  • 子进程切换用户后设置时间
  • execl 调用
  • 找不到动态库

    • 方法 1:使用 rpath 硬编码库路径
    • 方法 2:将库路径加入系统配置
    • 方法 3:将库文件复制到标准目录

  • 最终解决方案 Ambient

折腾半天,又是问deepseek又是问朋友,终于解决了。
Linux 有一个能力(capability)机制,相当于是对root权限的细分,你可以把这些权限细分给进程或程序。能力的介绍可以看看这个博客,我就不多说了。
出于安全考虑,我需要给子进程设置能力,同时又要切换到普通用户,再用execl执行别的程序。结果搞半天都没搞定。
关键的地方在于,execl调用可执行文件后的能力,既取决于进程本身,也取决于可执行文件的能力设置。我进行了一些测试,终于是搞定了。以下是一个调用子进程后通过execl执行设定系统时间的程序的例子。设定系统时间需要root权限,或者 CAP_SYS_TIME能力。测试的操作系统为 CentOS 7.6
设定时间的程序

首先,我们执行timedatectl set-ntp false关闭系统自动校时。
然后,写一个设定时间、打印时间然后睡觉的C++程序。
[code]#include #include #include #include // Function to set the system timevoid SetSystemTime(const struct tm& newTime) {    struct timeval tv;    tv.tv_sec = mktime(const_cast(&newTime));  // Convert struct tm to time_t    tv.tv_usec = 0;    if (settimeofday(&tv, nullptr) != 0) {        perror("Failed to set system time");    } else {        std::cout
您需要登录后才可以回帖 登录 | 立即注册