Разрешения и права доступа к файлам

Thank you for reading this post, don't forget to subscribe!

По дизай­ну Linux – мно­го­поль­зо­ва­тель­ская опе­ра­ци­он­ная систе­ма. В кор­по­ра­тив­ной систе­ме было бы несколь­ко поль­зо­ва­те­лей, обра­ща­ю­щих­ся к одной и той же систе­ме. Но если любой поль­зо­ва­тель может полу­чить доступ и изме­нить все фай­лы, при­над­ле­жа­щие дру­гим поль­зо­ва­те­лям или систем­ным фай­лам, это, без­услов­но, будет угро­зой безопасности.

Вот поче­му UNIX и, сле­до­ва­тель­но, Linux (Linux – Unix-подоб­ная систе­ма) име­ют встро­ен­ную меру без­опас­но­сти. Это гаран­ти­ру­ет, что доступ к фай­лу или ката­ло­гу может быть изме­нен толь­ко жела­е­мы­ми пользователями.

К како­му фай­лу будет обра­щать­ся поль­зо­ва­тель, реша­ет два фак­то­ра в Linux:

  • Вла­де­ние файлами
  • Раз­ре­ше­ние файла

Пони­ма­ние прав соб­ствен­но­сти на файл и раз­ре­ше­ния име­ет реша­ю­щее зна­че­ние для поль­зо­ва­те­ля Linux. Здесь мы подроб­но объ­яс­ним эти условия.

Владение файлами в Linux

Замет­ка
Мы можем исполь­зо­вать этот тер­мин здесь, но он при­ме­ним и к ката­ло­гам. Навер­ное, вы зна­е­те, что ката­ло­ги – это фай­лы в любом случае.

Каж­дый файл и ката­лог в Linux име­ет трех типов владельцев:

 

Пользователь

Поль­зо­ва­тель явля­ет­ся вла­дель­цем фай­ла. Когда вы созда­е­те файл, вы ста­но­ви­тесь вла­дель­цем фай­ла. Соб­ствен­ность так­же может быть изме­не­на, но мы это позже.

Группа

Каж­дый поль­зо­ва­тель явля­ет­ся частью опре­де­лен­ной груп­пы (групп). Груп­па состо­ит из несколь­ких поль­зо­ва­те­лей, и это один из спо­со­бов управ­ле­ния поль­зо­ва­те­ля­ми в мно­го­поль­зо­ва­тель­ской среде.

Напри­мер, если у вас есть коман­да раз­ра­бот­чи­ков, коман­да QA и коман­ды sysadmin, обра­ща­ю­щи­е­ся к одной и той же систе­ме, вы долж­ны создать для них отдель­ные груп­пы. Таким обра­зом, вы може­те эффек­тив­но управ­лять фай­ла­ми и без­опас­но­стью систе­мы. Это эко­но­мит вре­мя, пото­му что вме­сто того, что­бы вруч­ную добав­лять раз­ре­ше­ния для каж­до­го поль­зо­ва­те­ля, вы може­те про­сто доба­вить их в груп­пу и изме­нить раз­ре­ше­ние для груп­пы. Вы уви­ди­те, как это сде­лать поз­же в этой статье.

Даже если вы явля­е­тесь един­ствен­ным поль­зо­ва­те­лем систе­мы, вы по-преж­не­му буде­те частью мно­гих групп. Такие дис­три­бу­ти­вы, как Ubuntu, так­же созда­ют груп­пу с име­нем, ана­ло­гич­ным име­ни пользователя.

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

 

Другие

Дру­гие – это в основ­ном супер­груп­па со все­ми поль­зо­ва­те­ля­ми в систе­ме. В прин­ци­пе, любой, кто име­ет доступ к систе­ме, при­над­ле­жит этой группе.

Дру­ги­ми сло­ва­ми, «Поль­зо­ва­тель» – это один поль­зо­ва­тель, груп­па пред­став­ля­ет собой набор поль­зо­ва­те­лей, а «Дру­гой» состо­ит из всех поль­зо­ва­те­лей системы.

 

Разрешения для файлов в Linux

Каж­дый файл и ката­лог в Linux име­ет три раз­ре­ше­ния для всех трех типов владельцев:

Раз­ре­ше­ния для файлов

  • Чте­ние – про­смотр или копи­ро­ва­ние содер­жи­мо­го файла
  • Запись – может изме­нять содер­жи­мое файла
  • Выпол­не­ние – может запус­кать файл (если его испол­ня­е­мый файл)

Раз­ре­ше­ния для каталогов

  • Чте­ние – может пере­чис­лить все фай­лы и ско­пи­ро­вать фай­лы из каталога
  • Запись – может добав­лять или уда­лять фай­лы в ката­лог (тре­бу­ет­ся так­же раз­ре­ше­ние на выполнение)
  • Выпол­не­ние – может вой­ти в каталог

 

Общие сведения о разрешениях и правах доступа к файлам в Linux

Теперь, когда вы зна­е­те основ­ную тер­ми­но­ло­гию раз­ре­ше­ний и прав на файл, при­шло вре­мя уви­деть его в действии.

Если вы исполь­зу­е­те коман­ду ls с пара­мет­ром -l в фай­ле, вы уви­ди­те такой вывод:

Подроб­но весь вывод:

  • File tipe (Тип фай­ла) : Обо­зна­ча­ет тип фай­ла. d озна­ча­ет ката­лог, – озна­ча­ет обыч­ный файл, l озна­ча­ет сим­во­ли­че­скую ссылку.
  • Permissions (Раз­ре­ше­ния) : В этом поле отоб­ра­жа­ет­ся набор раз­ре­ше­ний для фай­ла. Я объ­яс­ню это подроб­но в сле­ду­ю­щем разделе.
  • Hard Link Count (Коли­че­ство жест­ких ссы­лок) : пока­зы­ва­ет, име­ет ли файл жест­кие ссыл­ки. Счет по умол­ча­нию – один.
  • User (Поль­зо­ва­тель) : Поль­зо­ва­тель, кото­ро­му при­над­ле­жат файлы.
  • Group (Груп­па) : Груп­па, у кото­рой есть доступ к это­му фай­лу. Одно­вре­мен­но может быть толь­ко одна группа.
  • File Size (Раз­мер фай­ла) : Раз­мер фай­ла в байтах.
  • Modification time (Вре­мя моди­фи­ка­ции) : Дата и вре­мя послед­не­го изме­не­ния файла.
  • Filename (Имя фай­ла) : Оче­вид­но, имя фай­ла или каталога.

Теперь, когда вы поня­ли вывод коман­ды ls -l, давай­те сосре­до­то­чим­ся на части раз­ре­ше­ния файла.

В при­ве­ден­ной выше коман­де вы види­те раз­ре­ше­ние фай­ла, подоб­ное это­му в девя­ти­знач­ном фор­ма­те :

 

Каж­дая бук­ва обо­зна­ча­ет кон­крет­ное разрешение:

  • r: раз­ре­ше­ние на чтение
  • w: раз­ре­ше­ние на запись
  • x: выпол­нить разрешение
  • -: не уста­нов­ле­но разрешение

Раз­ре­ше­ния все­гда нахо­дят­ся в поряд­ке читать, писать и выпол­нять, т. е. rwx. И тогда эти раз­ре­ше­ния уста­нав­ли­ва­ют­ся для всех трех сво­е­го рода вла­дель­цев (см. раз­дел прав соб­ствен­но­сти) в поряд­ке: Поль­зо­ва­тель, Груп­па и Другое.

если вы посмот­ри­те на при­ве­ден­ную выше кар­тин­ку, вы може­те ска­зать сле­ду­ю­щие вещи о раз­ре­ше­ни­ях файлов:

  • Файл име­ет пра­ва на чте­ние, запись и выпол­не­ние для Поль­зо­ва­те­ля, Но кто явля­ет­ся вла­дель­цем это­го фай­ла? У вас есть эта инфор­ма­ция на выхо­де ls -l (т.е. поль­зо­ва­тель andreyex).
  • Файл име­ет пра­ва на чте­ние и запись для груп­пы, но не выпол­ня­ет­ся. Какая груп­па? У вас есть инфор­ма­ция о груп­пе на выхо­де коман­ды ls -l (т.е. груп­па andreygroup).
  • Файл име­ет толь­ко раз­ре­ше­ние на чте­ние для дру­гих, то есть всех, у кого есть доступ к систе­ме. Вам не нуж­но знать, что это за дру­гое, пото­му что «дру­гое» озна­ча­ет всех пользователей.

Теперь, если вы сно­ва уви­ди­те всю коман­ду ls -l, вы може­те про­чи­тать пра­ва на фай­лы и пра­ва соб­ствен­но­сти вместе.

 

Файл andreyex.txt при­над­ле­жит поль­зо­ва­те­лю andreyex а так­же andreyex име­ет раз­ре­ше­ние на чте­ние, запись и выпол­не­ние. Все чле­ны груп­пы andreygroup име­ют доступ на чте­ние и запись к это­му фай­лу, в то вре­мя как все осталь­ные име­ют доступ толь­ко к чте­нию это­го файла.

При­ме­ча­ние
Кор­не­вой поль­зо­ва­тель име­ет пол­но­мо­чия супер­поль­зо­ва­те­ля и, как пра­ви­ло, он име­ет пра­ва на чте­ние, запись и выпол­не­ние всех фай­лов, даже если вы не види­те их в файл разрешения.

Один поль­зо­ва­тель может быть чле­ном несколь­ких групп, но толь­ко основ­ная груп­па поль­зо­ва­те­ля явля­ет­ся вла­дель­цем груп­пы фай­ла, создан­но­го поль­зо­ва­те­лем. Основ­ная груп­па поль­зо­ва­те­ля может быть най­де­на с помо­щью иден­ти­фи­ка­то­ра коман­ды –gn <username>. Оставь­те имя поль­зо­ва­те­ля пустым, если вы пыта­е­тесь най­ти свою соб­ствен­ную основ­ную группу.

Теперь, когда вы зна­е­те, как узнать раз­ре­ше­ния на файл, давай­те посмот­рим, как вы може­те изме­нить раз­ре­ше­ние и пра­ва соб­ствен­но­сти на файл.

 

Изменить права доступа к файлам в Linux

Вы може­те исполь­зо­вать коман­ду CHMOD для изме­не­ния раз­ре­ше­ний на файл в Linux.

Общая инфор­ма­ция : Раз­ре­ше­ния назы­ва­лись режи­мом досту­па и, сле­до­ва­тель­но, CHMOD была корот­кая фор­ма изме­не­ния режи­ма досту­па.

Суще­ству­ет два спо­со­ба исполь­зо­ва­ния коман­ды chmod:

  • Абсо­лют­ный режим
  • Сим­во­ли­че­ский режим

 

Использование chmod в абсолютном режиме

В абсо­лют­ном режи­ме раз­ре­ше­ния пред­став­ле­ны в чис­ло­вой фор­ме (точ­нее, вось­ме­рич­ная систе­ма). В этой систе­ме каж­дое раз­ре­ше­ние фай­ла пред­став­ле­но числом.

  • r (чте­ние) = 4
  • w (напи­сать) = 2
  • x (выпол­нить) = 1
  • – (без раз­ре­ше­ния) = 0

С помо­щью этих чис­ло­вых зна­че­ний вы може­те ком­би­ни­ро­вать их, и, таким обра­зом, один номер может исполь­зо­вать­ся для пред­став­ле­ния все­го набо­ра разрешений.

Чис­ло раз­ре­ше­ние
0
1 -x
2 -w-
3 (т.е. 2 + 1) -wx
4 r-
5 (т.е. 4 + 1) г-х
6 (т.е. 4 + 2) rw-
7 (т.е. 4 + 2 + 1) rwx

 

Може­те ли вы дога­дать­ся о раз­ре­ше­нии фай­ла в циф­рах в фай­ле andreyex.txt в нашем при­ме­ре? Это пишут, это 754.

Теперь, когда вы зна­е­те, какой номер пред­став­ля­ет это раз­ре­ше­ние, давай­те посмот­рим, как изме­нить раз­ре­ше­ние фай­ла с помо­щью этих знаний.

Пред­по­ло­жим, вы хоти­те изме­нить раз­ре­ше­ние фай­ла на andreyex.txt, что­бы каж­дый мог читать и писать, но никто не может его выпол­нить? В этом слу­чае вы може­те исполь­зо­вать коман­ду chmod сле­ду­ю­щим образом:

 

Если вы пере­чис­ли­те andreyex.txt сей­час, вы уви­ди­те, что раз­ре­ше­ние было изменено.

 

Использование chmod в символическом режиме

Про­бле­ма с абсо­лют­ный режим заклю­ча­ет­ся в том, что вы долж­ны все­гда предо­став­лять три номе­ра для всех трех вла­дель­цев, даже если вы хоти­те изме­нить раз­ре­ше­ние для одно­го владельца.

Здесь вы може­те исполь­зо­вать сим­во­ли­че­ский режим с помо­щью коман­ды chmod.

В сим­во­ли­че­ском режи­ме вла­дель­цы обо­зна­ча­ют­ся сле­ду­ю­щи­ми символами:

  • u = поль­зо­ва­тель­ский пользователь
  • g = вла­де­лец группы
  • o = другое
  • a = все (поль­зо­ва­тель + груп­па + прочее)

Сим­во­ли­че­ский режим исполь­зу­ет мате­ма­ти­че­ские опе­ра­то­ры для выпол­не­ния изме­не­ний разрешения:

  • + для добав­ле­ния разрешений
  • – для уда­ле­ния разрешений
  • = для пере­опре­де­ле­ния суще­ству­ю­щих раз­ре­ше­ний с новым значением

Теперь, когда вы зна­е­те, давай­те посмот­рим, как исполь­зо­вать коман­ду chmod в сим­во­ли­че­ском режиме.

В нашем преды­ду­щем при­ме­ре, если вы хоти­те доба­вить раз­ре­ше­ние на выпол­не­ние для вла­дель­ца груп­пы, вы може­те исполь­зо­вать коман­ду chmod сле­ду­ю­щим образом:

 

Если вы сей­час про­смот­ри­те раз­ре­ше­ния для это­го фай­ла, вы уви­ди­те, что теперь добав­ле­но раз­ре­ше­ние на выполнение:

 

Вы так­же може­те объ­еди­нить несколь­ко изме­не­ний раз­ре­ше­ний в одну коман­ду. Пред­по­ло­жим, вы хоти­те уда­лить пра­ва на чте­ние и запись и доба­вить раз­ре­ше­ния на выпол­не­ние для дру­гих. Вы так­же хоти­те доба­вить раз­ре­ше­ние на выпол­не­ние для поль­зо­ва­те­ля, Вы може­те сде­лать все это по одной команде:

 

Полу­чен­ные раз­ре­ше­ния будут такими:

 

Если вы хоти­те одно­вре­мен­но изме­нить раз­ре­ше­ния для всех трех поль­зо­ва­те­лей, вы може­те исполь­зо­вать его сле­ду­ю­щим образом:

 

Это при­ве­дет к уда­ле­нию раз­ре­ше­ния на выпол­не­ние для всех.

 

Теперь, когда вы зна­е­те, как изме­нить раз­ре­ше­ние фай­ла, давай­те посмот­рим, как изме­нить пра­ва соб­ствен­но­сти на файл.

Совет
Один файл не может вхо­дить в несколь­ко групп.

 

Изменение владельца файла в Linux

Что­бы изме­нить пра­во соб­ствен­но­сти на файл, вы може­те исполь­зо­вать коман­ду chown. Вы може­те лег­ко дога­дать­ся, что chown озна­ча­ет вла­дель­ца изменения.

Вы може­те изме­нить вла­дель­ца поль­зо­ва­те­ля фай­ла сле­ду­ю­щим образом:

 

Если вы хоти­те изме­нить поль­зо­ва­те­ля и груп­пу, вы може­те исполь­зо­вать коман­ду cown сле­ду­ю­щим образом:

 

Если вы про­сто хоти­те изме­нить груп­пу, вы може­те исполь­зо­вать коман­ду chwon таким образом:

 

или коман­ду chgrp, спе­ци­аль­но исполь­зу­е­мую для изме­не­ния вла­дель­ца груп­пы фай­ла или ката­ло­га. Вы може­те дога­дать­ся, что коман­да chgrp озна­ча­ет груп­пу изменений.

 

В нашем при­ме­ре до сих пор, если вы хоти­те изме­нить вла­дель­ца и груп­пу поль­зо­ва­те­лей на root, вы може­те исполь­зо­вать коман­ду chown сле­ду­ю­щим образом:

 

Это изме­нит пра­во соб­ствен­но­сти на файл на root как для поль­зо­ва­те­ля, так и для группы.

 

Заметь­те, что нам при­шлось исполь­зо­вать sudo с chown? Это свя­за­но с тем, что здесь задей­ство­ван root, и что­бы спра­вить­ся с кор­нем, вам нуж­ны пра­ва суперпользователя.

 

Бонус Совет: Есть ли приоритет в разрешениях на файлы?

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

 

Теперь, если поль­зо­ва­тель andreyex пыта­ет­ся про­чи­тать файл с помо­щью коман­ды cat или less, смо­жет ли он это сде­лать? Ответ – нет, пото­му что у него нет раз­ре­ше­ния на чтение.

Но поль­зо­ва­тель andreyex явля­ет­ся частью груп­пы andreygroup, и у груп­пы есть доступ на чте­ние. Дру­гой име­ет пра­во на чте­ние и запись. Это долж­но озна­чать, что каж­дый (вклю­чая поль­зо­ва­те­ля andreyex) может читать и писать файл, не так ли? Неправильно!

В Linux при­о­ри­тет от поль­зо­ва­те­ля, а затем от груп­пы, а затем и от дру­го­го. Систе­ма Linux про­ве­ря­ет, кто ини­ци­и­ро­вал этот про­цесс (в нашем при­ме­ре cat или less). Если поль­зо­ва­тель, ини­ци­и­ро­вав­ший этот про­цесс, так­же явля­ет­ся вла­дель­цем поль­зо­ва­те­ля, уста­нав­ли­ва­ют­ся биты прав пользователя.

Если вла­де­лец фай­ла не ини­ци­и­ро­вал этот про­цесс, систе­ма Linux про­ве­ря­ет груп­пу. Если поль­зо­ва­тель, ини­ци­и­ро­вав­ший про­цесс, нахо­дит­ся в той же груп­пе, что и груп­па вла­дель­ца фай­ла, уста­нов­лен бит груп­по­вых разрешений.

Если этот вла­де­лец про­цес­са даже не вхо­дит в груп­пу в каче­стве вла­дель­ца груп­пы фай­ла, тогда уста­нав­ли­ва­ют­ся дру­гие биты разрешения.

 

Что еще?

Суще­ству­ют неко­то­рые рас­ши­рен­ные раз­ре­ше­ния для фай­лов, такие как уста­нов­ка Sticky bit для предот­вра­ще­ния уда­ле­ния фай­лов и т. д.