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