微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

设置UID特权程序

如何解决设置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 部分问题中所描述的运行过程的一个示例。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。