chmod J5ZDRAE3XQ7HI3LLLJML2MKZLEVC4URK57T6VRA





6.10.2 Funkcja chmod()





Do spisu tresci tematu 6

6.10.2 Funkcja chmod()



Spis tresci


Wstep.

Opis struktury danych

Funkcja chmod i funkcje pomocnicze

Zrodla informacji





Wstep

Funkcja chmod nalezy do funkcji obslugujacych i-wezly. Umozliwia ona zmiane trybu dostepu do pliku
. Nie mozna jej jednak uzyc do zmiany rodzaju pliku. Obowiazujacy identyfikator uzytkownika
procesu wywolujacego te funkcje musi byc rowny identyfikatorowi wlasciciela pliku lub procesem wywolujacym
musi byc nadzorca systemu.





Opis struktur danych



Ponizej jest przedstawione znaczenie bitow slowa
dostepu do pliku zapisanego w i-wezle na polu mode.



bit setuid - bit nadawania efektywnego identyfikatora uzytkownika dla procesu wykonujacego plik,

bit setgid - bit nadawania efektywnego identyfikatora grupy dla procesu wykonujacego plik

bit przyklejania - gdy 1, to w pamieci zostaje kopia pliku po jego wykonaniu

typ pliku (4 bity z lewej, osemkowo):



Struktura iattr

struct iattr {


unsigned int ia_valid; /* bity mowia, co chcemy zmienic */


umode_t ia_mode; /* nowy tryb dostepu dla i-wezla */

uid_t ia_uid; /* nowy uid */

gid_t ia_gid; /* nowy gid */

... (i inne, np. czas dostepu i modyfikacji i-wezla)


};

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






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


immutable - nikt nie dostaje do niego
prawa do pisania, moga byc tylko czytane


append-only - moga byc otwierane w
trybie pisania, ale dane sa zawsze dodawane na koncu pliku. Pliki te nie
moga byc usuwane, ani ich nazwy zmieniane




Funkcja chmod i funkcje
pomocnicze

Funkcja chmod:

DEFINICJA: int chmod (const char *filename, mode_t mode);

WYNIK: blad lub 0
errno=EPERM(nie mozna zmienic praw dostepu
wlasciciela lub grupy z powodu nie spelnienia ktoregokolwiek z warunkow opisanych
ponizej w fukcji inode_change_ok)

Implementacja funkcji:

{
Przeksztalc nazwe sciezkowa pliku w i-wezel;

Jesli system plikow jest zamontowany tylko do czytania
lub i-wezel jest immutable lub append-only,
to: zwolnij i wezel (pobrany w namei) - funkcja iput - i wyjdz;

Jesli mode=-1, to ustaw mode na stary inode->mode

Wez cztery bity z lewej (oznaczajace typ pliku) ze starego slowa praw dostepu z i-wezla
a reszte bitow z argumentu mode. Nowo uformowane slowo wpisz na pole iattr->ia_mode

Na polu iattr->a_valid ustaw bity mowiace, ze chcemy zmienic tryb dostepu i czas
ostatniej modyfikacji i-wezla

Zaznacz w i-wezle ze jest brudny(inode->i_dirt)

Ustaw czas ostatniej modyfikacji i-wezla (iattr->ia_ctime) na obecny

Sprawdz czy mozna zmienic prawa wykonujac
funkcje inode_change_ok

Jesli inode_change_ok nie zwrocila bledu to zmien i-wezel (wykonujemy procedure inode_setattr)

Zwolnij i-wezel (iput) pobrany w namei

Zwroc blad z inode_change_ok
}/*koniec chmod*/



Funkcja inode_change_ok:

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


WYNIK: 0 lub blad
errno=EPERM(nie mozna zmienic praw, uzytkownika lub grupy)

Opis algorytmu:

{
Zerowa zasada: superuser dla systemu plikow moze wszystko! Jest tak,
gdy fsuid procesu (efektywny identyfikator uzytkownika dla systemu plikow)
jest rowny 0.

Pozostale zasady: (o tym, co chcemy zmieniac mowi pole iattr->ia_valid)
Jesli chcesz zmienic:
uid pliku - musisz zmieniac wlasciciela swojego pliku
na siebie (nie mozna plikow komus oddawac, jesli nie jest superuserem)

grupe (gid) dla pliku, musisz nalezec do grupy docelowej
(nie musisz byc wlascicielem) lub zmieniac na grupe dotychczasowa.

slowo dostepu, musisz byc wlascicielem. Uwaga:
jesli nie nalezysz do grupy, na ktora chcesz zmienic, to bit setgid
zostanie wyzerowany. Stanie sie tak rowniez, gdy nie chcesz zmieniac grupy
(ale chcesz prawa dostepu) i nie nalezysz do dotychczasowej grupy pliku.

czas modyfikacji pliku (mtime) lub dostepu do pliku (atime),
musisz posiadac ten plik.
}/*koniec inode_change_ok*/






Zrodla informacji


Pliki zrodlowe linuxa:

linux/fs/open.c

linux/fs/inode.c




Autor:Andrzej Silaczuk








Wyszukiwarka

Podobne podstrony:
chmod 2
Chmod prawa i atrybuty linux
chmod 1
chmod
function chmod
function chmod
chmod
Unix Station chmod File Permissions
scr chmod
scr chmod en
function ftp chmod

więcej podobnych podstron