А.В. Столяров - Введение в операционные системы (1114673), страница 17
Текст из файла (страница 17)
access permissions ) îïðåäåëÿþò, êòî èç ïîëüçîâàòåëåé (òî÷íåå, ïðîöåññîâ) êàêèå îïåðàöèè ìîæåò ñ äàííûì ôàéëîì ïðîèçâåñòè.Ïðàâà õðàíÿòñÿ â èíäåêñíîì äåñêðèïòîðå â âèäå 12-áèòíîãî ñëîâà. Ìëàäøèå 9 áèò ýòîãî ñëîâà îáúåäèíåíû â òðè ãðóïïû ïî òðè áèòà; êàæäàÿ ãðóïïàçàäàåò ïðàâà äîñòóïà äëÿ âëàäåëüöà ôàéëà, äëÿ ãðóïïû âëàäåëüöà è äëÿâñåõ îñòàëüíûõ ïîëüçîâàòåëåé. Òðè áèòà â êàæäîé ãðóïïå îòâå÷àþò çà ïðàâî÷òåíèÿ ôàéëà, ïðàâî çàïèñè â ôàéë è ïðàâî èñïîëíåíèÿ ôàéëà.×òîáû óçíàòü ïðàâà äîñòóïà ê òîìó èëè èíîìó ôàéëó, ìîæíî âîñïîëüçîâàòüñÿ êîìàíäîé ls -l, íàïðèìåð:$ ls -l /bin/cat-rwxr-xr-x 1 root root14232 Feb 4 2003 /bin/catÐàñïîëîæåííàÿ â íà÷àëå ñòðîêè ãðóïïà ñèìâîëîâ -rwxr-xr-x ïîêàçûâàåò òèïôàéëà (ïåðâûé ñèìâîë − ìèíóñ îçíà÷àåò, ÷òî ìû èìååì äåëî ñ îáûêíîâåííûì ôàéëîì, áóêâà d îçíà÷àëà áû êàòàëîã è ò.ï.) è ïðàâà äîñòóïà, ñîîòâåòñòâåííî, äëÿ âëàäåëüöà (â äàííîì ñëó÷àå rwx, ò.å. ÷òåíèå, çàïèñü è èñïîëíåíèå), ãðóïïû è âñåõ îñòàëüíûõ (â äàííîì ñëó÷àå r-x, ò.å.
ïðàâà íà çàïèñüîòñóòñòâóþò). Òàêèì îáðàçîì, ôàéë /bin/cat äîñòóïåí ëþáîìó ïîëüçîâàòåëþíà ÷òåíèå è èñïîëíåíèå, íî ìîäèôèöèðîâàòü åãî ìîæåò òîëüêî ïîëüçîâàòåëüroot (ò.å. àäìèíèñòðàòîð).Ïîñêîëüêó ãðóïïà èç òðåõ áèò ñîîòâåòñòâóåò ðîâíî îäíîé öèôðå âîñüìåðè÷íîé ñèñòåìû ñ÷èñëåíèÿ, îáùåïðèíÿòîé ÿâëÿåòñÿ ïðàêòèêà çàïèñè ñëîâàïðàâ äîñòóïà ê ôàéëó â âèäå âîñüìåðè÷íîãî ÷èñëà, îáû÷íî òðåõçíà÷íîãî.Ïðè ýòîì ìëàäøèé ðàçðÿä (ïîñëåäíÿÿ öèôðà) ñîîòâåòñòâóåò ïðàâàì äëÿ âñåõïîëüçîâàòåëåé, ñðåäíÿÿ − ïðàâàì äëÿ ãðóïïû è ñòàðøàÿ (îáû÷íî îíà èäåòñàìîé ïåðâîé) öèôðà îáîçíà÷àåò ïðàâà äëÿ âëàäåëüöà.
Ïðàâà íà èñïîëíåíèåñîîòâåòñòâóþò 1, ïðàâà íà çàïèñü − 2, ïðàâà íà ÷òåíèå − 4; ñîîòâåòñòâóþùèåçíà÷åíèÿ ñóììèðóþòñÿ, ò.å., íàïðèìåð, ïðàâà íà ÷òåíèå è çàïèñü îáîçíà÷àþòñÿ öèôðîé 6 (4 + 2), à ïðàâà íà ÷òåíèå è èñïîëíåíèå − öèôðîé 5 (4 + 1).Òàêèì îáðàçîì, ïðàâà äîñòóïà ê ôàéëó /bin/cat èç íàøåãî ïðèìåðà ìîæíî çàêîäèðîâàòü âîñüìåðè÷íûì ÷èñëîì 07553 .3 Îáðàòèòåâíèìàíèå, ÷òî ÷èñëî çàïèñàíî ñ íóëåì âïåðåäè; ñîãëàñíî ïðàâèëàì ÿçûêà C ýòî îçíà÷àåò,÷òî ÷èñëî çàïèñàíî â âîñüìåðè÷íîé ñèñòåìå76Äëÿ êàòàëîãîâ èíòåðïðåòàöèÿ áèòîâ ïðàâ äîñòóïà íåñêîëüêî îòëè÷àåòñÿ.Ïðàâà íà ÷òåíèå êàòàëîãà äàþò âîçìîæíîñòü ïðîñìîòðåòü åãî ñîäåðæèìîå.Ïðàâà íà çàïèñü ïîçâîëÿþò ìîäèôèöèðîâàòü êàòàëîã, ò.å.
ñîçäàâàòü è óíè÷òîæàòü â íåì ôàéëû (ïðè÷åì óäàëèòü ìîæíî è ÷óæîé ôàéë, à òàêæå òàêîé,íà êîòîðûé ïðàâ äîñòóïà íåò, ò.ê. äîñòàòî÷íî èìåòü ïðàâà äîñòóïà íà çàïèñüâ ñàì êàòàëîã). ×òî êàñàåòñÿ áèòà ïðàâ íà èñïîëíåíèå, äëÿ êàòàëîãà ýòîòáèò îçíà÷àåò âîçìîæíîñòü êàêèì-ëèáî îáðàçîì èñïîëüçîâàòü ñîäåðæèìîå êàòàëîãà, â òîì ÷èñëå, íàïðèìåð, îòêðûâàòü ôàéëû, íàõîäÿùèåñÿ â êàòàëîãå.Òàêèì îáðàçîì, åñëè íà êàòàëîã óñòàíîâëåíû ïðàâà ÷òåíèÿ, íî íåò ïðàâ èñïîëíåíèÿ, ìû ìîæåì åãî ïðîñìîòðåòü, íî âîñïîëüçîâàòüñÿ óâèäåííûì íàì íåóäàñòñÿ. Íàïðîòèâ, åñëè åñòü ïðàâà èñïîëíåíèÿ, íî íåò ïðàâ ÷òåíèÿ, ìû ìîæåì îòêðûòü ôàéë èç ýòîãî êàòàëîãà òîëüêî â òîì ñëó÷àå, åñëè òî÷íî çíàåìèìÿ ôàéëà.
Óçíàòü èìÿ ìû íèêàê íå ìîæåì, ò.ê. âîçìîæíîñòè ïðîñìîòðåòüêàòàëîã ó íàñ íåò.Îñòàâøèåñÿ òðè (ñòàðøèõ) ðàçðÿäà ñëîâà ïðàâ äîñòóïà íàçûâàþòñÿSetGid Bit(02000) èSticky Bit(01000).Åñëè äëÿ èñïîëíÿåìîãî ôàéëà óñòàíîâèòüèìåòü ïðàâà ñâîåãî âëàäåëüöà (÷àùå âñåãîSetUid Bit,SetUid Bit(04000),ýòîò ôàéë áóäåò ïðè èñïîëíåíèè− ïîëüçîâàòåëÿ root) âíå çàâèñèìîñòè îò òîãî, êòîSetGid Bit ðàáîòàåò ïîõîæèì îáðàçîì,èç ïîëüçîâàòåëåé ñîîòâåòñòâóþùèé ôàéë çàïóñòèë.óñòàíàâëèâàÿ ýôôåêòèâíóþ ãðóïïó ïîëüçîâàòåëÿ (â îòëè÷èå îò ýôôåêòèâíîãî èäåíòèôèêàòîðàïîëüçîâàòåëÿ). Ïðèìåðîì suid-ïðîãðàììû ÿâëÿåòñÿpasswd.Sticky Bit, óñòàíîâëåííûé íà èñïîëíÿåìîì ôàéëå, â íåêîòîðûõ âåðñèÿõ ÎÑ Unix îáîçíà-÷àåò, ÷òî ñåãìåíò êîäà ïðîãðàììû ñëåäóåò îñòàâèòü â ïàìÿòè äàæå ïîñëå òîãî, êàê ïðîãðàììàáóäåò çàâåðøåíà; ýòî ïîçâîëÿåò ýêîíîìèòü âðåìÿ íà çàãðóçêå â ïàìÿòü ïðîãðàìì, èñïîëíÿåìûõ÷àùå äðóãèõ.Äëÿ êàòàëîãîâSetGid Bitîçíà÷àåò, ÷òî, êàêîé áû ïîëüçîâàòåëü íè ñîçäàë â ýòîì êàòà-ëîãå ôàéë, â êà÷åñòâå ãðóïïû âëàäåëüöà äëÿ ýòîãî ôàéëà áóäåò óñòàíîâëåíà òà æå ãðóïïà,÷òî è ó ñàìîãî êàòàëîãà.Sticky Bitîçíà÷àåò, ÷òî, äàæå åñëè ïîëüçîâàòåëü èìååò ïðàâî íàçàïèñü â äàííûé êàòàëîã, óäàëèòü îí ñìîæåò òîëüêî ñâîè (ïðèíàäëåæàùèå åìó) ôàéëû.Äëÿ èçìåíåíèÿ ïðàâ äîñòóïà ê ôàéëàì èñïîëüçóåòñÿ êîìàíäà chmod4 .
Ýòàêîìàíäà ïîçâîëÿåò çàäàòü íîâûå ïðàâà äîñòóïà â âèäå âîñüìåðè÷íîãî ÷èñëà,íàïðèìåð:$ chmod 644 myfile.cóñòàíàâëèâàåò äëÿ ôàéëà myfile.c ïðàâà çàïèñè òîëüêî äëÿ âëàäåëüöà, àïðàâà ÷òåíèÿ − äëÿ âñåõ.Ïðàâà äîñòóïà òàêæå ìîæíî çàäàòü â âèäå ìíåìîíè÷åñêîé ñòðîêè âèäà[ugoa][+-=][rwxsXtugo] Áóêâû u, g, o è a â íà÷àëå îçíà÷àþò, ñîîòâåòñòâåííî, âëàäåëüöà (user), ãðóïïó (group), âñåõ îñòàëüíûõ (others) è âñåõ ñðàçó(all). + îçíà÷àåò äîáàâëåíèå íîâûõ ïðàâ, - − ñíÿòèå ñòàðûõ ïðàâ, = −óñòàíîâêó óêàçàííûõ ïðàâ è ñíÿòèå âñåõ îñòàëüíûõ.
Ïîñëå çíàêà áóêâû r, w, x4 ñîêðàùåíèåñëîâ Change Mode77îçíà÷àþò, êàê ìîæíî äîãàäàòüñÿ, ïðàâà íà ÷òåíèå, çàïèñü è èñïîëíåíèå, áóêâà s − óñòàíîâêó/ñíÿòèå Set-áèòîâ (èìååò ñìûñë äëÿ âëàäåëüöà è ãðóïïû), tîáîçíà÷àåò Sticky Bit. Áóêâà X (çàãëàâíàÿ) îçíà÷àåò óñòàíîâêó/ñíÿòèå áèòàèñïîëíåíèÿ òîëüêî äëÿ êàòàëîãîâ, à òàêæå äëÿ òåõ ôàéëîâ, íà êîòîðûå õîòÿáû ó êîãî-íèáóäü åñòü ïðàâà èñïîëíåíèÿ.Åñëè êîìàíäó chmod èñïîëüçîâàòü ñ êëþ÷îì -R, îíà ïðîâåäåò ñìåíó ïðàâäîñòóïà êî âñåì ôàéëàì âî âñåõ ïîääèðåêòîðèÿõ çàäàííîé äèðåêòîðèè.Íàïðèìåð, êîìàíäà chmod a+x myscript ñäåëàåò ôàéë myscript èñïîëíÿåìûì; êîìàíäà chmod go-rwx * ñíèìåò ñî âñåõ ôàéëîâ â òåêóùåì êàòàëîãåâñå ïðàâà, êðîìå ïðàâ âëàäåëüöà.
Î÷åíü ïîëåçíîé ìîæåò îêàçàòüñÿ êîìàíäàchmod -R u+rwX,go=rX ~íà ñëó÷àé, åñëè âû ñëó÷àéíî èñïîðòèòå ïðàâà äîñòóïà â ñâîåé äîìàøíåé äèðåêòîðèè; ýòà êîìàíäà, ñêîðåå âñåãî, ïðèâåäåò âñå â óäîâëåòâîðèòåëüíîå ñîñòîÿíèå.Äëÿ ñèìâîëè÷åñêèõ ññûëîê ïðàâà îáû÷íî èãíîðèðóþñÿ è èñïîëüçóþòñÿïðàâà ôàéëà, íà êîòîðûå äàííàÿ ññûëêà ññûëàåòñÿ.ßñíî, ÷òî èçìåíèòü ïðàâà ïîëüçîâàòåëü ìîæåò òîëüêî äëÿ ïðèíàäëåæàùèõ åìó ôàéëîâ. Íà ïîëüçîâàòåëÿ ñ ïðàâàìè root ýòî îãðàíè÷åíèå íå äåéñòâóåò.12.312.3.1Ñèñòåìíûå âûçîâû äëÿ ðàáîòû ñ ôàéëàìèÎòêðûòèå ôàéëà×òîáû íà÷àòü ðàáîòó ñ ôàéëîì, åãî íåîáõîäèìî îòêðûòü, òî åñòü îáúÿâèòü îïåðàöèîííîé ñèñòåìå, ÷òî íàøà ïðîãðàììà ñîáèðàåòñÿ ðàáîòàòü ñ äàííûì ôàéëîì.
Ýòî äåëàåòñÿ ñèñòåìíûì âûçîâîìint open(const char *name, int mode);int open(const char *name, int mode, int perms);Ïàðàìåòð name çàäàåò èìÿ ôàéëà, êîòîðûé ìû õîòèì îòêðûòü. Ýòî ìîæåòáûòü êîðîòêîå èìÿ ôàéëà, íàõîäÿùåãîñÿ â òåêóùåì êàòàëîãå èëè æå ïóòü êôàéëó (êàê ïîëíûé, òàê è îòíîñèòåëüíûé).Ïàðàìåòð mode çàäàåò ðåæèì, â êîòîðîì ìû íàìåðåíû ðàáîòàòü ñ ôàéëîì.Îñíîâíûìè ðåæèìàìè ÿâëÿþòñÿ O_RDONLY (òîëüêî ÷òåíèå), O_WRONLY (òîëüêîçàïèñü) è O_RDWR (÷òåíèå è çàïèñü).
Îäíó èõ ýòèõ òðåõ êîíñòàíò óêàçàòüíåîáõîäèìî.Êðîìå ïåðå÷èñëåííûõ îñíîâíûõ êîíñòàíò, ñóùåñòâóþò åùå è ìîäèôèöèðóþùèå êîíñòàíòû, êîòîðûå ïðè íåîáõîäèìîñòè ìîæíî äîáàâèòü ê îñíîâíûì,èñïîëüçóÿ îïåðàöèþ ïîáèòîâîãî èëè. Ê ýòèì êîíñòàíòàì îòíîñÿòñÿ:78• O_APPEND − îòêðûòü ôàéë íà äîáàâëåíèå â êîíåö: êàæäàÿ îïåðàöèÿçàïèñè áóäåò îñóùåñòâëÿòü çàïèñü â êîíåö ôàéëà;• O_CREAT − åñëè ôàéëà íå ñóùåñòâóåò, ðàçðåøèòü îïåðàöèîííîé ñèñòåìååãî ñîçäàíèå;• O_TRUNC − åñëè ôàéë ñóùåñòâóåò, ïåðåä íà÷àëîì ðàáîòû ñáðîñèòü åãîñòàðîå ñîäåðæèìîå, â ðåçóëüòàòå ÷åãî äëèíà ôàéëà ñòàíåò íóëåâîé; çàïèñü íà÷íåòñÿ ñ íà÷àëà ôàéëà;• O_EXCL − (èñïîëüçóåòñÿ òîëüêî â ñî÷åòàíèè ñ O_CREAT) ïîòðåáîâàòü îòîïåðàöèîííîé ñèñòåìû ñîçäàíèÿ íîâîãî ôàéëà; åñëè ôàéë óæå ñóùåñòâóåò, íå îòêðûâàòü åãî, âûäàòü îøèáêó;Ñóùåñòâóþò è íåêîòîðûå äðóãèå ìîäèôèêàòîðû.Òðåòèé ïàðàìåòð (perms) ñëåäóåò çàäàâàòü òîëüêî â ñëó÷àå, åñëè çíà÷åíèå âòîðîãî ïàðàìåòðà ïðåäïîëàãàåò âîçìîæíîñòü ñîçäàíèÿ ôàéëà (òî åñòüåñëè èñïîëüçóåòñÿ O_CREAT).
Ýòîò ïàðàìåòð çàäàåò ïðàâà äîñòóïà äëÿ ñîçäàâàåìîãî ôàéëà. Çàáåãàÿ âïåðåä, îòìåòèì, ÷òî èç çíà÷åíèÿ ýòîãî ïàðàìåòðàñèñòåìà ïîáèòîâî âû÷èòàåò îïðåäåëåííîå ÷èñëî, íàçûâàåìîå umask. Ïîýòîìóïðè ñîçäàíèè îáû÷íîãî ôàéëà äàííûõ (òî åñòü ïðè óñëîâèè, ÷òîìû íå ñîáèðàåìñÿ åãî èñïîëíÿòü êàê ïðîãðàììó), ñëåäóåò çàäàâàòüçíà÷åíèå 0666, ÷òî îçíà÷àåò íàëè÷èå ïðàâ íà ÷òåíèå è çàïèñü (íî íå íà èñ-ïîëíåíèå) äëÿ âëàäåëüöà, ãðóïïû è âñåõ îñòàëüíûõ. Îáû÷íî ïðàâà íà çàïèñüäëÿ ãðóïïû è îñòàëüíûõ ïîëüçîâàòåëåé èñ÷åçàþò ïîñëå âû÷èòàíèÿ umask,åñëè æå ýòîãî íå ïðîèñõîäèò − çíà÷èò, òàê õîòåë ïîëüçîâàòåëü.Ñèñòåìíûé âûçîâ open() âîçâðàùàåò çíà÷åíèå -1 â ñëó÷àå, åñëè ïðîèçîøëà òà èëè èíàÿ îøèáêà. Åñëè æå ôàéë îòêðûòü óäàëîñü, âîçâðàùàåòñÿíåáîëüøîå öåëîå íåîòðèöàòåëüíîå ÷èñëî, íàçûâàåìîå äåñêðèïòîðîì ôàéëà 5 .Ôàéëîâûé äåñêðèïòîð íà ñàìîì äåëå ðàñïîëàãàåòñÿ â ÿäðå îïåðàöèîííîéñèñòåìû, ÿâëÿÿñü åå îáúåêòîì äàííûõ.