Файлове (Част 2)

Управление на правата за достъп


Начините за представяне на права за достъп до файловете са два: символично (за да се представят правата за достъп, се използват символите “r”- за четене, “w”- за писане и “х” за изпълнение) или с осмична числова стойност.

За да покажем съдържанието на директория, в терминала въвеждаме командата

ls -l

Заедно с останалата информация, която получаваме за файла, получаваме и информация за правата за достъп.

Стартирайте терминала (Основни команди в Убунту).
Искаме да разгледаме съдържанието на директорията Music. Тогава:

  • влизаме в съответната директория с помощта на командата cd
  • разглеждаме съдържанието на директорията като прилагаме командата ls -l (за да се покажат скритите обекти, можем да добавим и опция -a).

chmod.png

Символното представяне на правата за достъп до файла е:

-rw-rw-r--

или по-подробно представяне:

Флаг Потребител Група Останалите
- rw- rw- r--

Първата тройка символи (след символа тире) посочва правата на собственика на файла, втората- правата на групата върху файла и третата- правата на всички останали. В случая, собственика има права за четене и промяна на файла, всеки член на групата- права за четене и промяна на файла, всички останали могат само да четат файла. Първото тире (нарича се още флаг) означава, че това е обикновен файл.

Възможните стойности за флага са:

тире (-) - липса на флаг;
l – символна връзка;
d- директория;
b- блоково устройство;
c- символно устройство;
p- канал, устройство fifo;
s- unix сокет (unix домейн сокет).

Всеки обект в Линукс има идентификатор и права за достъп. Идентификационният номер на потребителя се означава с UID, на групата с GID, а за отделен файл (или директория) с inod.По-подробно за флаговете- друг път.

За да видим и inode за файла или директорията, ползваме командата ls -li.

chmod_1.png

Каква информация получаваме?

1073727- това е идентификационният номер на директорията (inode);
drwxr-xr-x – флаг за директория (d) и правата за достъп до файла;
4 – броят на твърдите връзки;
poli- име на собственика на файла;
poli- име на групата;
4096- размер на файла;
Aug 20 22:05- дата и час на последната промяна;
Desktop- име на директорията.

Командата chmod


Командата chmod се прилага за промяна на правата за достъп до файлове или директории. Промяната на собствеността на файл или директория се извършва с командата chown.
Синтаксисът на командата chmod е следния:

chmod [за коя група][какво да прави с правата][какви права] [върху кой обект]

или

chmod [права] [върху кой обект]

където

[за коя група]- може да бъде “u” (от user- потребител, собственик на файла) или “g” (от group- групата, на която принадлежи файла), или “o” (от other- останалите потребители), или “a” (от all-всички, изброени по-горе).

[какво да прави с правата]- може да бъде “+”, за да се добавят права; може да бъде “–”, за да се отнемат права; може да бъде “=”, за да се назначат съответните права.

[какви права]- може да бъде “r”- за четене, “w”- за запис, “x”- за изпълнение.

[върху кой обект]- име на файла или път до него.

[права]- числово обозначение на правата за достъп (755, 644 и др.).

Да се върнем към файла date.txt. Съхранихме го в root директорията за документи на сървъра. Необходимо е да излезем на главната директория на файловата система и след това да влезем в желаната от нас root директория на документите на сървъра:

Промяна на директория

Моят файл date.txt се намира в поддиректория phpbegin, затова ще ми се наложи да вляза в нея.

Промяна на директория

Да видим какви са в момента правата над date.txt (команда ls -l):

-rw-rw-r--

Собственика- чете и пише;
групата- чете и пише;
останалите- само четат.

Аз искам правата на собственика да се запазят, а да огранича правата на членовете на групата- да не могат да променят файла, а само да го четат.

Прилагаме написаното по-горе за командата chmod, като въвеждаме последователно в терминала командите:

chmod g=r date.txt

ls -l date.txt


Промяна на правата на група

Готово, членовете на групата и останалите само ще четат, а вие ще променяте файла и ще го четете. Ако искате да дадете на всички равни права (не е желателно), тогава:

Преглед на правата над файл

Как се назначават правата за достъп до файл/директория с числа?
Използват се числата от 0 до 7. Всяко число представя различни права. Крайният резултат се представя с прибавяне или изваждане на числата. Обикновено:

числото 4 дава права за четене (r);
числото 2 дава права за писане (w);
числото 1 дава права за изпълнение (x);
числото 0 означава няма права.

Всяка комбинация (възможните комбинации са 23 = 8) от тези три числа ще е уникална.

Права за достъп

Имайки предвид това, нека сега отново да отнемем правата за писане на групата и останалите, т.е. ще им дадем права само за четене, т.е.:

собственикът на файла (чете и пише) – поглеждаме колона 5 от таблицата и виждаме, че на тези права, в колона 4 съответства числото 6.

групата (чете)- поглеждаме колона 5 от таблицата и виждаме, че на тези права, в колона 4 съответства числото 4.

всички останали (четат)- поглеждаме колона 5 от таблицата и виждаме, че на тези права, в колона 4 съответства числото 4.

Следователно, в терминала трябва да въведем числото 644:

Права за достъп

Правата за достъп са важни заради сигурността на системата.
Ако не ви се ползва таблицата по-горе за пресмятане на правата за достъп до файлове или директории, можете да ползвате онлайн калкулатор, който ще направи необходимите пресмятания за вас: http://permissions-calculator.org/

Запомнете!

       За пълноценно разглеждане на директория, са необходими права за четене на директорията и достъп до файловете, т.е. минималните разумни права за достъп до директория са 5 (r-x). Правото за достъп 4 (r--) ви дава възможност на разглеждате само името на файла, без неговите атрибути, т.е. няма да можете да видите нито размера на файла, нито неговия тип.
На практика за директориите се използват само три режима: 7 (rwx), 5 (r-x) и 0 (---).

       Много любопитно право за достъп до директория е 3 (-wx). То ви позволява да правите всичко в директорията, но не ви позволява да прочетете имената на обектите в директорията, т.е. ако не са ви известни имената на обектите в тази директория, нищо не можете да направите с тях (дори да искате да ги покажете с маска *, маската няма да помогне- имената са недостъпни).
В директория с права за достъп 3 (-wx) можете да създавате нови директории и файлове, да премахвате директории и файлове (ако знаете името им), да четете, променяте, стартирате файл (ако имате достатъчно права за това и отново, ако знаете неговото име). Можете да променяте правата за достъп до файлове и директории (ако знаете имената им).
Не си и помисляйте обаче, че директория с такива права за достъп може да се използва за съхранение на секретни документи. Имената на файловете и директориите в нея не можете да получите, но ако се опитате да създадете обект с име, което вече съществува- опитът ще е несполучлив.

Освен правата за четене, писане и изпълнение, съществуват и други специални позволения, които могат да се назначат с командите chmod и chown. Те са SUID, SGID, Sticky Bit.

В PHP има вградени функции за промяна на правата за достъп до файл и собствеността на файла. Това са функциите chown () и chmod ().

sign.png

Няма коментари:

Публикуване на коментар