温馨提示×

Linux C++怎样配置权限

小樊
43
2026-08-16 00:52:40
栏目: 编程语言

在 Linux 下用 C++ 配置权限,通常分为两大类场景:
1️⃣ 文件/目录权限(chmod、chown)
2️⃣ 进程权限(setuid、capabilities、用户切换)

下面按常见需求系统说明。


一、文件/目录权限配置(最常见)

1️⃣ 使用 chmod(修改权限)

C 标准库方式(推荐)

#include <sys/stat.h>

int main() {
    chmod("test.txt", 0644);  // rw-r--r--
    return 0;
}

权限含义:

0644
0   文件类型占位
6   owner: rw
4   group: r
4   other: r

常用权限:

权限 含义
0644 普通文件
0755 可执行文件 / 目录
0700 仅 owner 可访问

2️⃣ 使用 chown(修改所有者)

#include <unistd.h>

int main() {
    chown("test.txt", 1000, 1000); // uid, gid
    return 0;
}

⚠️ 只有 root 才能成功


3️⃣ 使用 umask(设置默认权限)

#include <sys/stat.h>

int main() {
    umask(0022);  // 新建文件默认 755 / 644
    return 0;
}

二、进程权限配置(高级)

1️⃣ setuid(以所有者身份运行)

示例

gcc test.cpp -o test
sudo chown root:root test
sudo chmod u+s test
#include <iostream>
#include <unistd.h>

int main() {
    std::cout << "UID: " << getuid() << std::endl;
    return 0;
}

⚠️ setuid 程序必须非常小心(安全风险)


2️⃣ 使用 capabilities(比 setuid 安全)

sudo setcap cap_net_raw+ep ./program

常见 capability:

能力 用途
CAP_NET_RAW 原始 socket
CAP_SYS_ADMIN 系统管理
CAP_DAC_OVERRIDE 绕过文件权限

三、运行时检查/修改权限

1️⃣ 检查当前用户

#include <unistd.h>

getuid();   // 实际用户
geteuid();  // 有效用户

2️⃣ 暂时提权(不推荐)

seteuid(0);  // 成为 root(需权限)

四、目录权限示例

#include <sys/stat.h>

mkdir("mydir", 0755);

五、常见错误

Permission denied

  • 没用 root
  • 文件权限不足
  • 目录没有执行权限 x

setuid 无效

  • 脚本语言不支持
  • 文件系统挂载了 nosuid

六、推荐方案总结

需求 推荐方式
修改文件权限 chmod
修改文件所有者 chown
需要 root 能力 capabilities
程序以 root 运行 setuid(谨慎)
新建文件默认权限 umask

如果你能具体说明:
是文件权限?进程权限?服务权限?
普通用户 / root / systemd 服务?

我可以给你更精确的配置示例。

0