Подробен анализ на разрешенията за папки и файлове в Linux

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

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

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

Определяне на разрешения за файлове

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

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

анализ

  • Тире показва липсата на промени (неизменността на първоначалните параметри).
  • Очевидно във всички случаи, за достъп до обекти в папка, трябвабитът за изпълнение "x " е зададен, тоест без този бит не може да се говори за каквито и да било операции върху неговите обекти.
  • Моля, имайте предвид, че когато изтривате, преименувате и премествате файл, собствените му права не играят никаква роля - вземат се предвид само правата върху папката, в която се намира.
  • Също така, промяна в собственика на файл се случва само когато неговият i-възел се промени. Следователно при преименуване и преместване на файлове се запазват правата на техните оригинални собственици, докато при копиране собственикът и групата се променят на този, който копира.
  • Правата за достъп до новосъздадения файл се определят от маскатаumask, която се задава отделно за всеки потребител на системата. Собственикът на файла е създателят, а групата е основната група на създателя. Изключение е, когато битътSGID (2000) е зададен в папката, съдържаща файла: новосъздадените файлове и папки ще имат групата на папката, а не основната група на създателя. Това е полезно, ако група потребители работят по проект и е важно всички файлове на проекта да принадлежат към една и съща група.
  • Трябва също да се отбележи иSticky bit (1000), който е зададен на папката, така че потребителите да не могат да изтриват файлове на други хора, дори ако имат официални разрешения за това. Основен пример е директорията /tmp.
  • Когато се копират от непривилегировани потребители, битоветеSUID иSGID се нулират, въпреки че другите триади права се запазват.

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

  1. Първо трябва да определите съвместимостта на триадите от права по собственик и група за субектадостъп и папката, в която се намира файлът. В резултат на това ще остане една съответна триада (горна клетка).
  2. След това по подобен начин трябва да определите съвместимостта на триадата от права за файла (долната клетка).
  3. И накрая, за избраните триади, тоест ефективни права за достъп, определяме крайните права с помощта на таблица.

Пример 1. Има файлsamfile вtestfolder с посочените собственост и разрешения. Необходимо е да се определи какво потребителятden може да прави с него, ако и той, иsam са членове на групатаadmins.

Пример 2. Сега да предположим, че потребителятden не е член на групатаadmins.

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

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

Алтернативен избор на права в триадите

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

Пример 1. Може лиsam да изтрие файлаsamfile, ако е в групатаadmins ?

  1. Откриваме съответствието на триадите от права "sam - папка"
  2. Потребителятsam е същият като собственика на папкатаsamfolder, но също е член на групатаadmins. В този случай трябва да се предпочита потребителската триадаrwx.
  1. Откриваме съответствието на триадите от права "sam - файл"
  2. Потребителятsam е същият като собственика на файлаsamfile и принадлежи към групатаsam. Тук също трябва да изберете потребителската триада ---.

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

Как да направя файл редактиран и четим за потребителsam ? Би било така, ако груповата триадаrw- "спечели". Очевидно, за да „работи“ груповата триада, е достатъчно просто да смените собственика на файла, след което първата триада вече няма да е от значение за потребителяsam и ще изчезне сама. Наистина, като промените собственика на файла на който и да е друг, напримерroot, можете да се уверите, че файлът е станал четим и редактиран заsam.

Определяне на разрешения за папки

Разрешенията за папки изглеждат подобно, само ефективните разрешения се формират от триадите родителска (горна) и целева (долна) папки.

файлове

Няма операция за редактиране на съдържание за папки като такива, така че този ред е пропуснат.

Най-тривиалното е да се определят правата върху основните папки, тъй като за тях няма родителски папки.

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

Важно е да разберете, че разрешенията за папка на Linux не се наследяват. Това означава, че ако нямате достъп до определена папка, това не предотвратява достъпа доподпапка на тази папка, ако са зададени съответните права за подпапката.

Разширение за разрешения за Linux с Posix ACL

Списъците за достъп според стандартите Posix ви позволяват изрично да замените правата върху всеки обект за всеки потребител и всъщност замените функционалността на традиционната система за права на Linux. Те ви позволяват да правите с правата върху обекти почти всичко, което не може да се направи чрез традиционните манипулации на включване на потребители в различни групи и разместване на техните триади от права.

Можете да видитепример за използване на Posix ACL за решаване на конкретен проблем.