在 Linux 下做 C++ 权限配置,常见场景有 文件/目录权限、进程/用户权限、可执行文件权限、capabilities、SELinux/AppArmor 等。下面按“最常见 → 进阶”给你一个实用速查表。
ls -l test.cpp
示例:
-rw-r--r-- 1 user user 1234 test.cpp
含义:
r 读w 写x 执行rwx rwx rwx
chmod 755 a.out
| 数字 | 含义 |
|---|---|
| 7 | rwx |
| 6 | rw- |
| 5 | r-x |
| 4 | r– |
常用组合:
chmod 644 file.cpp # 普通文件
chmod 755 program # 可执行程序
chmod 700 dir/ # 私有目录
chmod u+x program
chmod o-r file
sudo chown user:user file
递归修改目录:
sudo chown -R user:user dir/
g++ main.cpp -o app
chmod +x app
./app
⚠️ SUID 有安全风险,只在必要时使用
sudo chown root:root app
sudo chmod u+s app
示例:
-rwsr-xr-x root root app
sudo chmod g+s dir/
#include <unistd.h>
#include <sys/types.h>
#include <iostream>
int main() {
std::cout << "UID: " << getuid() << std::endl;
std::cout << "EUID: " << geteuid() << std::endl;
}
getuid():真实用户geteuid():有效用户(SUID 后不同)setuid(1000); // 切换到普通用户
或:
seteuid(getuid());
sudo setcap cap_net_raw+ep ./app
常用 capability:
| 能力 | 用途 |
|---|---|
| cap_net_raw | 原始 socket |
| cap_net_admin | 网络管理 |
| cap_sys_admin | 系统管理(慎用) |
查看:
getcap ./app
清除:
sudo setcap -r ./app
✅ 比 SUID 更安全
#include <unistd.h>
if (access("file.txt", R_OK) == 0) {
// 可读
}
#include <sys/stat.h>
#include <fcntl.h>
open("file.txt", O_CREAT|O_WRONLY, 0644);
ls -Z app
chcon -t bin_t app
sudo aa-status
⚠️ 配置复杂,一般服务器安全加固时才用
| 场景 | 推荐 |
|---|---|
| 普通 C++ 程序 | chmod 755 |
| 需要 root 权限 | capabilities |
| 守护进程 | 启动后 setuid 降权 |
| 服务写日志 | 目录 chown + chmod 750 |
如果你愿意,可以告诉我:
我可以直接给你最合适的一套权限配置方案。