如何解决设置UID特权程序
我有2个问题:
-
考虑Alice运行自己的Set-UID程序的情况 由鲍勃。该程序要读取/ etc / data中包含的文件,可由 爱丽丝,但没有其他人。该程序可以访问文件吗?
-
考虑进程要访问文件以进行读取的情况; 进程的有效用户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 举报,一经查实,本站将立刻删除。