Я пишу программу, которая будет работать как разные пользователи на основе аутентификации. Программа является root setuid и использует PAM-аутентификацию перед отменой привилегий.Программа все еще может открывать только корневые файлы после setuid и setgid
Я использую setuid()
и setgid()
для удаления привилегий после аутентификации. Но, по-видимому, этого недостаточно, так как после вызова этой программы у меня все еще есть доступ к файлам root только open()
.
Любые предложения?
#include <unistd.h>
#include <stdio.h>
// Code to drop Priv
int u = 1000, g = 1000;
printf("Starting User %d Group %d\n", (int) getuid(), (int) getgid());
printf("Setting User %d Group %d\n", u, g);
if (setgid(g) || setuid(u)) {
printf("Could not set uid or gid %d", errno);
return 0;
}
printf("Have set User %d Group %d\n", (int) getuid(), (int) getgid());
Выход из этого:
Starting User 0 Group 0
Setting User 1000 Group 1000
Have set User 1000 Group 1000
И все же после вызова этого кода моя программа все еще может открыть файл, который корневые только права:
-rw-r----- 1 root root 505 May 5 2015 rootFile
Код для открыто достаточно просто:
// Later
int fd = open("rootFile", O_RDONLY);
if (fd == -1) {
// Never happens
} else {
// Happens
}
Что такое 'pritnf'? Любые другие ошибки копирования? –
Нет. Я просто использовал модифицированную функцию 'printf' и должен был заменить эти вызовы функций, чтобы сделать ее имеющей смысл. –