Do spisu tresci tematu 6

6.10.1 Zmiana wlasciciela - funkcja chown()



Spis tresci


Wstep

Duzo tego wyszlo o tej funkcji, ale nie trzeba w to sie wgryzac. Wystarczy, moim zdaniem, wiedziec, ze zeby zmienic wlasciciela pliku, trzeba byc superuserem dla systemu plikow (fsuid=0), wlasciciel nie moze komus pliku swojego oddac. Moze on sie nim za to bawic zmieniajac wlasciciela na siebie - funkcja nie zwroci bledu. Do grupy tyczy sie to samo, jednak z kodu zrodlowego to tak latwo nie wynika. Jest to troche namieszane, dlatego ze zmieniajac grupe, funkcja chown zmienia tez czas modyfikacji, i o ile do samej zmiany grupy nie musimy byc wlascicielem, to zeby zmieniac czas, musimy. Wiec zasady sa tylko dwie: dotychczasowy wlascicel lub superuser moze zmieniac grupe pliku, z tym, ze jesli to wlasciciel, to musi jeszcze nalezec do grupy, na ktora zmienia.


Objasnienia.

W Linuxie pewne pliki moga miec szczegolne wlasciwosci, o ktorych mowi pole inode->flags. Naleza do nich:


Struktura iattr

struct iattr {

};

Ta struktura sluzy do wymiany atrybutow i-wezla miedzy funkcjami wirtualnego (np. chown), a konkretnego file-systemu (np. notify_change).


Funkcja chown.

DEFINICJA: int chown (const char *filename, uid_t user, gid_t group);

DZIALANIE: zmiana wlasciciela i grupy dla pliku (inode->uid, inode-> gid). Dzialanie jej jest kilkupoziomowe. Najpierw przypisujemy wszystkie nowe atrybuty do struktury iattr , zaznaczamy w niej co chcemy zmieniac i wywolujemy notify_change, ktora wywoluje funkcje sprawdzajace prawa i dokonujace wlasciwych zmian.

ARGUMENTY: nazwa pliku, nowy uid i gid dla pliku

WYNIK: blad

ALGORYTM:

{

}


Zeby bylo wiadomo, jak to Linux robi, trzeba jeszcze wyjasnic:

funkcja notify_change

DEFINICJA: int notify_change (inode *inode, struct iattr *iattr);

DZIALANIE: sprawdzenie uprawnien procesu wolajacego, zmiana atrybutow i-wezla.

ARGUMENTY: i-wezel i nowe dla niego atrybuty.

WYNIK: blad

ALGORYTM:

{

}



Zrodla informacji

Tylko pliki zrodlowe Linuxa:

    Odpowiednie funkcje z tych plikow, z moim komentarzem do prawie kazdej linijki znajdziecie tu:



Pytania i odpowiedzi

No problems detected.

(ogolne pytania p. Raczunasa sa na stronie write).


Autor: Mateusz Hauzer
E-mail: mhauzer@students.mimuw.edu.pl

tego samego autora: funkcja write.