设置 UID 特权程序
set-UID privieged programs
我有 2 个问题:
考虑 Alice 运行一个拥有的 Set-UID 程序的情况
鲍勃。程序要读取/etc/data中包含的文件,可读
爱丽丝,但没有其他人。这个程序可以访问文件吗?
考虑进程想要访问文件进行读取的情况;
进程的有效用户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 部分问题中描述的过程运行的示例。
我有 2 个问题:
考虑 Alice 运行一个拥有的 Set-UID 程序的情况 鲍勃。程序要读取/etc/data中包含的文件,可读 爱丽丝,但没有其他人。这个程序可以访问文件吗?
考虑进程想要访问文件进行读取的情况; 进程的有效用户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 部分问题中描述的过程运行的示例。