Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 设置UID专用程序_Unix_Setuid - Fatal编程技术网

Unix 设置UID专用程序

Unix 设置UID专用程序,unix,setuid,Unix,Setuid,我有两个问题: 考虑一下Alice运行自己的Set-UID程序的情况 鲍勃写的。程序希望读取/etc/data中包含的文件,该文件可由 爱丽丝,但不是别人。这个程序可以访问这个文件吗 考虑一个进程想要访问一个文件进行读取的情况; 流程的有效用户ID为3000,实际用户ID为4000。如果文件是可读的 对于用户ID 4000,但对于用户ID 3000,此进程可以访问 档案 这实际上是同一个问题,在这两种情况下答案都是否定的,除非程序使用setresuid将其有效UID更改为真实UID,或者使用

我有两个问题:

  • 考虑一下Alice运行自己的Set-UID程序的情况 鲍勃写的。程序希望读取/etc/data中包含的文件,该文件可由 爱丽丝,但不是别人。这个程序可以访问这个文件吗

  • 考虑一个进程想要访问一个文件进行读取的情况; 流程的有效用户ID为3000,实际用户ID为4000。如果文件是可读的 对于用户ID 4000,但对于用户ID 3000,此进程可以访问 档案


  • 这实际上是同一个问题,在这两种情况下答案都是否定的,除非程序使用
    setresuid
    将其有效UID更改为真实UID,或者使用
    setfsuid
    (特定于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", 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);
    }
    
    一旦程序由
    alice
    运行,它就是第2部分问题中描述的流程运行示例

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