Здравейте на всички. Това е превод на статия от книгата RedHat RHCSA RHCE 7 RedHat Enterprise Linux 7 EX200 и EX300.
От мен: Надявам се статията да бъде полезна не само за начинаещите, но и да помогне на по-опитни администратори да организират своите знания.
Така че, да започваме.

За да получите достъп до файлове в Linux, се използват разрешения. Тези разрешения се задават на три обекта: притежателя на файла, притежателя на групата и друг обект (тоест всички останали). В тази статия ще научите как да прилагате разрешения.
Статията започва с преглед на основните концепции, след което се обсъждат специални разрешения (Special permissions) и списъци за контрол на достъпа (ACL). В края на статията се разглежда настройването на права по подразбиране чрез umask, както и управлението на разширени атрибути на потребителя.
Управление на собствеността на файловете
Преди да обсъдим разрешенията, трябва да знаете за ролята на притежателя на файла и директорията. Собствеността на файловете и директориите е от жизненоважно значение за работа с разрешенията. В този раздел първо ще научите как можете да видите притежателя. След това ще научите как да промените притежателя на групата и потребителя за файлове и директории.
Показване на притежателя на файла или директорията
В Linux всеки файл и всяка директория имат двама притежатели: потребител и притежател на групата.
Тези притежатели се задават при създаването на файла или директорията. Потребителят, който създава файла, става притежател на този файл, а основната група, в която е включен същият потребител, също става притежател на този файл. За да определите дали имате права за достъп до файла или директорията, обвивката проверява собствеността им.
Това става в следния ред:
- Обвивката проверява дали сте притежател на файла, до който искате да получите достъп. Ако сте този притежател, получавате разрешения и обвивката спира проверката.
- Ако не сте притежател на файла, обвивката ще провери дали сте член на групата, която има разрешения за този файл. Ако сте член на тази група, получавате достъп до файла с разрешенията, зададени за групата, и обвивката ще спре проверката.
- Ако не сте нито потребител, нито собственик на група, получавате правата на другите потребители (Other).
За да видите текущите назначения на собственника, можете да използвате командата ls -l. Тази команда показва потребителя и собственика на групата. По-долу можете да видите настройките на собственика за директории в директорията /home.
[root@server1 home]# ls -l
total 8
drwx------. 3 bob bob 74 Feb 6 10:13 bob
drwx------. 3 caroline caroline 74 Feb 6 10:13 caroline
drwx------. 3 fozia fozia 74 Feb 6 10:13 fozia
drwx------. 3 lara lara 74 Feb 6 10:13 lara
drwx------. 5 lisa lisa 4096 Feb 6 10:12 lisa
drwx------. 14 user user 4096 Feb 5 10:35 user
С помощта на командата ls можете да покажете собственика на файловете в тази директория. Понякога може да е полезно да получите списък на всички файлове в системата, при които собственикът е посочен потребител или група. За тази цел можете да използвате find. Аргументът find -user може да бъде използван за тази цел. Например, следната команда показва всички файлове, при които собственикът е посочен потребител linda:
find / -user lindaМожете също да използвате find за търсене на файлове, при които определена група е собственик.
Например, следната команда търси всички файлове, принадлежащи на групата users:
find / -group usersПромяна на собственика
За да приложите съответните разрешения, първото, което трябва да вземете предвид, е собствеността. За това има команда chown. Синтаксисът на тази команда е лесен за разбиране:
chown кой каквоНапример, следната команда променя собственика на директорията /home/account на потребителя linda:
chown linda /home/accountКоманда chown има няколко опции, една от които е особено полезна: -R. Можете да предположите какво прави, тъй като тази опция е налична и за много други команди. Тя ви позволява рекурсивно да задавате собственика, което ви позволява да зададете собственика на текущата директория и всичко, което е под нея. Следната команда променя собственика на директорията /home и всичко под нея на потребителя linda:
Сега собствениците изглеждат така:
[root@localhost ~]# ls -l /home
total 0
drwx------. 2 account account 62 Sep 25 21:41 account
drwx------. 2 lisa lisa 62 Sep 25 21:42 lisa
Нека изпълним:
[root@localhost ~]# chown -R lisa /home/account
[root@localhost ~]#
Сега потребителят lisa стана собственик на директорията account:
[root@localhost ~]# ls -l /home
total 0
drwx------. 2 lisa account 62 Sep 25 21:41 account
drwx------. 2 lisa lisa 62 Sep 25 21:42 lisa
Промяна на собственик на групата
Има два начина за промяна на собствеността на групата. Можете да го направите, като използвате chown, но съществува специална команда с името chgrp, която извършва тази работа. Ако искате да използвате командата chown, използвайте . или : перед името на групата.
Следната команда променя собственика на групата /home/account на групата account:
chown .account /home/account
Можете да използвате chown за промяна на собственика на потребителя и/или групата по няколко начина. Ето няколко примера:
- chown lisa myfile1 установява потребителя lisa за собственик на файла myfile1.
- chown lisa.sales myfile установява потребителя lisa за собственик на файла myfile, а също така установява групата sales за собственик на същия файл.
- chown lisa:sales myfile същото като предишната команда.
- chown .sales myfile установява групата sales за собственик на файла myfile без да променя собственика на потребителя.
- chown :sales myfile същото като предишната команда.
Можете да използвате командата chgrp, за да промените собственика на групата. Нека разгледаме следния пример, където можете с помощта на chgrp да зададете групата sales за собственик на директорията account:
chgrp .sales /home/accountКакто и в случая с chown, можете да използвате опцията -R с chgrp, а също така рекурсивно да променяте собственика на групата.
Разбиране на подразбиращия се собственик
Може би сте забелязали, че когато потребител създава файл, се прилага подразбиращо собственост.
Потребителят, който създава файл, автоматично става собственик на този файл, а основната група на този потребител автоматично става собственик на този файл. Обикновено това е групата, указана във файла /etc/passwd като основна група на потребителя. Въпреки това, ако потребителят е член на няколко групи, той може да промени ефективната основна група.
За да покаже текущата ефективна първична група, потребителят може да използва командата groups:
[root@server1 ~]# groups lisa
lisa : lisa account sales
Ако текущият потребител linda иска да промени ефективната първична група, той ще използва командата newgrp, следвана от името на групата, която иска да установи като нова ефективна първична група. След използването на командата newgrp първичната група ще бъде активна, докато потребителят не въведе командата exit или не излезе от системата.
По-долу е показано как потребителят linda използва тази команда, при което първичната група стана групата sales:
lisa@server1 ~]$ groups
lisa account sales
[lisa@server1 ~]$ newgrp sales
[lisa@server1 ~]$ groups
sales lisa account
[lisa@server1 ~]$ touch file1
[lisa@server1 ~]$ ls -l
total 0
-rw-r--r--. 1 lisa sales 0 Feb 6 10:06 file1
След като смените основната група, всички новосъздадени файлове от потребителя ще получат тази група за собственик. За да се върнете към първоначалната настройка на основната група, използвайте exit.
За да можете да използвате командата newgrp, потребителят трябва да бъде член на групата, която иска да използва като основна. Освен това, груповата парола може да се използва за групата с помощта на командата gpasswd. Ако потребителят използва командата newgrp, но не е член на целевата група, терминалът ще поиска паролата на групата. След като въведете правилната групова парола, новата ефективна основна група ще бъде установена.
Управление на основните права
Системата за разрешения в Linux бе създадена през 70-те години. Тъй като компютърните нужди бяха ограничени по това време, основната система разрешения беше доста ограничена. Тази система разрешения използва три разрешения, които могат да се прилагат към файлове и директории. В този раздел ще научите как да използвате и променяте тези разрешения.
Разбиране на правата за четене, запис и изпълнение
Трите основни разрешения ви позволяват да четете, записвате и изпълнявате файлове. Ефектът на тези разрешения е различен при прилагането им към файлове или директории. При файл разрешението за четене ви дава правото да отворите файла за четене. Следователно, можете да прочетете съдържанието му, но това означава, че вашият компютър може да отвори файла, за да направи нещо с него.
Програмният файл, който изисква достъп до библиотека, например, трябва да има достъп за четене до тази библиотека. Оттук следва, че разрешението за четене е най-основното разрешение, което ви е необходимо, за да работите с файлове.
При директория четенето позволява показването на съдържанието на тази директория. Трябва да знаете, че това разрешение не позволява да четете файлове в директорията. Системата за разрешения в Linux не разбира наследяване и единственият начин да прочетете файл е да използвате разрешението за четене за този файл.
Както можете да се досетите, разрешението за записване, когато се прилага към файл, позволява записването в него. С други думи, то дава възможност за промяна на съдържанието на съществуващите файлове. Въпреки това, не позволява създаването или изтриването на нови файлове или промяна на правата за достъп до файла. За целта трябва да предоставите разрешение за запис в директорията, в която искате да създадете файл. В директориите това разрешение също така дава възможност за създаване и изтриване на нови поддиректории.
Разрешението за изпълнение е това, от което се нуждаете, за да изпълнявате файл. То никога не се задава по подразбиране, което прави Linux почти напълно устойчив на вируси. Единствено някой с права за запис в директорията може да приложи разрешение за изпълнение.
По-долу е обобщено използването на основните разрешения:

Използване на chmod
За управление на правата се използва команда chmod. Когато използвате chmod можете да задавате права за потребителя (user), групата (group) и другите (other). Можете да използвате тази команда в два режима: относителен режим и абсолютен режим. В абсолютния режим три цифри се използват за задаване на основните права.

При настройване на правата, изчислете необходимата стойност. Ако искате да зададете права за четене, запис и изпълнение за потребителя, четене и изпълнение за групата, а също и четене и изпълнение за другите в файла /somefile, то използвате следната команда chmod:
chmod 755 /somefileКогато използвате chmod по този начин, всички текущи права се заменят с тези, които сте задали.
Ако искате да промените правата относително на текущите права, можете да използвате chmod в относителен режим. При използване chmod в относителен режим работите с три индикации, за да укажете какво искате да направите:
- Първо посочвате за кого искате да промените правата. За целта можете да изберете между потребителя (u), групата (g) и другите (o).
- . След това използвате оператор за добавяне или премахване на права от текущия режим или за задаване на абсолютно.
- Накрая използвате r, w и x, за да укажете какви права искате да зададете.
При променяне на правата в относителен режим можете да пропуснете частта «кому», за да добавите или премахнете разрешение за всички обекти. Например, тази команда добавя право за изпълнение за всички потребители:
chmod +x somefileПри работа в относителен режим можете също да използвате по-сложни команди. Например, тази команда добавя право за запис в групата и премахва правото за четене за другите:
chmod g+w,o-r somefileПри използването на chmod -R o+rx /data вие задавате разрешение за изпълнение за всички директории, както и за файловете в директорията /data. За да зададете право за изпълнение само за директории, а не за файлове, използвайте chmod -R o+rX /data.
Голямата буква X гарантира, че файловете не получават право за изпълнение, ако файлът вече не е зададен с право за изпълнение за някои обекти. Това прави X по-разумен начин за работа с права за изпълнение; то ще избегне задаването на това разрешение на файлове, където то не е необходимо.
Разширени права
Освен основните права, за които току-що прочетохте, в Linux също има набор от разширени права. Това не са правата, които задавате по подразбиране, но понякога те предоставят полезно допълнение. В този раздел ще научите какво представляват те и как да ги настроите.
Разбиране на разширените права SUID, GUID и sticky bit
Има три усъвършенствани права. Първото от тях е правото за задаване на идентификатор на потребителя (SUID). В някои специални случаи можете да приложите това право към изпълними файлове. По подразбиране потребителят, който стартира изпълним файл, го стартира с правата си.
За обикновените потребители това обикновено означава, че използването на програмата е ограничено. Въпреки това в някои случаи потребителят се нуждае от специални права, само за да извърши определена задача.
Например, нека разгледаме ситуация, при която потребителят трябва да смени паролата. За целта потребителят трябва да запише новата си парола в файла /etc/shadow. Въпреки това, този файл не е достъпен за запис на потребители, които нямат права на root:
root@hnl ~]# ls -l /etc/shadow
----------. 1 root root 1184 Apr 30 16:54 /etc/shadow
Разрешението SUID предлага решение на този проблем. В утилитата /usr/bin/passwd това разрешение се прилага по подразбиране. Това означава, че при смяна на парола потребителят временно получава права root, което позволява да записва във файла /etc/shadow. Можете да видите разрешението SUID с ls -l как s в позицията, където обикновено очаквате да видите x за потребителските разрешения:
[root@hnl ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 32680 Jan 28 2010 /usr/bin/passwd
Разрешението SUID може да изглежда полезно (и в някои случаи действително е), но в същото време то е потенциално опасно. При неправилно приложение, можете случайно да раздадете права за достъп root. Затова препоръчвам да го използвате само с максимална предпазливост.
На повечето администратори никога няма да им е необходимо да го използват; ще го видите само в някои файлове, където операционната система трябва да го зададе по подразбиране.
Второто специално разрешение е идентификаторът на групата (SGID). Това разрешение има два ефекта. Когато се прилага към изпълним файл, то дава на потребителя, който изпълнява файла, правата на собственика на групата на този файл. По този начин, SGID може да извърши почти същото, което прави SUID. Въпреки това, за тази цел SGID практически не се използва.
Както и при разрешението SUID, SGID се прилага на някои системни файлове като настройка по подразбиране.
Когато се прилага към каталог, SGID може да бъде полезен, защото можете да го използвате, за да зададете собственика на групата по подразбиране за файловете и подкаталозите, създадени в този каталог. По подразбиране, когато потребител създава файл, неговата ефективна основна група се задава като собственик на групата за този файл.
Това не винаги е много полезно, особено защото потребителите на Red Hat/CentOS имат основна група, зададена с името на потребителя, и от която потребителят е единственият член. Така че, по подразбиране, файловете, които създава потребителят, ще бъдат групови за общо достъп.
Представете си ситуация, когато потребителите линда и лори работят в счетоводството и са членове на група сметки. По подразбиране тези потребители са членове на частна група, единственият член на която са те. Въпреки това и двама потребители са членове на групата account, но също и като параметър на вторична група.
Ситуацията по подразбиране е, че когато някой от тези потребители създаде файл, основната група става собственик. Така че по подразбиране линда не може да получи достъп до файловете, създадени от лори, и обратно. Обаче, ако създадете споделена папка на групата (да предположим, /groups/account) и уверите, че разрешението SGID е приложено към тази папка и че учетът на групата е зададен като собственик на групата за тази папка, всички файлове, създадени в тази папка и във всички нейни подкаталог, също получават групата account като собственик на групата по подразбиране.
По тази причина разрешението SGID е много полезно разрешение за задаване в папки на общи групи.
Разрешението SGID се показва в извода ls -l как s на позиция, където обикновено намирате разрешението за изпълнение на групата:
[root@hnl data]# ls -ld account
drwxr-sr-x. 2 root account 4096 Apr 30 21:28 account
Третото от специалните разрешения е sticky bit. Това разрешение е полезно за защита на файлове от случайно изтриване в среда, където множество потребители имат права за писане в една и съща папка. Ако sticky bit е приложен, потребител може да изтрие файл, само ако е собственик на файла или на папката, в която се намира файлът. По тази причина той се прилага като разрешение по подразбиране за папката /tmp и може да бъде полезен също и за папки на общи групи.
Без sticky bit, ако потребител може да създава файлове в папка, той също може да изтрива файлове от тази папка. В общодостъпна групова среда това може да бъде дразнещо. Представете си потребителите линда и лори, които и двамата имат права за писане в папка /data/account и получават тези разрешения благодарение на участието си в групата account. Затова линда може да изтрива файлове, създадени от лори, и обратно.
Когато приложите sticky bit, потребител може да изтрива файлове, само ако е изпълнено едно от следните условия:
- Потребителят е собственик на файла;
- Потребителят е собственик на папката, в която се намира файлът.
При използването на ls -l, можете да видите sticky bit като t на позицията, където обикновено виждате разрешения за изпълнение за другите:
[root@hnl data]# ls -ld account/
drwxr-sr-t. 2 root account 4096 Apr 30 21:28 account/
Прилагане на разширени права
За да приложите SUID, SGID и sticky bit, можете също да използвате chmod. SUID има числово значение 4, SGID има числово значение 2, а sticky bit има числово значение 1.
Ако искате да приложите тези разрешения, трябва да добавите четирицифрен аргумент в chmod, първата цифра от който се отнася до специалните разрешения. Следващият ред, например, ще добави разрешение SGID на директория и ще зададе rwx за потребителя и rx за групата и другите:
chmod 2755 /somedirТ това е доста непрактично, ако искате да видите текущите права за достъп, които са настроени, преди да работите с chmod в абсолютен режим. (Рискувате да презапишете разрешенията, ако не го направите.) Затова препоръчвам да работите в относителен режим, ако искате да приложите някое от специалните разрешения:
- За SUID използвайте chmod u+s.
- За SGID използвайте chmod g+s.
- За sticky bit използвайте chmod +t, а след това името на файла или директорията, за която искате да зададете разрешения.
В таблицата е обобщено всичко, което е важно да знаете за управлението на специалните разрешения.

Пример за работа със специални права
В този пример използвате специални разрешения, за да улесните членовете на групата при обмена на файлове в директорията на общата група. Назначавате ID-бит на установения идентификатор на групата, както и sticky bit, и виждате, че след тяхното прилагане се добавят функции, улесняващи съвместната работа на членовете на групата.
- Отворете терминала, в който сте потребителят linda. Можете да създадете потребител с командата useradd linda, добавете парола passwd linda.
- Създайте в корена директория /data и поддиректория /data/sales с командата mkdir -p /data/sales. Изпълнете cd /data/sales, за да влезете в директорията sales. Изпълнете touch linda1 и touch linda2, за да създадете два празни файла, собственик на които е linda.
- Изпълнете su — lisa за да превключите текущия потребител на потребителя lisa, който също е член на групата sales.
- Изпълнете cd /data/sales и от тази директория изпълнете ls -l. Ще видите два файла, които са създадени от потребителя linda и принадлежат на групата linda. Изпълнете rm -f linda*. Това ще изтрие и двата файла.
- Изпълнете touch lisa1 и touch lisa2, за да създадете два файла, които принадлежат на потребителя lisa.
- Изпълнете su — за да повишите вашите права до ниво root.
- Изпълнете chmod g+s,o+t /data/sales, за да зададете бит за идентификатор на групата (GUID), както и sticky бит в директорията на общата група.
- Изпълнете su — linda. След това изпълнете touch linda3 и touch linda4. Сега трябва да видите, че двата създадени от вас файла принадлежат на групата sales, която е собственик на групата на директорията /data/sales.
- Изпълнете rm -rf lisa*. Sticky бит предотвратява изтриването на тези файлове от името на потребителя linda, тъй като не сте собственик на тези файлове. Обърнете внимание, че ако потребителят linda е собственик на директорията /data/sales, той все пак може да изтрие тези файлове!
Управление на ACL (setfacl, getfacl) в Linux
Дори ако разширените права, обсъдени по-горе, добавят полезна функционалност към начина, по който Linux работи с разрешенията, те не позволяват да предоставите разрешения на повече от един потребител или една група в един файл.
Списъците за контрол на достъпа предлагат тази функция. Освен това, те позволяват на администраторите да определят разрешения по подразбиране по сложен начин, при който зададените разрешения могат да са различни в различните директории.
Разбиране на ACL
Въпреки че подсистемата ACL добавя отлични функционалности на вашия сървър, тя има един недостатък: не всички инструменти я поддържат. Поради това, може да загубите настройките на ACL при копиране или преместване на файлове, а софтуерът за архивиране може да не архивира настройките на ACL.
Утилитата tar не поддържа ACL. За да сте сигурни, че настройките на ACL няма да бъдат загубени при създаване на архив, използвайте star , който работи с същите параметри, както tar; той просто добавя поддръжка на настройките на ACL. star Можете също така да направите резервно копие на ACL с помощта на
getfacl , която може да бъде възстановена с командата setfacl. За да създадете резервно копие, използвайтеgetfacl -R /directory > file.acls . За да възстановите настройките от резервния файл, използвайтеsetfacl —restore=file.acl Липсата на поддръжка от някои инструменти не трябва да бъде проблем. Списъците ACL често се прилагат към директории като структурна мярка, а не към отделни файлове..
Липсата на поддръжка от някои инструменти не трябва да бъде проблем. Списъците с ACL често се прилагат към директории като структурна мярка, а не към отделни файлове.
Следователно, те ще бъдат малко на брой, но ще бъдат поставени на подходящите места в файловата система. Възстановяването на оригиналните списъци с ACL, с които сте работили, е сравнително лесно, дори ако вашето софтуерно решение за архивиране не ги поддържа.
Подготовка на файловата система за ACL
Преди да започнете работа с ACL, е необходимо да подготвите файловата система за тяхната поддръжка. Тъй като метаданните на файловата система трябва да бъдат разширени, не всяка файловa система по подразбиране поддържа ACL. Ако получавате съобщение „operation not supported“ при настройване на списъците с ACL, вероятно вашата файловa система не поддържа ACL.
За да разрешите това, трябва да добавите опция acl mount в файла /etc/fstab, така че файловата система да се монтира с включена поддръжка на ACL по подразбиране.
Промяна и преглед на настройките на ACL с помощта на setfacl и getfacl
За да зададете ACL, ви е необходима команда setfacl. За да видите текущите настройки на ACL, се нуждаете от , която може да бъде възстановена с командата setfacl. За да създадете резервно копие, използвайте. Командата ls -l не показва съществуващи ACL; тя просто показва + след списъка с разрешения, което указва, че списъците с ACL се прилагат и към файла.
Преди да настроите списъците с ACL, винаги е полезно да покажете текущите настройки на ACL с помощта на , която може да бъде възстановена с командата setfacl. За да създадете резервно копие, използвайте. По-долу, с пример, можете да видите текущите права за достъп, показани с ls -l, и как е показано с , която може да бъде възстановена с командата setfacl. За да създадете резервно копие, използвайте. Ако погледнете внимателно, ще видите, че информацията е точно такава.
[root@server1 /]# ls -ld /dir
drwxr-xr-x. 2 root root 6 Feb 6 11:28 /dir
[root@server1 /]# getfacl /dir
getfacl: Removing leading '/' from absolute path names
# file: dir
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
В резултат на изпълнението на командата , която може да бъде възстановена с командата setfacl. За да създадете резервно копие, използвайте по-долу се вижда, че разрешенията са показани за три различни обекта: потребител, група и останали. Сега нека добавим ACL, за да предоставим права за четене и изпълнение на групата sales. Командата за това е setfacl -m g:sales:rx /dir. В тази команда -m посочва, че текущите настройки на ACL трябва да бъдат променени. След това g:sales:rx съобщава на командата да установи ACL за четене и изпълнение (rx) за групата (g) sales. По-долу можете да видите как изглежда командата, както и изхода на командата getfacl след промяната на текущите настройки на ACL.
[root@server1 /]# setfacl -m g:sales:rx /dir
[root@server1 /]# getfacl /dir
getfacl: Removing leading '/' from absolute path names
# file: dir
# owner: root
# group: root
user::rwx
group::r-x
group:sales:r-x
mask::r-x
other::r-x
Сега, когато разбирате как да настроите групова ACL, е лесно да разберете ACL за потребители и други потребители. Например, командата setfacl -m u:linda:rwx /data дава разрешения на потребителя linda в директорията /data, без да го прави собственик и без да променя назначението на текущия собственик.
Команда setfacl има много възможности и опции. Един вариант е особено важен, параметърът -R. Ако се използва, опцията прави настройката на ACL за всички файлове и подкаталози, които в момента съществуват в директорията, където задавате ACL. Препоръчва се винаги да използвате тази опция при промяна на списъците ACL за съществуващи директории.
Работа с ACL по подразбиране
Едно от предимствата на използването на списъци ACL е, че можете да давате разрешения на няколко потребители или групи в директорията. Друго предимство е, че можете да включите наследяване, работейки с ACL по подразбиране.
Настройвайки ACL по подразбиране, ще определите разрешенията, които ще бъдат зададени за всички нови елементи, създавани в директорията. Имайте предвид, че ACL по подразбиране не променя разрешенията за съществуващи файлове и подкаталози. За да ги промените, трябва да добавите и обикновен ACL!
Това е важно да се знае. Ако искате да използвате ACL за настройка на достъп на няколко потребители или групи до една и съща директория, трябва да настроите ACL два пъти. Първо, използвайте setfacl -R -m, за да промените ACL за текущите файлове. След това използвайте setfacl -m d:, за да се погрижите за всички нови елементи, които също ще бъдат създадени.
За да зададете ACL по подразбиране, просто трябва да добавите опцията d след опцията -m (редът е важен!). Затова използвайте setfacl -m d:g:sales:rx /data, ако искате групата продажби да чете и изпълнява всичко, което някога ще бъде създадено в директорията /data.
При използване на списъци ACL по подразбиране, също може да е полезно да зададете ACL за други. Обикновено това няма особен смисъл, защото можете да промените разрешенията за други, използвайки chmod. Обаче, какво не можете да направите с помощта на chmod, това е да посочите правата, които трябва да бъдат предоставени на другите потребители за всеки нов файл, който ще бъде създаден. Ако искате да предотвратите предоставянето на каквито и да било права за нещо, създадено в /data, например, използвайте setfacl -m d:o::- /data.
ACL и обикновените разрешения не винаги са добре интегрирани. Проблеми могат да възникнат, ако сте приложили ACL по подразбиране към директория, след което елементи са добавени в тази директория, и след това се опитате да промените обикновените разрешения. Промените, приложени към обикновените разрешения, няма да се отразят добре в прегледа на ACL. За да избегнете проблеми, първо задайте обикновените разрешения, след което настройте ACL по подразбиране (и след това се опитайте да не ги променяте отново).
Пример за управление на разширени права с използване на ACL
В този пример ще работите с директориите /data/account и /data/sales, които сте създали по-рано. В предишните примери уверихте, че групата sales има разрешения за /data/sales, а групата account има разрешения за /data/account.
Първо, уверете се, че групата account получава разрешения за четене в директорията /data/sales, а групата sales получава разрешения за четене в директорията /data/account.
След това задавате списъците с ACL по подразбиране, за да сте сигурни, че за всички нови файлове са правилно зададени разрешенията за всички нови елементи.
- Отворете терминала.
- Изпълнете setfacl -m g:account:rx /data/sales и setfacl -m g:sales:rx /data/account.
- Изпълнете , която може да бъде възстановена с командата setfacl. За да създадете резервно копие, използвайте, за да се уверите, че правата за достъп са зададени така, както желаете.
- Изпълнете setfacl -m d:g:account:rwx,g:sales:rx /data/sales, за да зададете ACL по подразбиране за директорията sales.
- Добавете ACL по подразбиране за директорията /data/account, използвайки setfacl -m d:g:sales:rwx,g:account:rx /data/account.
- Уверете се, че настройките на ACL действат, като добавите нов файл в /data/sales. Изпълнете touch /data/sales/newfile и изпълнете getfacl /data/sales/newfile за проверка на текущите разрешения.
Задаване на права по подразбиране с помощта на umask
По-горе научихте как да работите с ACL по подразбиране. Ако не използвате ACL, има опция в шел, която определя правата по подразбиране, които ще получите: umask (обратна маска). В тази част ще научите как да промените правата по подразбиране с помощта на umask.
Вероятно сте заб注意, че при създаването на нов файл се задават определени права по подразбиране. Тези права се определят от настройката umask. Тази настройка за обвивка се прилага за всички потребители при вход в системата. В настройката umask се използва числово значение, което се изважда от максималните разрешения, които могат да бъдат автоматично зададени за файла; максималната настройка за файлове е 666, а за директории - 777.
Въпреки това, някои изключения важат за това правило. Можете да намерите пълен преглед на настройките umask в таблицата по-долу.
От цифрите, използвани в umask, подобно на числовите аргументи за командата chmod, първата цифра се отнася до разрешенията на потребителя, втората цифра се отнася до разрешенията на групата, а последната се отнася до разрешенията по подразбиране, зададени за другите. Стойността umask по подразбиране 022 дава 644 за всички нови файлове и 755 за всички нови директории, създадени на вашия сървър.
Пълен преглед на всички числови стойности umask и техните резултати в таблицата по-долу.

Прост начин да се види как работи параметърът umask изглежда по следния начин: започнете с разрешенията по подразбиране за файла, зададени на 666, и извадете umask, за да получите активните разрешения. Направете същото за директорията и нейното разрешение по подразбиране 777.
Има два начина да промените настройката umask: за всички потребители и за отделни потребители. Ако искате да зададете umask за всички потребители, трябва да се уверите, че параметърът umask се взема предвид при стартиране на файловете на обвивката, както е посочено в /etc/profile. Правилният подход е да създадете файл на оболката с име umask.sh в директорията /etc/profile.d и да зададете umask, който искате да използвате в този файл на оболката. Ако в този файл се променя umask, той се прилага за всички потребители след вход в сървъра.
Алтернативата на настройката umask чрез /etc/profile и свързаните файлове, където той важи за всички потребители, които влизат в системата, е промяната на настройките на umask в файла с име .profile, който се създава в домашната директория на всеки потребител.
Настройките, приложени в този файл, важат само за отделен потребител; следователно, това е добър метод, ако искате повече детайли. Лично ми харесва тази функция, за да променя стойността на umask по подразбиране за потребителя root на 027, докато обикновените потребители работят с umask по подразбиране 022.
Работа с разширени атрибути на потребители
Това е заключителната секция относно правата в Linux.
При работа с разрешения винаги има връзка между потребителския обект или група и разрешенията, които тези обекти имат за файл или директория. Алтернативен метод за защита на файлове на Linux сървър е работата с атрибути.
Атрибутите работят независимо от потребителя, който достъпва файла.
Както при ACL, може да се наложи да включите опция за атрибутите на файла. mount.
Това е опция user_xattr. Ако получите съобщение „операция не се поддържа“ при работа с разширени атрибути на потребители, уверете се, че опцията е зададена mount в файла /etc/fstab.
Много от атрибутите са документирани. Някои атрибути са налични, но все още не са реализирани. Не ги използвайте; те няма да ви донесат нищо.
По-долу са най-полезните атрибути, които можете да приложите:
A Този атрибут гарантира, че времето на достъп до файла не се променя.
Обикновено всеки път, когато файлът се отваря, времето на достъп трябва да бъде записано в метаданните на файла. Това негативно влияе на производителността; следователно за файлове, които се достъпват редовно, атрибутът A може да се използва, за да деактивира тази функция.
a Този атрибут позволява добавяне, но не и изтриване на файл.
c Ако използвате файлова система, в която се поддържа компресия на ниво том, този атрибут гарантира, че файлът ще бъде компресиран при първоначалното активиране на механизма за компресия.
D Този атрибут гарантира, че промените в файловете се записват на диска незабавно, а не в кеша първо. Това е полезен атрибут за важни файлове в база данни, позволяващ да се уверите, че те не се губят между кеша на файловете и твърдия диск.
d Този атрибут гарантира, че файлът няма да бъде запазен в резервни копия, където се използва утилита за дамп.
I Този атрибут включва индексиране за директорията, в която е включен. Това осигурява по-бърз достъп до файловете за примитивни файлови системи, като Ext3, които не използват B-tree база данни за бърз достъп до файлове.
i Този атрибут прави файла неизменяем. Следователно, не е възможно да се извършват промени в него, което е полезно за файлове, които се нуждаят от допълнителна защита.
j Този атрибут гарантира, че в файловата система ext3 файлът първо се записва в журнала, а след това — в данни на твърдия диск.
s Презаписва блоковете, в които файлът е бил съхранен, на 0 след изтриването на файла. Това гарантира, че възстановяването на файла е невъзможно след изтриване.
u Този атрибут запазва информация за изтриването. Това позволява разработването на инструмент, който да работи с тази информация за възстановяване на изтрити файлове.
Ако искате да приложите атрибутите, можете да използвате командата chattr. Например, използвайте chattr +s somefile, за да приложите атрибутите към somefile. Искате да премахнете атрибута? Тогава използвайте chattr -s somefile, и той ще бъде премахнат. За преглед на всички атрибути, които в момента са приложени, използвайте командата lsattr.
Резюме
В тази статия научихте как да работите с разрешения. Прочетохте за трите основни разрешения, разширените разрешения и как да приложите ACL списъци във файловата система. Също така научихте как да използвате параметъра umask за прилагане на подразбиращи се разрешения. В края на тази статия научихте как да използвате разширените атрибути на потребителя за прилагане на допълнително ниво на сигурност на файловата система.
Ако ви е харесал този превод, моля, напишете коментар. Това ще бъде допълнителна мотивация за правене на полезни преводи.
В статията поправих някои печатни грешки и граматически неточности. Намалих някои обемисти параграфи на по-малки за по-лесно възприемане.
Вместо „Само някой с административни права в директорията може да приложи разрешение за изпълнение.“ поправих на „Само някой с права за запис в директорията може да приложи разрешение за изпълнение.“, което е по-правилно.
Благодаря за забележките .
Замених:
Ако не сте собственик на потребителя, шелът ще провери дали сте член на групата, която също се нарича група на файла.На:
Ако не сте притежател на файла, обвивката ще провери дали сте член на групата, която има разрешения за този файл. Ако сте член на тази група, получавате достъп до файла с разрешенията, зададени за групата, и обвивката ще спре проверката.Благодаря за коментара
Източник: habr.com
