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

打印 上一主题 下一主题

主题 934|帖子 934|积分 2802

折腾半天,又是问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
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

涛声依旧在

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表