设置UID特权程序

问题描述

我有2个问题:

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

  2. 考虑进程要访问文件以进行读取的情况; 进程的有效用户ID是3000,实际用户ID是4000。如果文件可读 对于用户ID 4000,而不是用户ID 3000,此过程可以访问 文件?

解决方法

这实际上是一个相同的问题,在两种情况下答案都是“否”,除非程序使用setresuid将其有效UID更改为其实际UID,否则它使用{{ 1}}(特定于Linux)将其文件系统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",getuid());
    FILE *file = fopen("/tmp/alices","r");
    if (file == NULL) {
        perror("no reads");
        exit(1);
    }
    flipuids();
    printf("euid=%d uid=%d\n",getuid());
    fclose(file);
}

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

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

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...