Права в Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Здравейте на всички. Това е превод на статия от книгата RedHat RHCSA RHCE 7 RedHat Enterprise Linux 7 EX200 и EX300.

От мен: Надявам се статията да бъде полезна не само за начинаещите, но и да помогне на по-опитните администратори да систематизират знанията си.

И така, да започваме.

Права в Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

За да получите достъп до файлове в Linux, се използват разрешения. Тези разрешения се назначават на три обекта: собственик на файла, собственик на групата и друг обект (т.е. всички останали). В тази статия ще научите как да прилагате разрешения.

Статията започва с преглед на основните понятия, след което се обсуждат специални разрешения (Special permissions) и списък за контрол на достъпа (ACL). В края на статията се разглежда настройката на права за достъп по подразбиране чрез umask, както и управлението на разширени атрибути на потребителя.

Управление на собствеността на файловете

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

Показване на собственика на файла или каталога

В Linux всеки файл и всеки каталог имат два собственика: потребител и собственик на група.

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

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

  1. Обвивката проверява дали сте собственик на файла, до който искате достъп. Ако сте този собственик, получавате разрешения и обвивката спира проверката.
  2. Ако не сте собственик на файла, обвивката ще провери дали сте член на групата, която има разрешения за този файл. Ако сте член на тази група, получавате достъп до файла с разрешенията, които са зададени за групата, и обвивката ще спре проверката.
  3. Ако не сте нито потребител, нито собственик на групата, получавате правата на другите потребители (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

Lexus RX 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 практически напълно неподатлив на вируси. Само някой с права за запис в директорията може да приложи разрешение за изпълнение.

По-долу се обобщава използването на основните разрешения:

Права в Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Използване на chmod

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

Права в Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

При настройка на разрешенията изчислете необходимото ви значение. Ако искате да зададете четене, писане и изпълнение за потребителя, четене и изпълнение за групата, а също и четене и изпълнение за другите в файла /somefile, тогава използвате следната команда chmod:

chmod 755 /somefile

Когато използвате chmod по този начин, всички текущи разрешения се заменят с посочените от вас разрешения.

Ако искате да промените разрешенията относително на текущите разрешения, можете да използвате chmod в относителен режим. При използване на chmod в относителен режим работите с три индикатора, за да посочите какво искате да направите:

  1. Първо посочвате за кого искате да промените разрешенията. За това можете да изберете между потребителя (u), групата (g) и другите (o).
  2. . След това използвате оператор, за да добавите или премахнете разрешения от текущия режим или ги задавате абсолютно.
  3. Накрая използвате 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 Яну 28 2010 /usr/bin/passwd

Разрешението SUID може да изглежда полезно (и в някои случаи наистина е), но също така е потенциално опасно. При неправилна употреба можете случайно да раздадете права за достъп root. Затова препоръчвам да го използвате само с максимална внимателност.

На повечето администратори никога няма да се наложи да го използват; ще го видите само в някои файлове, в които операционната система трябва да го установи по подразбиране.

Второто специално разрешение е идентификаторът на група (SGID). Това разрешение има два ефекта. Когато се прилага към изпълним файл, то дава на потребителя, който изпълнява файла, разрешенията на собственика на групата на този файл. По този начин SGID може да изпълнява повече или по-малко същото, което прави SUID. Въпреки това, за тази цел SGID практически не се използва.

Както при разрешението SUID, SGID се прилага към някои системни файлове като настройка по подразбиране.

Когато се прилага към директория, SGID може да бъде полезен, тъй като можете да го използвате за задаване на собственика на групата по подразбиране за файловете и под-директориите, създадени в тази директория. По подразбиране, когато потребителят създава файл, неговата ефективна основна група се задава като собственик на групата за този файл.

Това не винаги е много полезно, особено защото при потребителите на Red Hat/CentOS основната група е зададена на група със същото име, като това на потребителя, и от които потребителят е единственият член. Следователно, по подразбиране файловете, които създава потребителят, ще бъдат групови за общ достъп.

Представете си ситуация, в която потребителите линда и лори работят в счетоводството и са членове на групата account. По подразбиране тези потребители са членове на частна група, единственият член на която те са. Въпреки това, и двамата потребители са членове на групата account, но също така и като параметър на вторична група.

Ситуацията по подразбиране е, че когато който и да е от тези потребители създаде файл, основната група става собственик. Следователно по подразбиране linda не може да получава достъп до файлове, създадени от lori, и обратно. Въпреки това, ако създадете споделена директория на групата (да кажем, /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, ако потребителят може да създава файлове в директорията, той също може да изтрива файлове от тази директория. В среда на публична група това може да бъде неприятно. Представете си потребителите linda и lori, които и двамата имат права за писане в директорията /data/account и получават тези разрешения благодарение на участието си в групата account. Следователно, linda може да изтрива файлове, създадени от lori, и обратно.

Когато прилагате 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 в абсолютен режим. (Рискувате да презапишете разрешенията, ако не го направите.) Затова препоръчвам да работите в относителен режим, ако трябва да приложите някое от специалните разрешения:

  1. За SUID използвайте chmod u+s.
  2. За SGID използвайте chmod g+s.
  3. За sticky bit използвайте chmod +t, а след това името на файла или каталога, за който искате да зададете разрешения.

В таблицата е обобщено всичко, което е важно да знаете за управлението на специални разрешения.

Права в Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Пример за работа със специални права

В този пример използвате специални разрешения, за да улесните членовете на групата в споделянето на файлове в каталога на общата група. Назначавате ID-бита на установения идентификатор на групата, както и sticky bit, и виждате, че след тяхното задаване се добавят функции, улесняващи съвместната работа на членовете на групата.

  1. Отворете терминала, в който сте потребителят linda. Можете да създадете потребител с командата useradd linda, добавете парола passwd linda.
  2. Създайте в корена каталог /data и подкаталог /data/sales с командата mkdir -p /data/sales. Изпълнете cd /data/sales, за да преминете в каталога sales. Изпълнете touch linda1 и touch linda2, за да създадете два празни файла, чийто собственик е linda.
  3. Изпълнете su — lisa за да превключите текущия потребител на потребителя lisa, който също е член на групата sales.
  4. Изпълнете cd /data/sales и от този каталог изпълнете ls -l. Ще видите двата файла, които са създадени от потребителя linda и принадлежат на групата linda. Изпълнете rm -f linda*. Това ще изтрие и двата файла.
  5. Изпълнете touch lisa1 и touch lisa2, за да създадете два файла, които принадлежат на потребителя lisa.
  6. Изпълнете su — за да повишите вашите привилегии до ниво root.
  7. Изпълнете chmod g+s,o+t /data/sales, за да зададете бита на идентификатора на групата (GUID) и стекирания бит в директорията на общата група.
  8. Изпълнете su — linda. След това изпълнете touch linda3 и touch linda4. Сега трябва да видите, че двата създадени от вас файла принадлежат на групата sales, която е собственик на групата на директорията /data/sales.
  9. Изпълнете rm -rf lisa*. Стеканият бит предотвратява изтриването на тези файлове от името на потребителя linda, тъй като не сте собственик на тези файлове. Имайте предвид, че ако потребителят linda е собственик на директорията /data/sales, той все пак може да изтрие тези файлове!

Управление на ACL (setfacl, getfacl) в Linux

Дори и разширените права, които бяха обсъдени по-горе, да добавят полезна функционалност към начина, по който Linux работи с разрешения, това не позволява да се предоставят разрешения на повече от един потребител или една група в един файл.

Списъците за контрол на достъпа предлагат тази функция. Освен това те позволяват на администраторите да задават подразбиращи се разрешения по сложен начин, при който зададените разрешения могат да се различават в различни директории.

Разбиране на ACL

Въпреки че подсистемата ACL добавя отлични функционални възможности на вашия сървър, тя има един недостатък: не всички утилити я поддържат. Следователно, можете да изгубите настройките на ACL при копиране или преместване на файлове, а софтуерът за бекъп може да не извърши бекъп на настройките на ACL.

Утилитата tar не поддържа ACL. За да се уверите, че настройките на ACL няма да бъдат изгубени при създаване на резервно копие, използвайте star вместо tar. star работи с същите параметри като tar; просто добавя поддръжка за настройките на ACL.

Можете също да създадете резервно копие на ACL с помощта на getfacl, което може да бъде възстановено с команда setfacl. За да създадете резервно копие, използвайте getfacl -R /directory > file.acls. За да възстановите настройките от файла за резервно копие, използвайте setfacl —restore=file.acl.

Липсата на поддръжка от някои инструменти не трябва да бъде проблем. Списъците ACL често се прилагат към директории като структурна мярка, а не към отделни файлове.
Затова те няма да бъдат много, а само няколко, приложени на умни места в файловата система. Следователно, възстановяването на оригиналните списъци с ACL, с които сте работили, е относително лесно, дори ако вашият софтуер за резервно копиране не ги поддържа.

Подготовка на файловата система за ACL

Преди да започнете работа с ACL, може да е необходимо да подготвите файловата система, за да поддържа ACL. Тъй като метаданните на файловата система трябва да бъдат разширени, не винаги има поддръжка по подразбиране за ACL в файловата система. Ако получавате съобщение "operation not supported" при настройка на списъците с ACL за файловата система, възможно е вашата файловата система да не поддържа ACL.

За да поправите това, трябва да добавите опцията acl mount в файла /etc/fstab, за да бъде файловата система монтирана с поддръжка на ACL по подразбиране.

Промяна и преглед на настройките на ACL с setfacl и getfacl

За да зададете ACL, имате нужда от командата setfacl. За да видите текущите настройки на ACL, имате нужда от getfacl. Командата ls -l не показва никакви съществуващи ACL; просто показва + след списъка с разрешения, което указва, че списъците с ACL се прилагат и към файла.

Преди да настроите списъците с ACL, винаги е полезно да покажете текущите настройки на ACL с помощта на getfacl. По-долу, в примера можете да видите текущите права на достъп, показани с помощта на ls -l, както и как е показано с getfacl. Ако погледнете достатъчно внимателно, ще видите, че показаната информация е точно същата.

[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

В резултат на изпълнението на командата getfacl по-долу е видно, че разрешенията се показват за три различни обекта: потребител, група и други. Сега нека добавим 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 по подразбиране, за да се уверите, че за всички нови файлове правилно са зададени разрешенията за всички нови елементи.

  1. Отворете терминала.
  2. Изпълнете setfacl -m g:account:rx /data/sales и setfacl -m g:sales:rx /data/account.
  3. Изпълнете getfacl, за да се уверите, че правата за достъп са зададени така, както желаете.
  4. Изпълнете setfacl -m d:g:account:rwx,g:sales:rx /data/sales, за да зададете ACL по подразбиране за директорията sales.
  5. Добавете ACL по подразбиране за директорията /data/account, като използвате setfacl -m d:g:sales:rwx,g:account:rx /data/account.
  6. Убедете се, че настройките на ACL действат, като добавите нов файл в /data/sales. Изпълнете touch /data/sales/newfile и изпълнете getfacl /data/sales/newfile за проверка на текущите разрешения.

Настройване на правата по подразбиране с помощта на umask

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

Вероятно сте забелязали, че при създаване на нов файл се задават някои разрешения по подразбиране. Тези разрешения се определят от настройката umask. Тази настройка на обвивката се прилага за всички потребители при влизане в системата. В параметъра umask се използва числово значение, което се изважда от максималните разрешения, които могат да бъдат автоматично зададени за файл; максималната настройка за файлове е 666, а за директории е 777.

Обаче, някои изключения важат за това правило. Можете да намерите пълен преглед на настройките umask в таблицата в долната част.

От числата, използвани в umask, както при числовите аргументи за командата chmod, първото число се отнася до разрешенията на потребителя, второто число се отнася до разрешенията на групата, а последното се отнася до разрешенията по подразбиране, зададени за другите. Стойността umask по подразбиране 022 дава 644 за всички нови файлове и 755 за всички нови директории, създадени на вашия сървър.

Пълен преглед на всички числови стойности umask и техните резултати в таблицата по-долу.

Права в Linux (chown, chmod, SUID, GUID, sticky bit, ACL, 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. Ако получавате съобщение "operation not supported" при работа с разширени атрибути на потребителите, уверете се, че сте настроили параметъра mount в файла /etc/fstab.

Много атрибути са документирани. Някои атрибути са налични, но все още не са реализирани. Не ги използвайте; те няма да ви донесат нищо.

По-долу са най-полезните атрибути, които можете да приложите:

A Този атрибут гарантира, че времето за достъп до файлa не се променя.
Обикновено всеки път, когато файлът се отваря, времето за достъп до файла трябва да бъде записано в метаданните на файла. Това влияе негативно на производителността; следователно за файлове, до които се прави редовен достъп, атрибутът A може да бъде използван за деактивиране на тази функция.

a Този атрибут позволява добавяне, но не изтриване на файл.

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

D Този атрибут гарантира, че промените във файловете се записват на диска незабавно, а не първо в кеша. Това е полезен атрибут за важни файлове на бази данни, позволяващ да се уверите, че те не се губят между файловия кеш и твърдия диск.

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

I Този атрибут включва индексиране за директорията, в която е включен. Това осигурява по-бърз достъп до файлове за примитивни файлови системи, като Ext3, които не използват база данни B-tree за бърз достъп до файлове.

i Този атрибут прави файла неизменяем. Следователно, не могат да се правят промени във файла, което е полезно за файлове, които се нуждаят от допълнителна защита.

j Този атрибут гарантира, че файлът първо се записва в журнала на файловата система ext3, а след това — в блоковете данни на твърдия диск.

s Презаписва блоковете, в които файлът е бил записан, със 0 след изтриването на файла. Това гарантира, че възстановяването на файла е невъзможно след неговото изтриване.

u Този атрибут запазва информация за изтриването. Това позволява разработването на утилита, която работи с тази информация за възстановяване на изтрити файлове.

Ако искате да приложите атрибутите, можете да използвате командата chattr. Например, използвайте chattr +s somefile, за да приложите атрибутите към somefile. Искате да премахнете атрибута? Тогава използвайте chattr -s somefile, и той ще бъде премахнат. За да получите преглед на всички атрибути, които в момента се прилагат, използвайте командата lsattr.

Резюме

В тази статия научихте как да работите с разрешения. Прочетохте за трите основни разрешения, разширените разрешения и как да прилагате списъците с ACL в файловата система. Също така научихте как да използвате параметъра umask за прилагане на подразбиращи се разрешения. В края на тази статия научихте как да използвате разширените атрибути за потребителя за прилагане на допълнително ниво на сигурност на файловата система.

Ако ви хареса този превод, моля, споделете го в коментарите. Ще има повече мотивация за полезни преводи.

В статията коригирах някои правописни и граматически грешки. Намалих някои обемисти абзаци на по-малки за по-добро възприемане.

Вместо 'Само някой с административни права в каталога може да приложи разрешение за изпълнение.' коригирах на 'Само някой с права за запис в каталога може да приложи разрешение за изпълнение.', което ще бъде по-правилно.

Благодаря за забележките berez.

Замених:
Ако не сте собственик на потребителя, обвивката ще провери дали сте член на групата, която също се нарича група на файла.

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

Благодаря за забележката CryptoPirate

Източник: habr.com

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster