---
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;
}
```