设置 UID 特权程序

set-UID privieged programs

我有 2 个问题:

  1. 考虑 Alice 运行一个拥有的 Set-UID 程序的情况 鲍勃。程序要读取/etc/data中包含的文件,可读 爱丽丝,但没有其他人。这个程序可以访问文件吗?

  2. 考虑进程想要访问文件进行读取的情况; 进程的有效用户ID为3000,真实用户ID为4000 如果文件可读 对于用户 ID 4000,但对于用户 ID 3000,此进程可以访问 文件?

这确实是同一个问题,两种情况的答案都是否,除非程序使用setresuid将其有效UID更改为其真实UID,或者它使用 setfsuid (Linux-specific) 将其文件系统 UID 更改为其真实 UID。但是程序必须针对这种情况进行设计;从不操纵其 UID/GID 并且仅访问文件的普通程序将无法通过权限检查。

以下是如何用代码回答第 1 部分问题的具体示例:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

static void flipuids(void) {
    uid_t r = getuid();
    uid_t e = geteuid();
    if (setreuid(e, r)) {
        perror("failed to flip");
        exit(1);
    }
}

int main(int argc, char *argv[]) {
    printf("euid=%d uid=%d\n", geteuid(), getuid());
    flipuids();
    printf("euid=%d uid=%d\n", geteuid(), getuid());
    FILE *file = fopen("/tmp/alices", "r");
    if (file == NULL) {
        perror("no reads");
        exit(1);
    }
    flipuids();
    printf("euid=%d uid=%d\n", geteuid(), getuid());
    fclose(file);
}

如果您chmod +s ./uidaccess确保程序具有这些权限:

$ ls -l ./uidaccess
-rwsr-sr-x 1 bob bob 17008 Apr 18 09:34 uidaccess

一旦程序被 alice 运行,它就是一个按照您第 2 部分问题中描述的过程运行的示例。