Правы ў 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 -user можа быць выкарыстаны для гэтай мэты. Напрыклад, наступная каманда паказвае ўсе файлы, у якіх у якасці ўладальніка паказаны карыстач linda:

find / -user linda

Вы таксама можаце выкарыстоўваць знаходзіць для пошуку файлаў, у якіх вызначаная група з'яўляецца іх уладальнікам.

Напрыклад, наступная каманда шукае ўсе файлы, якія належаць групе карыстальнікі:

find / -group users

Змена ўладальніка

Каб прымяніць адпаведныя дазволы, першае, што трэба ўлічваць, гэта валоданне. Для гэтага ёсць каманда Чаун. Сінтаксіс гэтай каманды просты для разумення:

chown кто что

Напрыклад, наступная каманда мяняе ўладальніка каталога /home/account на карыстальніка linda:

chown linda /home/account

Каманда Чаун мае некалькі опцый, адна з якіх асабліва карысная: -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

Змена ўладальніка групы

Ёсць два спосабы змяніць валоданне групай. Вы можаце зрабіць гэта, выкарыстоўваючы Чаун, але ёсць спецыяльная каманда з імем chgrp, якая выконвае гэтую працу. Калі вы хочаце выкарыстоўваць каманду Чаун, выкарыстоўвайце . або : перад назвай групы.

Наступная каманда змяняе якога-небудзь уладальніка групы /home/account на групу account:

chown .account /home/account

Вы можаце выкарыстоўваць Чаун для змены ўладальніка карыстальніка і/або групы некалькімі спосабамі. Вось некалькі прыкладаў:

  • 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 усталяваць уладальнікам каталога account групу sales:

chgrp .sales /home/account

Як і ў выпадку з Чаун, вы можаце выкарыстоўваць опцыю -R с chgrp, а таксама рэкурсіўна мяняць уладальніка групы.

Разуменне ўладальніка па змаўчанні

Вы маглі заўважыць, што калі карыстач стварае файл, ужываецца валоданне па змаўчанні.
Карыстальнік, які стварае файл, аўтаматычна становіцца ўладальнікам гэтага файла, а асноўная група гэтага карыстальніка аўтаматычна становіцца ўладальнікам гэтага файла. Звычайна гэта група, якая пазначана ў файле /etc/passwd у якасці асноўнай групы карыстальніка. Аднак калі карыстач з'яўляецца чальцом некалькіх груп, ён можа змяніць эфектыўную асноўную групу.

Каб паказаць бягучую эфектыўную першасную групу, карыстач можа выкарыстоўваць каманду групы:

[root@server1 ~]# groups lisa
lisa : lisa account sales

Калі бягучы карыстач linda жадае змяніць эфектыўную першасную групу, ён будзе выкарыстоўваць каманду новая група, За якой ідзе імя групы, якую ён хоча ўсталяваць у якасці новай эфектыўнай першаснай групы. Пасля выкарыстання каманды новая група першасная група будзе актыўная, пакуль карыстач не ўвядзе каманду выхад ці не выйдзе з сістэмы.

Ніжэй паказана, як карыстач 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

Пасля змены дзеючай асноўнай групы ўсе новыя файлы, створаныя карыстачом, атрымаюць гэтую групу ў якасці ўладальніка групы. Каб вярнуцца да зыходнай налады першаснай групы, выкарыстоўвайце выхад.

Каб мець магчымасць выкарыстоўваць каманду новая група, карыстальнік павінен быць членам той групы, якую ён хоча выкарыстоўваць у якасці першаснай. Акрамя гэтага, групавы пароль можа быць выкарыстаны для групы з дапамогай каманды gpasswd. Калі карыстальнік выкарыстоўвае каманду новая група, але не з'яўляецца членам мэтавай групы, абалонка запытвае пароль групы. Пасля таго, як вы ўведзяце правільны групавы пароль, будзе ўсталявана новая эфектыўная першасная група.

Упраўленне асноўнымі правамі

Сістэма дазволаў Linux была вынайдзена ў 1970-х гадах. Паколькі вылічальныя запатрабаванні былі абмежаваныя ў тыя гады, базавая сістэма дазволаў была даволі абмежавана. Гэтая сістэма дазволаў выкарыстоўвае тры дазволы, якія можна прымяняць да файлаў і каталогаў. У гэтым раздзеле вы даведаецеся, як выкарыстоўваць і змяняць гэтыя дазволы.

Разуменне правоў на чытанне, запіс і выкананне

Тры асноўныя дазволы дазваляюць вам чытаць, запісваць і выконваць файлы. Эфект гэтых дазволаў адрозніваецца пры ўжыванні да файлаў ці каталогам. У дачыненні да файла дазвол на чытанне дае вам права адкрыць файл для чытання. Такім чынам, вы можаце прачытаць яго змесціва, але гэта азначае, што ваш кампутар можа адкрыць файл, каб нешта з ім зрабіць.

Праграмны файл, якому патрабуецца доступ да бібліятэкі, павінен, напрыклад, мець доступ для чытання да гэтай бібліятэкі. З гэтага вынікае, што дазвол на чытанне - гэта самы асноўны дазвол, якое вам трэба для працы з файламі.

У дачыненні да каталога чытанне дазваляе адлюстроўваць змест гэтага каталога. Вы павінны ведаць, што гэты дазвол не дазваляе вам чытаць файлы ў каталогу. Сістэма дазволаў 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 Jan 28 2010 /usr/bin/passwd

Дазвол SUID можа выглядаць карысным (і ў некаторых выпадках так яно і ёсць), але ў той жа час яно патэнцыйна небяспечна. Пры няправільным ужыванні вы можаце выпадкова раздаць правы доступу root. Таму я рэкамендую выкарыстоўваць яго толькі з максімальнай асьцярожнасьцю.

Большасці адміністратараў ніколі не давядзецца яго выкарыстоўваць; вы ўбачыце яго толькі ў некаторых файлах, дзе аперацыйная сістэма павінна ўсталяваць яго па змаўчанні.

Другое спецыяльны дазвол - гэта ідэнтыфікатар групы (SGID). Гэты дазвол мае два эфекты. Пры ўжыванні да выкананага файла, ён дае карыстачу, які выконвае файл, дазволы ўладальніка групы гэтага файла. Такім чынам, SGID можа выканаць больш-менш тое ж самае, што SUID. Аднак для гэтай мэты SGID практычна не выкарыстоўваецца.

Як і ў выпадку з дазволам SUID, SGID ужываецца да некаторых сістэмных файлаў у якасці налады па змаўчанні.

Калі прымяняецца да каталога, SGID можа быць карысны, таму што вы можаце выкарыстоўваць яго для ўстаноўкі ўладальніка групы па змаўчанні для файлаў і падкаталогаў, створаных у гэтым каталогу. Па змаўчанні, калі карыстач стварае файл, яго эфектыўная першасная група ўсталёўваецца як уладальнік групы для гэтага файла.

Гэта не заўсёды вельмі карысна, асабліва таму, што ў карыстачоў Red Hat/CentOS у якасці асноўнай групы зададзена група з тым жа імем, што і ў карыстача, і з якіх карыстач з'яўляецца адзіным удзельнікам. Такім чынам, па змаўчанні файлы, якія стварае карыстач, будуць групавымі для агульнага доступу.

Уявіце сабе сітуацыю, калі карыстачы linda і lori працуюць у бухгалтэрыі і з'яўляюцца чальцамі групы кошт. Па змаўчанні гэтыя карыстачы з'яўляюцца чальцамі дзелі групы, адзіным чальцом якой яны з'яўляюцца. Аднак абодва карыстача з'яўляюцца чальцамі групы 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), а таксама sticky bit у каталогу агульнай групы.
  8. выканайце su - linda. Затым выканайце touch linda3 и touch linda4. Цяпер вы павінны ўбачыць, што два створаныя вамі файлы належаць групе sales, якая з'яўляецца ўладальнікам групы каталога /data/sales.
  9. выканайце rm -rf lisa*. Sticky bit прадухіляе выдаленне гэтых файлаў ад імя карыстальніка linda, паколькі вы не з'яўляецеся уладальнікам гэтых файлаў. Звярніце ўвагу, што калі карыстач linda з'яўляецца ўладальнікам каталога /data/sales, ён у любым выпадку можа выдаліць гэтыя файлы!

Упраўленне ACL (setfacl, getfacl) у Linux

Нават калі пашыраныя правы, якія абмяркоўваліся вышэй, дадаюць карысную функцыянальнасць да таго, як Linux працуе з дазволамі, гэта не дазваляе вам падаваць дазволы больш за аднаму карыстачу або адной групе ў адным файле.

Спісы кантролю доступу прапануюць гэтую функцыю. Акрамя таго, яны дазваляюць адміністратарам усталёўваць дазволы па змаўчанні складаным спосабам, пры якім усталяваныя дазволы могуць адрознівацца ў розных каталогах.

Разуменне ACL

Хоць падсістэма ACL дадае выдатныя функцыянальныя магчымасці вашаму серверу, у яе ёсць адзін недахоп: не ўсе ўтыліты падтрымліваюць яе. Такім чынам, вы можаце страціць налады ACL пры капіяванні ці перасоўванні файлаў, а праграмнае забеспячэнне для рэзервовага капіявання можа не выканаць рэзервовае капіраванне налад ACL.

Утыліта tar не падтрымлівае ACL. Каб пераканацца, што настройкі ACL не будуць страчаныя пры стварэнні рэзервовай копіі, выкарыстоўвайце зорка замест tar. зорка працуе з тымі ж параметрамі, што і tar; ён проста дадае падтрымку налад ACL.

Вы таксама можаце стварыць рэзервовую копію ACL з дапамогай атрымацьфакл, якую можна аднавіць з дапамогай каманды setfacl. Каб стварыць рэзервовую копію, выкарыстоўвайце getfacl -R /directory > file.acls. Каб аднавіць наладкі з файла рэзервовай копіі, выкарыстоўвайце setfacl -restore=file.acl.

Адсутнасць падтрымкі некаторымі прыладамі не павінна быць праблемай. Спісы ACL часта прымяняюцца да каталогаў як структурная мера, а не да асобных файлаў.
Таму іх будзе не шмат, а ўсяго толькі некалькі, ужытых у разумных месцах файлавай сістэмы. Такім чынам, аднавіць зыходныя спісы ACL, з якімі вы працавалі, адносна лёгка, нават калі ваша ПЗ для рэзервовага капіявання іх не падтрымлівае.

Падрыхтоўка файлавай сістэмы для ACL

Перад пачаткам працы з ACL можа запатрабавацца падрыхтаваць файлавую сістэму для падтрымкі ACL. Паколькі метададзеныя файлавай сістэмы неабходна пашыраць, не заўсёды ёсць падтрымка па змаўчанні для ACL у файлавай сістэме. Калі пры наладзе спісаў ACL для файлавай сістэмы вы атрымліваеце паведамленне "operation not supported", магчыма, у вашай файлавай сістэме адсутнічае падтрымка ACL.

Каб гэта выправіць, вам трэба дадаць опцыю acl mount у файле /etc/fstab, каб файлавая сістэма была змантаваная з падтрымкай ACL па змаўчанні.

Змяненне і прагляд настроек ACL з дапамогай setfacl і getfacl

Каб усталяваць ACL, вам патрэбна каманда наборфакл. Каб убачыць бягучыя наладкі ACL, вам патрэбен атрымацьфакл. Каманда Ls -l не паказвае ніякіх існуючых ACL; ён проста паказвае + пасля спісу дазволаў, які паказвае, што спісы ACL прымяняюцца і да файла.

Перад наладай спісаў ACL заўсёды карысна паказаць бягучыя наладкі ACL з дапамогай атрымацьфакл. Ніжэй на прыкладзе вы можаце ўбачыць бягучыя правы доступу, як паказана з дапамогай Ls -l, а таксама як паказана з атрымацьфакл. Калі вы паглядзіце дастаткова ўважліва, вы ўбачыце, што паказаная інфармацыя сапраўды такая ж.

[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

У выніку выканання каманды атрымацьфакл ніжэй бачна, што дазволы паказаны для трох розных аб'ектаў: ​​карыстальніка, групы і іншых. Цяпер давайце дадамо ACL, каб даць правы на чытанне і выкананне і групе sales. Каманда для гэтага setfacl -mg: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 -mu:linda:rwx /data дае дазволы карыстачу linda у каталогу /data, не робячы яго ўладальнікам і не змяняючы прызначэнне бягучага ўладальніка.

Каманда наборфакл мае шмат магчымасцяў і опцый. Адзін варыянт асабліва важны, параметр -R. Калі выкарыстоўваецца, опцыя робіць настройку ACL для ўсіх файлаў і падкаталогаў, якія ў цяперашні час існуюць у каталогу, дзе вы ўсталёўваеце ACL. Рэкамендуецца заўсёды выкарыстоўваць гэтую опцыю пры змене спісаў ACL для наяўных каталогаў.

Праца з ACL па змаўчанні

Адным з пераваг выкарыстання спісаў ACL з'яўляецца тое, што вы можаце даваць дазволы некалькім карыстальнікам або групам у каталогу. Яшчэ адной перавагай з'яўляецца тое, што вы можаце ўключыць атрыманне ў спадчыну, працуючы з ACL па змаўчанні.

Усталяваўшы ACL па змаўчанні, вы вызначыце дазволы, якія будуць усталяваныя для ўсіх новых элементаў, ствараных у каталогу. Майце на ўвазе, што ACL па змаўчанні не мяняе дазволу для існуючых файлаў і падкаталогаў. Каб змяніць іх, трэба дадаць і звычайны ACL!

Гэта важна ведаць. Калі вы хочаце выкарыстоўваць ACL для настройкі доступу некалькіх карыстальнікаў або груп да аднаго і таго ж каталогу, вы павінны ўсталяваць ACL двойчы. Спачатку выкарыстоўвайце setfacl -R -m, Каб змяніць ACL для бягучых файлаў. Затым выкарыстоўвайце setfacl -md:, каб паклапаціцца аб усіх новых элементах, якія таксама будуць створаны.

Каб усталяваць ACL па змаўчанні, вам проста трэба дадаць опцыю d пасля опцыі -m (парадак мае значэнне!). Таму выкарыстоўвайце setfacl -md:g:sales:rx /data, калі вы жадаеце, каб групавыя продажы прачыталі і выканалі ўсё, што калі-небудзь будзе створана ў каталогу /data.

Пры выкарыстанні спісаў ACL па змаўчанні таксама можа быць карысна ўсталяваць ACL для іншых. Звычайна гэта не мае асаблівага сэнсу, таму што вы таксама можаце змяніць дазволы для іншых, выкарыстоўваючы CHMOD. Аднак, што вы не можаце зрабіць з дапамогай CHMOD, гэта пазначыць правы, якія павінны быць прадастаўлены іншым карыстальнікам для кожнага новага файла, які калі-небудзь будзе створаны. Калі вы жадаеце, каб іншыя не атрымлівалі ніякіх дазволаў на штосьці, створанае ў /data, напрыклад, выкарыстайце setfacl -md: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 -mg:account:rx /data/sales и setfacl -mg:sales:rx /data/account.
  3. выканайце атрымацьфакл, каб пераканацца, што правы доступу былі ўстаноўлены так, як вы хацелі.
  4. выканайце setfacl -md:g:account:rwx,g:sales:rx /data/sales, каб усталяваць ACL па змаўчанні для каталога sales.
  5. Дадайце ACL па змаўчанні для каталога /data/account, выкарыстоўваючы setfacl -md:g:sales:rwx,g:account:rx /data/account.
  6. Упэўніцеся, што налады ACL дзейнічаюць, дадаўшы новы файл у /data/sales. Выканайце touch /data/sales/newfile і выканайце getfacl /data/sales/newfile для праверкі бягучых дазволаў.

Устаноўка правоў па змаўчанні з дапамогай umask

Вышэй вы даведаліся, як працаваць з ACL па змаўчанні. Калі вы не выкарыстоўваеце ACL, ёсць параметр абалонкі, які вызначае правы па змаўчанні, якія вы атрымаеце: умаск (зваротная маска). У гэтым раздзеле вы даведаецеся, як змяніць дазволы па змаўчанні з дапамогай умаск.

Вы, мусіць, заўважылі, што пры стварэнні новага файла ўсталёўваюцца некаторыя дазволы па змаўчанні. Гэтыя дазволы вызначаюцца наладай умаск. Гэты параметр абалонкі прымяняецца да ўсіх карыстальнікаў пры ўваходзе ў сістэму. У параметры умаск выкарыстоўваецца лікавае значэнне, якое адымаецца з максімальных дазволаў, якія могуць быць аўтаматычна ўсталяваны для файла; максімальная настройка для файлаў - 666, а для каталогаў - 777.

Аднак некаторыя выключэнні адносяцца да гэтага правіла. Вы можаце знайсці поўны агляд налад умаск у табліцы ўнізе.

З лічбаў, якія выкарыстоўваюцца ў умаск, як і ў выпадку лікавых аргументаў для каманды CHMOD, першая лічба адносіцца да дазволаў карыстальніка, другая лічба адносіцца да дазволаў групы, а апошняя адносіцца да дазволаў па змаўчанні, устаноўленым для іншых. Значэнне умаск па змаўчанні 022 дае 644 для ўсіх новых файлаў і 755 для ўсіх новых каталогаў, створаных на вашым сэрвэры.

Поўны агляд усіх лікавых значэнняў умаск і іх вынікаў у табліцы ніжэй.

Правы ў 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, для атрыбутаў файла можа запатрабавацца ўлучыць параметр мантаваць.

Гэта опцыя карыстальнік_xattr. Калі вы атрымліваеце паведамленне "operation not supported" пры працы з пашыранымі атрыбутамі карыстальніка, абавязкова ўсталюеце параметр мантаваць у файле /etc/fstab.

Многія атрыбуты задакументаваны. Некаторыя атрыбуты даступныя, але яшчэ не рэалізаваны. Не выкарыстоўвайце іх; яны нічога вам не прынясуць.

Ніжэй прыведзены найбольш карысныя атрыбуты, якія вы можаце прымяніць:

A Гэты атрыбут гарантуе, што час доступу да файла не змяняецца.
Звычайна кожны раз, калі файл адчыняецца, час доступу да файла павінна быць запісана ў метададзеныя файла. Гэта адмоўна ўплывае на прадукцыйнасць; таму для файлаў, да якіх ажыццяўляецца рэгулярны доступ, атрыбут A можна выкарыстоўваць для адключэння гэтай функцыі.

a Гэты атрыбут дазваляе дадаваць, але не выдаляць файл.

c Калі вы выкарыстоўваеце файлавую сістэму, у якой падтрымліваецца сціск на ўзроўні тома, гэты атрыбут файла гарантуе, што файл будзе сціснуты пры першым уключэнні механізму сціску.

D Гэты атрыбут гарантуе, што змены ў файлах запісваюцца на дыск неадкладна, а не ў кэшаванне ў першую чаргу. Гэта карысны атрыбут у важных файлах базы дадзеных, які дазваляе пераканацца, што яны не губляюцца паміж файлавым кэшам і цвёрдай кружэлкай.

d Гэты атрыбут гарантуе, што файл не будзе захаваны ў рэзервовых копіях, дзе выкарыстоўваецца ўтыліта дампа.

I Гэты атрыбут уключае індэксаванне для каталога, у якім ён уключаны. Гэта забяспечвае хутчэйшы доступ да файлаў для прымітыўных файлавых сістэм, такіх як Ext3, якія не выкарыстоўваюць базу дадзеных B-tree для хуткага доступу да файлаў.

i Гэты атрыбут робіць файл нязменным. Такім чынам, у файл нельга ўносіць змены, што карысна для файлаў, якія маюць патрэбу ў дадатковай абароне.

j Гэты атрыбут гарантуе, што ў файлавай сістэме ext3 файл спачатку запісваецца ў часопіс, а затым - у блокі дадзеных на цвёрдым дыску.

s Перазапісаць блокі, у якіх файл быў захаваны, на 0 з пасля выдалення файла. Гэта гарантуе, што аднаўленне файла немагчыма пасля таго, як ён быў выдалены.

u Гэты атрыбут захоўвае інфармацыю аб выдаленні. Гэта дазваляе распрацоўваць утыліту, якая працуе з гэтай інфармацыяй для выратавання выдаленых файлаў.

Калі вы хочаце прымяніць атрыбуты, вы можаце выкарыстоўваць каманду балбатня. Напрыклад, выкарыстоўвайце chattr +s somefile, Каб прымяніць атрыбуты да somefile. Трэба выдаліць атрыбут? Тады выкарыстоўвайце chattr -s somefile, і ён будзе выдалены. Каб атрымаць агляд усіх атрыбутаў, якія ў цяперашні час прымяняюцца, выкарыстоўвайце каманду lsattr.

Рэзюмэ

У гэтым артыкуле вы даведаліся, як працаваць з дазволамі. Вы прачыталі пра тры асноўныя дазволы, пашыраныя дазволы і пра тое, як прымяняць ACL-спісы ў файлавай сістэме. Вы таксама даведаліся, як выкарыстоўваць параметр umask для прымянення дазволаў па змаўчанні. У канцы гэтага артыкула вы даведаліся, як выкарыстоўваць пашыраныя карыстальнікам атрыбуты для прымянення дадатковага ўзроўню бяспекі файлавай сістэмы.

Калі вам спадабаўся гэты пераклад, прашу напісаць пра гэта ў каментарах. Будзе больш матывацыі рабіць карысныя пераводы.

У артыкуле выправіў некаторыя памылкі друку і граматычныя памылкі. Зменшыў некаторыя грувасткія абзацы на драбнейшыя для зручнасці ўспрымання.

Замест "Толькі хтосьці з адміністрацыйнымі правамі на каталог можа прымяняць дазвол на выкананне." выправіў на "Толькі хтосьці з правамі запісу на каталог можа прымяняць дазвол на выкананне.", што будзе больш правільным.

За заўвагі дзякуй berez.

Замяніў:
Калі вы не з'яўляецеся уладальнікам карыстальніка, абалонка праверыць, ці з'яўляецеся вы ўдзельнікам групы, якая таксама называецца групай файла.

на:
Калі вы не з'яўляецеся уладальнікам файла, абалонка праверыць, ці з'яўляецеся вы ўдзельнікам групы, у якой ёсць дазволы на гэты файл. Калі вы з'яўляецеся ўдзельнікам гэтай групы, вы атрымліваеце доступ да файла з дазволамі, якія для групы ўстаноўлены, і абалонка спыніць праверку.

Дзякуй за заўвагу CryptoPirate

Крыніца: habr.com

Дадаць каментар