--- title: SO Lista 6 tags: SO author: Mateusz Reis --- # SO LISTA 6 ## Zadanie 1 ||ruid|euid|suid| |-|-|-|-| |start|1000|0|0| |setuid(2000)|2000|2000|2000| |setreuid(-1,2000)|1000|2000|2000| |seteuid(2000)|1000|2000|0| |setresuid(-1,2000,3000)|1000|2000|3000| Proces o ruid=0,euid=1000,suid=1000 nie jest uprzywilejowany ale może się takim stać po wywołaniu setreuid(-1,0) ## Zadanie 2 - bity: > r - możliwość czytania pliku > w - możliwość pisania do pliku > x - możliwość wykonywania pliku > setgid - jeśli ustawiony wszystkie pliki w katalogu po utowrzeniu dziedziczą grupę katalogu a nie grupę twórcy, dodatkowo podkatalogi utworzone w tym katalogu dziedziczą bit setgid > sticky - pliki mogą być usuwane tylko przez `root` oraz właściciela pliku (jesli bit nie jest ustawiony kazdy z mozliwoscia zapisu i wykonywania może usunąć plik) ```c= int my_acces(struct stat* sb,int mode) { if(sb==NULL) return -1; int ac=7; // ucinamy mode w razie gdyby zawierał jakieś dodatkowe bity ac&=mode; uid_t us=getuid(); if(sb->st_uid==us) return (((sb->st_mode>>6)&ac)^ac)?-1:0; int gc=16; gid_t gs[gc]; /* Tutaj powinien być mechanizm z zadania 7 który rozszerza tablice gs oraz ustawia gc tak aby pomiescic wszystkie grupy */ for(int i=0;i<gc;i++) if(sb->st_gid==gs[i]) return (((sb->st_mode>>3)&ac)^ac)?-1:0; return ((sb->st_mode&ac)^ac)?-1:0; } ```