⚡ ѕ–ќ…ƒ» Ќќ¬џ… ќЌЋј…Ќ  ”–— ѕќ —≈“≈¬џћ “≈’ЌќЋќ√»яћ —ќ — »ƒ ќ… 50%

до конца скидки осталось

Ќачать обучение 🚀
ћерион Ќетворкс

14 минут чтени€

ƒанна€ стать€ посв€щена, наверное, самой сложной части начальной части изучени€ Linux - правам доступа. ¬ данной статье будет рассказано о правах доступа, владельцах файлов, папок.

÷ели статьи:

  1. ѕросматривать и измен€ть владельцев объектов.
  2. ”станавливать правила доступа к объектам.
  3. ѕонимать право УExecuteФ

ќбучайс€ в Merion Academy

ѕройди курс по
сетевым технологи€м

Ќачать

ќсновные команды дл€ работы с правами доступа:

  • chown Ц установка владельца
  • chgrp Ц установка группы владельца
  • chmod Ц установка прав доступа
¬ладельцы

¬ Windows у нас есть только один владелец файла или папки. Ёто можно посмотреть в свойствах объекта на вкладке безопасность, дополнительно и там же мы можем сменить владельца. ¬ладелец в Windows по умолчанию обладает полными правами на объект. ¬ Linux все происходит немного по-другому: Ћюбой объект моет иметь своего владельца и группу владельцев, и кроме этого дл€ объекта существуют все остальные пользователи в системе. Ёто самое существенное различие, что может быть владелец и группа владельцев.

» так у мен€ есть пользователь petya и пользователь siadmin. “еперь посмотрим информацию по этим двум пользовател€м. „тобы посмотреть воспользуемс€ командой id siadmin и id petya.

id siadmin

” моего пользовател€ есть uid, который говорит, что € siadmin и вхожу в группу siadmin.  огда мы создаем нового пользовател€ группа по умолчанию совпадает с именем пользовател€. “.е каждый пользователь по умолчанию входит в свою собственную группу. ƒл€ пользовател€ petya € создал группу не по его имени. я создал группу testusers и включил данного пользовател€ в данную группу и установил данную группу по умолчанию дл€ данного пользовател€.

ls -la

я нахожусь в домашней папке. Ќабрав команду ls Цl мы можем посмотреть список каталогов и файлов, у каждого из них есть владелец и группа владельцев. Ёти данные указаны в колонках. ƒл€ файла test1.txt владельцем €вл€етс€ root и группа владельцев root.

ls -la

я создал папку Folder и файл test2.txt и назначил владельца и группу владельцев, согласно картинке. ƒл€ изменени€ данных параметров используетс€ команда chown. ƒанную команду необходимо примен€ть с повышением в привилеги€х, через команду sudo. Ќапример, изменим владельца дл€ файла test1.txt. команда будет выгл€деть так sudo chown petya test1.txt. ѕароль не запросило, т.к € уже его вводил.

ls -la

 ак мы видим все успешно отработало. ≈сли раньше был владелец root, то теперь мы видим petya. ƒл€ изменени€ группы мы так же можем воспользоватьс€ командой sudo chgrp testusers test1.txt.

ƒанна€ команда chgrp используетс€ редко, т.к вполне достаточно знать команду chown. ƒанна€ команда умеет мен€ть в том числе и группу. ѕростой пример изменим группу использу€ команду chown :testusers file.txt. ѕросто перед группой ставим знак : который и говорит, что надо заменить группу на указанную. ј можно сделать сразу 2 действи€ chown petya:testusers file1.txt

Ќемного сумбура вносит, что у пользовател€ группа по умолчанию совпадает с именем пользовател€. Ќо это стандартное поведение Linux, который так заводит группу. ƒаже суперпользователь root имеет свою группу root. ѕри создании пользовател€ petya был принудительно включен в группу testusers и она была выставлена по умолчанию дл€ данного пользовател€.

≈ще есть важный момент, который необходимо упом€нуть. Ёто рекурсивное выставление владельцем или группы владельцев на папки или файлы. “.е если у нас есть папка родительска€ и в ней дочерние папки и файлы, а то и несколько вложений, а мы хотим изменить владельца или группу владельцев рекурсивно вниз, то команду chown необходимо использовать с ключем ЦR.

ѕример: sudo chown ЦR siadmin:testusers Folder


ѕрава доступа

ƒалее вернемс€ к самой первой картинке. Ќа картинке добавлены подписи на английском €зыке. Ёто сделано, дл€ большей нагл€дности. ѕотому, что сейчас будем раздавать права на объекты файловой системы файлы, папки и другие объект. —ледовательно, права будут присваиватьс€ владельцам, группе владельцев и все остальные. ѕрава дл€ владельцев Ц это user - (u), права дл€ группы владельцев group - (g), ѕрава дл€ всех остальных other - (o).

ƒл€ того, чтобы далее разбиратьс€ с темой прав, надо запомнить вот такую табличку.

–азрешени€

¬ классическом Linux, есть 3 вида доступа к объекту, это право на чтение, право на запись и право на выполнение и различные комбинации из этих прав. «аглавные буквы на верху таблицы отвечают за какое-либо право. ÷ифрами обозначены значени€ данных прав. ≈сли мы даем право на чтение, то оно обозначаетс€ r--, если чтение и запись то rw-, если даем все права то rwx. ћы можем объедин€ть данные права, как видите в табличке различные комбинации указаны. ¬сего 8 комбинаций от "нет прав", до "полных прав". “ак же данна€ комбинаци€ может назначатьс€ в виде цифр. “.е на какой то файл у такого товарища доступ 5, это значить что данный товарищ имеет право читать файл и запускать на выполнение. ѕосчитать очень просто чтение это - 4 , а выполнение Ц это 1, а в сумме будет 5 или по другому r-x. —ледовательно мы можем назначать, как в цифровом, так и в символьном варианте права.

rwx

≈ще один не маловажный момент мы назначаем права на файл, сразу дл€ всех видов пользователей. —ледовательно, указыва€ права, мы их сразу задаем дл€ владельца, дл€ группы владельца и всех остальных. ѕрава мы можем назначать. “очно так же как на картинке символами rwx или цифрами, согласно табличке. ƒл€ лучшего понимани€ пример:

Chmod 750 script - полные права владельцу, чтение и выполнение группе владельца и ничего всем остальным.

 огда мы просматриваем права на объекты мы видим символьные обозначени€, а там, где нет символа ставитс€ прочерк, который означает, что данное право отсутствует.

ѕраво <<rwx rw- r-->> script - полные права владельцу, чтение и запись группе владельца, чтение остальным.

„тобы легче было определ€ть права на объект надо мысленно разделить на блоки по 3 символа. ѕервый блок Ч это ¬ладелец, 2-й Ѕлок Ч это группа владельца и 3-й блок Ч это другие пользователи.

—hmod u+w script - дать право записи владельцу.

Chmod ugo-x script - отобрать у всех право исполнени€ файла.

ѕосмотреть, какие объекты наход€тс€ в директории и их права можно командой ls Цla. “ак же мы видим владельца и группу владельца. “еперь мы можем понимать первую строчку.

ls Цla<

¬ывод из всего этого, напрашиваетс€ следующий. ¬ладелец у объекта файловой системы может быть только один. ¬ группу testusers или другую мы можем добавить кого угодно и они будут следовательно иметь права, как группа владельцев. », следовательно, все остальные пользователи, т.е не владелец и не вход€щие в группу, будут относитс€ к категории всех остальных пользователей. ѕолучаетс€ Linux нам дает разбить всех на три группы и в соответствии с этим назначить различные права, а Windows ведет себ€ по-другому и там можно более гибко задавать права. ћы можем создать 100 пользователей и каждому из них дать какие-то свои уникальные права. ¬ Linux тоже это возможно с помощью разных ACL (Access Control List - лист доступа), но это не входит в базовые пон€ти€, которые мы разбираем в рамках данной статьи.

ћожно заметить ,что дл€ папки спереди по€вл€етс€ символ d. Ёто d Ц directory каталог. ћожет по€вл€тьс€ l Ц link Ц ссылка и.т.д.

—ледовательно, можно убирать права указыва€ у кого, например, забрать выполнение chmod ugo-x test1.txt или мы можем добавить владельцу chmod u+x test1.txt. » третий вариант изменени€ прав на файл - это полностью перезаписать права на объект chmod 640 test1.txt.

–азберемс€ с правом на execute Ц выполнение.

ѕон€тно становитс€ это права, когда мы имеет дело с каким-то скриптом или бинарником или программой исполн€емой. “ак же у нас данное право может назначатьс€ на каталог, а каталог мы исполнить не можем. Ќо тут есть интересный момент, если у вас будет на папку разрешение только на чтение и запись, прочитать папку, переименовать ее т.е поработать с наименованием папки, но в глубь папки вы не сможете зайти. „тобы зайти во внутрь папки необходимо право execute Ц т.е выполнение ее.


ћаска создани€ файлов и папок

¬ данной части статьи рассмотрим следующий вопрос:

ѕонимание принципов работы и управлени€ масками создани€ файлов и папок.

ќсновные пон€ти€:

  • umask Ц маска создани€ файлов и папок
  • suid Ц бит запуска от имени владельца
  • sgid Ц бит запуска от имени группы владельцев
  • sticky Ц бит защиты содержимого

ѕервое пон€тие umask - user creation mask - т.е маска с которой создаетс€ нова€ папка или файл, это то с какими правами по умолчанию будут создаватьс€ папки и файлы дл€ данного пользовател€. ¬ том случае если не создано каких-то особенных настроек наследовани€ папки.

suid Ц set user id, который позвол€ет, если установлен на исполн€емый файл, то любой пользователь, который запускает, получает права определенные дл€ владельца данного файла. ѕо-другому, позвол€ет использовать права владельца данного файла, происходит нека€ подмена вас на владельца этого файла.

sgid Ц set user id, который позвол€ет, если установлен на исполн€емый файл, то любой пользователь, который запускает, получает права определенные дл€ группы владельца данного файла. ѕо-другому, позвол€ет использовать права группы владельца данного файла, происходит нека€ подмена вас на пользовател€ вход€щего в группу владельца этого файла.

umask

ћаска это така€ интересна€ штука, котора€ указывает права поЦумолчанию. ќна рассчитываетс€ с помощью вычитани€ из максимальных прав. ѕримеры вычислени€ показаны на картинке.

ѕосмотрим, как выгл€дит это в консоли.

—оздадим текстовый файл от имени стандартного пользовател€ touch test10.txt.

ls Цla

ћы видим права, которые были выданы по умолчанию 664, соответственно € €вл€юсь владельцем и мо€ группа.

—оздадим папку mkdir TestFolder.

mkdir TestFolder

¬ыданы права по умолчанию 775. “еперь посмотрим правило действующее. ѕочему создаютс€ объекты именно с такими правами. Ётот параметр находитс€ в профиле в старых верси€х, сейчас он перенесен и за данный параметр отвечает утилита pam_umask. ≈сли мы откроем мануал по данной утилите, то мы увидим, что данный параметр находитс€ в /etc/login.defs

/etc/login.defs

¬идим, что значение umask = 022. Ц это значение, которое идет по умолчанию во всех дебиан подобных операционных системах.

¬ведем новое значение umask 075. —оздадим новый файл touch test20.txt.

touch test20.txt

ѕолучаем права 602.

ѕосле перезагрузки маска изменитс€ на маску по умолчанию, чтобы маску нужную зафиксировать, необходимо отредактировать файл /etc/login.defs. —ледовательно, дл€ нашего пользовател€ значить маска изменитс€ с 022 на ту маску, которую там пропишем.

Ќужно обратить внимание, что при создании папки права на выполнение по умолчанию выдаютс€, а на файл нет. Ёто св€занно с тем, что без данных прав в данную папку невозможно будет зайти, а с файла убираютс€ в цел€х защиты. Ќапример, если вдруг окажетс€, что файл Ц это вредоносный код.


Suid, sgid, sticky

–ассмотрим оставшийс€ вопрос. «ачем нужны suid, sgid и sticky, биты и их установка.

  • Suid Ц устанавливаетс€ дл€ файлов.
  • Sgid Ц устанавливаетс€ дл€ файлов и дл€ папок
  • Sticky Ц устанавливаетс€ дл€ папок.

” них у всех есть цифровые значени€. »х можно назначать точно так же, как и права, можно назначать через rwx или цифирные сочетани€, а также т.к есть цифирные обозначени€ их можно комбинировать. ≈сли мы установили 6 то мы установили suid и sgid. Ётот бит через цифры ставитс€, точно так же, как и права, только ставим дополнительную цифру перед цифрами, означающими права.

“ак же эти биты можно ставить, через буквы:

  • Chmod u+s script - установка suid
  • Chmod g+s script - установка sgid
  • Chmod o+t script - установка sticky

 ак мы видим suid добавл€етс€ к правам владельца, sguid прибавл€етс€ к правам группы владельца. Sticky добавл€етс€ к правам всем остальным.

suid, sgid, sticky ls Цla

 ак мы видим создан файл script.run с правами 755 и папка TestFolder 755. ”становим suid бит на файл script.run. ¬ насто€щее врем€ данный файл может выполнить любой человек. »зменим права на 770 - sudo chmod 770 script.run. ѕереключимс€ под пользовател€, который не входит в группу siadmin. Ќапример, пользователь su petya. ћожно конечно добавить права пользователю petya, но иногда нужно, чтобы файлик запустилс€ из-под ¬ладельца файла. ƒаже если будут сто€ть разрешение на запуск данного файла и будет сто€ть suid, то файл запуститьс€ из под ¬ладельца.

”станавливаем sudo chmod u+s script.run и видим, во-первых, теперь у нас файлик подкрашен красным, данное выделение делает оболочка. ¬о-вторых, когда мы смотрим права, то видим x заменилс€ на s. » теперь, кто бы не запускал файл, он всегда будет запускать от имени ¬ладельца.

ls Цla

ћожно подробнее посмотреть через команду stat script.run, котора€ показывает полную статистику по файлу.

stat script.run

ћы можем увидеть, что права стали теперь 4770. ¬от эта сама€ цифра 4 впереди и говорит, что установлен suid бит. ћы аналогично можем убрать suid бит sudo chmod u-s script.run. ¬се вернулось на свои места.

ƒл€ чего это нужно, есть некоторые программы которым необходим доступ к аппаратной части. Ќапример ping, который провер€ет св€зь, ему нужен доступ к сетевой карте. ѕо умолчанию права на ping есть только у root, но если мы хотим чтобы все пользователи могли использовать данную утилиту, то мы должны разрешить ее запуск от имени root. ‘актически та же сама€ функци€, как и в операционной системе Windows запустить от пользовател€. јналогичным образом работает и sgid, если нам необходимо запускать от группы владельца, то устанавливаем этот бит и можем пользоватьс€ - sudo chmod g+s script.run.

sudo chmod g+s script.run

–езультат наших действий подсвечен желтым.

ћожно одновременно оба бита установить, следовательно, при выполнении будет и владелец заменен и группа заменена. Ёто имеет смысл делать, только дл€ исполн€емых файлов. ”станавливать на обычный текстовый файл данные биты, смысла конечно же нет.

ќчень редко, когда примен€ю оба бита сразу, такое сочетание необходимо если уж сильно кто-то заморачиваетс€ с безопасностью или требуетс€ ювелирна€ настройка прав доступа и запуска.

“еперь посмотрим, что с папкой происходит. Ќа папку можно устанавливать sgid и sticky биты. ≈сли мы устанавливаем групповой бит, то он дл€ папок будет мен€ть владельцев всех вложенных файлов на группу владельцев этой папки, т.е это один из вариантов наследовани€.

—оздадим файл от пользовател€ siadmin. Touch file.txt в текущей папки он создаетс€ со стандартными правами. ”становим sgid на папку TestFolder - Sudo chmod g+s TestFolder.

—оздадим в ней такой же файл sudo touch TestFolder/file.txt

sudo touch TestFolder/file.txt

 ак мы видим группа осталась прежней. ≈сли пользователю root сказать создать файл в текущем каталоге, то владелец и группа будут root.

“еперь про sticky бит. ≈сли установлен sticky бит на папку, то только ¬ладелец данной папки или суперпользователь может удалить из нее файлы.

—оздадим папку Folder, поставим на нее максимальные права 777. » внутри создадим файл file.txt.

file.txt

‘айлик с правами по умолчанию. ѕомен€ем права на данный фал 666. ѕрава на чтение и запись по€вились теперь у всех. ѕереключимс€ на другого пользовател€, например, petya. ѕерейдем в домашний каталог пользовател€ siadmin - cd /home/siadmin/Folder. ¬нутри файл txt, который мы создавали. » удал€ем rm file.txt. ‘айл удалилс€ без проблем. ƒопустим мы хотим защитить от удалени€, следовательно, необходимо установить sticky бит - sudo chmod o+t Folder

sudo chmod o+t Folder

 ак видим по€вилась буква t на месте прав дл€ всех остальных. —оздадим еще раз файл touch file1.txt. ƒаем на данный файл всем права 666. ј далее перелогиниваемс€ под petya. «аходим в папку /home/siadmin/Folder и командой rm file1.txt пытаемс€ удалить, на что получаем отказ от системы. Ќесмотр€ на права 666, система не дает удалить файл. —ледовательно, удалить все вложенные объекты может либо root или ¬ладелец папки.

rm file1.txt
>