---
# System prepended metadata

title: SO Lista 6
tags: [SO]

---

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