Programm mit SUID -Flag funktioniert nicht ordnungsgemäßLinux

Linux verstehen
Guest
 Programm mit SUID -Flag funktioniert nicht ordnungsgemäß

Post by Guest »

Ich habe ein einfaches Programm, um zu überprüfen, ob ein bestimmter Benutzer (1001) einen Lesezugriff auf eine bestimmte Datei hat. Der Eigentümer des Programms ist "root" und zusätzlich hat das Programm "S" (SUID) Flag -Set. Nach der Ausführung von 'sudo su' und Ausführen des Programms ist das Ergebnis korrekt. Die Funktionen "Zugriff" zeigen, dass der Benutzer 1001 keinen Zugriff auf die Datei hat.

Code: Select all

Program user ids at start: real: 0, efective: 0, set: 0
Switch to user uid: 1001 gid: 1001
Program user id's after switch: real: 1001, efective: 1001, set: 1001
Program group id's after switch: real: 1001, efective: 1001, set: 1001
File read permission acces: -1,  euidacces: -1
< /code>
Aber nach dem Anmelden als Benutzer 1000, der der Eigentümer der getesteten Datei ist und alle Rechte daran hat, ist das Ergebnis falsch.
Das Programm gibt den Benutzer 1001 zurück Read Access und alle angezeigten Nachrichten geben an, dass das Programm korrekt auf den Benutzer 1001 umgestellt wurde.Program user ids at start: real: 1000, efective: 0, set: 0
Switch to user uid: 1001 gid: 1001
Program user id's after switch: real: 1001, efective: 1001, set: 1001
Program group id's after switch: real: 1001, efective: 1001, set: 1001
File read permission acces: 0, euidaccess: 0
< /code>
Wo ist das [url=viewtopic.php?t=11587]Problem[/url] ?? Ich habe einen Fehler in der Bibliothek gefunden?

Das Programm wird zusammengestellt und unter Ubuntu 22.04 ausgeführt. 22.04) < /p>
Programmquelle mit 'GCC Test.c -o test2': < /p>
kompiliert#define _GNU_SOURCE
#include 
#include 
#include 
#include 
#include 

int main(int argc, char **argv) {
uid_t uid = 1001, ruid, euid, suid;
uid_t rgid, egid, sgid;
const char *path = "/backed11/test2.bin";
// Output from ls: -rw-rw---- 1 1000 1000 16401 gru 30 11:49 /backed11/test2.bin
struct passwd *pw = getpwuid(uid);
if(pw == NULL) {
printf("Incorrect user ID: %d errno: %d\n", uid, errno);
return(errno);
}
if(getresuid(&ruid, &euid, &suid) < 0) {
printf("getresuid error: %d\n", errno);
return(errno);
}
printf("Program user ids at start: real: %d, efective: %d, set: %d\n", ruid, euid, suid);
printf("Switch to user uid: %d gid: %d\n", pw->pw_uid, pw->pw_gid);
int st = setresgid(pw->pw_gid, pw->pw_gid, pw->pw_gid);
if(st < 0) {
printf("setregid error for gid %d : %d\n", pw->pw_gid, errno);
return(errno);
}
st = setresuid(pw->pw_uid, pw->pw_uid, pw->pw_uid);
if(st < 0) {
printf("setreuid error: %d\n", errno);
return(errno);
}
if(getresuid(&ruid, &euid, &suid) < 0) {
printf("getresuid error: %d\n", errno);
return(errno);
}
if(getresgid(&rgid, &egid, &sgid) < 0) {
printf("getresgid error: %d\n", errno);
return(errno);
}
printf("Program user id's after switch: real: %d, efective: %d, set: %d\n", ruid, euid, suid);
printf("Program group id's after switch: real: %d, efective: %d, set: %d\n", rgid, egid, sgid);
st = access(path, R_OK);
int st2 = euidaccess(path, R_OK);
printf("File read permission acces: %d, euidaccess: %d\n", st, st2);
return 0;
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post