Базовые права доступа и дополнительные атрибуты Linux

Для разграничения действий над файлами определены три базовых права доступа (базовые разрешения):

  • чтение r — «read»,
  • запись w — «write» и
  • выполнение х — «execute»,

соответствующие разрешению выполнять системные вызовы read, write и execve (точнее, системному вызову open с флагами O_RDONLY и O_WRONLY, но для простоты можно считать r — read, a w — write).

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

В наследии классической UNIX определены только три субъекта, которым назначаются базовые права — пользователь-владелец (owner), группа-владелец (group owner) и все остальные (others). Совокупность их базовых прав называется режимом доступа (access mode) к файлу.

Базовое право может быть назначено r, w или х или отозвано , поэтому в метаданных файла представляется одним битом, а для режима доступа требуется девять бит: по три бита прав на каждый из трех субъектов доступа. Компактно режим доступа может быть записан соответствующим числом в восьмеричной системе счисления rw-r—r— → 1101001002 → 6448.

Режим доступа к файлу

[email protected]:~$ stat .profile

Файл: «.profile»

. . .                                        . . .

Доступ: (6644/-rw- r— r—)     Uid:   ( 1000/   john)     Gid:    ( 1000/    john)

. . .                                        . . .

[email protected]:~$ ls -l .profile

-rw-r—r—  1  john  john   677   марта  24 12:26 .profile

Проверка режима доступа при операциях с файлами проверяется «слева направо» до первого совпадения.

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

В других случаях используются права для всех остальных, а для суперпользователя root вообще никакие проверки не осуществляются.

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

[email protected]:~$ id john
uid=1000(john) gid=1000(john) группы=1000(john),4(adm),20(dialout),…,110(admin)

[email protected]:~$ ls -l README.*
-rw-r—r—  1       john                   admin            2471    ноя.         11  01:12 README.john
—w-r—r—  1       john                   admin            2471    ноя.         11  01:12 README.john.locked
-rw-r—r—  1       mike                   admin            776     ноя.         11  01:12 README.mike
-rw—-r—  1       bubble               admin              171    ноя.          11  01:12 README.bubble
-rw-r—r—  1       stella                  admin               16    ноя.          11  01:12 README.stella

-rw-r—r—  1       troll                   admin                31    ноя.         11  01:12 README.troll

[email protected]:~$ wc README.*

wc: README.admins: Отказано в доступе

wc: README.bubble: Отказано в доступе

24 177 2471 README, john

wc: README.john.locked: Отказано в доступе

wc: README.troll: Отказано в доступе

12    70   776    README.mike

1        1      16     README.stella

37  248  3263  итого

Режим доступа новых файлов

Назначается режим доступа файлов при их создании программой, создавшей файл, исходя из назначения файла, но с учетом пожеланий (точнее, нежеланий) пользователя.

Так, например, текстовые редакторы назначают создаваемым (текстовым) файлам права rw для всех субъектов, а компиляторы назначают создаваемым (программным) файлам права rwx для всех субъектов.

Пользователь может выразить свое нежелание назначать вновь создаваемым файлам те или иные права доступа для тех или иных субъектов, установив так называемую реверсивную (т. е. обратную, символизирующую нежелание) маску доступа при помощи встроенной команды интерпретатора umask.

Реверсивная маска доступа

[email protected]:~$ umask

0002

[email protected]:~$ umask -S

u=rwx,g=rwx,o=rx

[email protected]:~$ touch common.jnl

[email protected]:~$ ls -l common.jnl

-rw-rw-r—   1 john john   0  ноя.  23 22:43 common. jnl

[email protected]:~$ umask g-w,o-rwx

[email protected]:~$ umask

0027

[email protected]:~$ umask -S

u=rwx,g=rx,o=

[email protected]:~$ touch group.jnl

[email protected]:~$ ls -l group.jnl

-rw-r——  1 john john  0 ноя.  23  22:44 group, jnl

[email protected]:~$ umask g=

[email protected]:~$ umask

0077

[email protected]:~$ umask -S

u=rwx,g=,o=

[email protected]:~$ touch private.jnl

[email protected]:~$ ls -l private.jnl

-rw———  1 john  john   0  окт.   23  22:44 private.jnl

Изменять режим доступа разрешено непосредственному пользователю — владельцу файла, но не членам группы-владельцев, что иллюстрирует листинг ниже при помощи команды chmod.

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

[email protected]:~$ id john
utd=1000(john) gid=1000(john) группы=1000(john) ,4(adm),20(dialout),… ,20( admin)

[email protected]:~$ ls -l README.*
-rw-r-r—   1    john                         admin            2471  окт.    11 01:12 README.john
-rw-r-r—   1    mike                        admin            2471  окт.    11 01:12 README.mike

. . .                                            . . .                                                    . . .
[email protected]:~$ chmod g-r,o-r README.john

[email protected]:~$ ls -la README.john
-rw——   1     john                        admin             2471  окт.    11 01:12 README.john
[email protected]:~$ chmod g-r,o-r README, mike
chmod: изменение прав доступа для «README.jake»: Операция не позволяется

Семантика режима доступа разных типов файлов

Права доступа r, w, х для обычных файлов представляются чем-то интуитивно понятным, но для других типов файлов это не совсем так. Например, каталог содержит список имен файлов, поэтому право w для каталога — это право записи в этот список и право стирания из этого списка, что трансформируется в право удаления файлов из каталога и создания файлов в каталоге.

Аналогично, право r для каталога — это право просмотра списка имен его файлов. И наконец, право x для каталога является правом прохода в каталог, т. е. позволяет обращаться к файлам внутри каталога по их имени.

Права доступа к каталогу

[email protected]:~$ mkdir folder

[email protected]: ~$ ls -lad folder/

drwxrwxr-x 2 john john  4096 окт.  12 00:37  folder/

[email protected]:~$ cp /etc/magic folder

[email protected]:~$ chmod u-w folder

[email protected]:~$ ls -lad folder/

dr-fxrwxr-x 2 john john  096 окт. 12 00:40 folder/

[email protected]:~$ cp /etc/localtime folder/

cp: невозможно создать обычный файл «folder/localtime»: Отказано в доступе

[email protected]:~$ rm folder/magic

rm: невозможно удалить «folder/magic»: Отказано в доступе

[email protected]:~$ ls -li folder/

итого 4

20318203 -rw-r—rw 1 john  john  111 окт.  12 00:40 magic

[email protected]:~$ chmod u-r folder

[email protected]:~$ ls -lad folder/

d—xrwxr-x 2  john john  4096 окт.  12 00:40 folder/

[email protected]:~$ ls -li folder/

ls: невозможно открыть каталог folder/: Отказано в доступе

[email protected]:~$ ls -li folder/magic

20318203 -rw-r—r—  1 john  john  111 окт. 12 00:40 folder/magic

[email protected]:~$ chmod u-rw folder/

[email protected]:~$ ls -lad folder/

drw-rwxr-x  2 john  john 4096 окт. 12 00:40 folder/

[email protected]:~$ cp /etc/localtime folder/

cp: не удалось выполнить stat для «folder/localtime»: Отказано в доступе

[email protected]:~$ rm folder/magic

rm: невозможно удалить «folder/magic»: Отказано в доступе

[email protected]:~$ ls -l folder/

ls: невозможно получить доступ к folder/magic: Отказано в доступе

итого 0

-????????? ? ? ? ?                                ? magic

[email protected]:~$ chmod u=rwx folder/

[email protected]:~$ ls -ld folder/

drwxrwxr-x 2  john  john  4096 окт. 12 00:40 folder/

[email protected]:~$ cd folder/

[email protected]:~/folder$ ls -l

итого 4

-rw-r—r—  1  john  john 111 окт. 12 00:40 magic

[email protected]:~/folder$ chmod a= magic

[email protected]:~/folder$ ls -l magic
—————  1  john  john 111 окт. 12 00:40 magic
[email protected]:~/folder$ rm magic

rm: удалить защищенный от записи обычный файл «magic»? у

[email protected]:~/folder$ ls -l

итого 0

Для жестких ссылок права доступа не существуют вовсе — они просто являются теми же правами, что и права целевого файла, в силу того что права доступа хранятся в метаданных.

Для символических ссылок семантика прав сохранена такой же, как и у жестких ссылок, с тем лишь различием, что права символических ссылок существуют отдельно от целевых файлов, но никогда не проверяются (symlink). Для изменения прав доступа самих символических ссылок даже не существует специальной команды — при использовании chmod со ссылкой всегда будут изменяться права целевого файла.

Права доступа ссылок

[email protected]:~$ ls -l README.john
-rwxr—r—   1  john  john 2471   окт.     11 01:13 README.john
[email protected]:~$ ln README.john read.me
[email protected]:~$ ln -s README.john readme.1st
[email protected]:~$ ls -l README.john read.me readrme.1st
-rwxr—r— 2   john  john  2471  окт.      11 01:13 read.me
lrwxrwxrwx 1 john john     11    окт.      12 01:19 readme.1st -> README.john
-rwxr—r— 2    john  john  2471  окт.      11 01:13 README.john
[email protected]:~$ chrood o-r  readme.1st
[email protected]:~$ ls -l README.john read.me readme.1st
-rwxrw-r—   2  john  john 2471 окт. 11 01:13 read.me
lrwxrwxrwx 1  john  john     11  окт.  12 01:19 readme.1st -> README.john
-rwxrw-r— 2   john  john  2471 окт. 11 01:13 README.john

Для специальных файлов устройств, именованных каналов и сокетов право х не определено, а права r и w стоит воспринимать как права ввода и вывода информации на устройство и как права передачи и приема информации через средство взаимодействия.

Дополнительные атрибуты

Помимо базовых прав доступа r, w и х, для решения отдельных задач разграничения доступа используют дополнительные атрибуты s, Set user/group ID (SUID Set User ID или SGID, Set Group ID) — атрибут неявного делегирования полномочий и t, sTicky — «липучка», атрибут ограниченного удаления.

Типичной задачей, требующей неявного делегирования полномочий, является проблема невозможности изменения пользователями свойств своих учетных записей, которые хранятся в двух файлах-таблицах — passwd и shadow, доступных на запись (и чтение) только суперпользователю root. Однако команды passwd, chsh и chfn, будучи запущены обычным пользователем, прекрасно изменяют пароль в таблице /etc/shadow и свойства пользовательской! записи в таблице /etc/passwd за счет передачи полномочий пользователя — владельца программы тому пользователю, который ее запускает.

Дополнительный атрибут SUID

[email protected]:~$ ls -la /etc/passwd /etc/shadow

-rw-r—r— 1   john  john  2338 сент.  11   11:51 /etc/passwd

-rw-r—«!— 1  root  shadow 1878 сент. 15 17:59 /etc/shadow

[email protected]:~$ passwd

Смена пароля для john

(текущий) пароль UNIX:

Введите новый пароль UNIX:

Повторите ввод нового пароля UNIX:

passwd: пароль успешно обновлён

[email protected]:~$ ls -la /etc/passwd /etc/shadow

-rw-r—r— 1   john  john  2338 сент. 11 11:51 /etc/passwd

-rw-r—— 1      root   shadow 1878 окт. 19 23:51 /etc/shadow

[email protected]:~$ chfn

Пароль:

Изменение информации о пользователе john

Введите новое значение или нажмите ENTER для выбора значения по умолчанию

Полное имя:
Номер комнаты []:
Рабочий телефон []: +7(495)403-03-08
Домашний телефон []:

[email protected]:~$ ls -l /etc/passwd /etc/shadow

—rw-r—r—  1   root   root        2357   окт.    19   23:53   /etc/passwd
-rw-r——   1    root   shadow  1878   окт.    19   23:51  /etc/shadow

[email protected]:~$ ls -la /usr/bin/passwd /usr/bin/chfn

-rwsr-xr-x  1   root    root     40292   сент.  13   2017 /usr/bin/chfn

-rwsr-xr-x  1    root   root      41284   сент.   13 2017 /usr/bin/passwd

За счет использования атрибута SUID получается, что пользователям, запускающим программы chfn, chsh и passwd, для их исполнения временно делегируются права владельца этих программ (суперпользователя root) так, как будто сам суперпользователь их запустил.

Дополнительный атрибут SGID

[email protected]:~$ w
00:03:53   up   12 days,  13:53,    7   users,    load average: 0,53, 0,51, 0,91

USER           TTY           FROM                   LOGIN@      IDLE      XPU      PCPU        WHAT
mike             tty2                                             00:03           9.00s    0.52s      0.43s         -bash
john              tty1                                              00:03          17.00s    0.51s      0.45s         -bash
[email protected]:~$ ls -l /dev/tty1 /dev/tty2
crw————  1 john   tty 4,  1 окт.     20 00:03 /dev/tty1
crw————  1 mike   tty 4,  2 окт.    20 00:03 /dev/tty2
[email protected]:~$ write mike
write: mike has messages disabled

. . .                     . . .                           . . .

[email protected]:~$ mesg у

. . .                     . . .                           . . .
[email protected]:~$ ls -l /dev/tty1 /dev/tty2

[email protected]:~$ ls -l /dev/tty2
crw—w—-   1 mike tty 4,  2 окт.    20 00:07 /dev/tty2
[email protected]:~$ write mike
write: write: you have write permission turned off.

Hi, buddy, wazzzup?
^D

[email protected]:~$
Message from [email protected] on tty1 at 00:10 …
Hey buddy, wazzup?
EOF
[email protected]:~$ ls -Ll /usr/bin/write
-rwxr-sr-x 1 root tty 9728 марта 31 2017 /usr/bin/write

 

Аналогично при использовании атрибута SGID, при передаче сообщений от пользователя к пользователю командой write или wall, запускающему эти программы пользователю, делегируются полномочия группы tty, имеющей доступ , на запись к терминалам (специальным файлам устройств /dev/ttyN), владельцы которых разрешили такой доступ.

Именно за счет механизма SUID/SGID различные команды позволяют обычным, непривилегированным пользователям выполнять сугубо суперпользовательские действия.

Так, например, su и sudo позволяют выполнять команды одним пользователям от лица других пользователей, mount, umount и fusermount — монтировать и размонтировать файловые системы, ping и traceroute — выполнять диагностику сетевого взаимодействия, at и crontab — сохранять в «системных» каталогах отложенные и периодические задания, и т. д.

Однако для каталогов атрибут SGID имеет совсем другой смысл. По умолчанию владельцем файла становится тот пользователь (и его первичная группа), который запустил программу, создавшую файл. Но. для файлов, создаваемых в «общих» для какой-то группы пользователей каталогах, логичнее было бы назначать группой-владельцем создаваемых файлов эту общую группу.

Дополнительный атрибут SGID для каталога

[email protected]:~$ cd /srv/kingdom

[email protected]:/srv$ id

uid=1005(bubblegum) gid=1005(bubblegum) группы=1005(bubblegum),1007(candy)

[email protected]:/srv/klngdom$ ls -ld .

drwxr-xr-x 2 bubblegum bubblegum 4096 окт. 21 22:02 .

[email protected]:/srv/ktngdom$ touch bananaguard1

[email protected]:/srv/kingdom$ ls -l

итого 0

rw-rw-r— 1 bubblegum bubblegum 0 окт. 21 22:02 bananaguard1

[email protected]:/srv/klngdom$ chgrp candy .

[email protected]:/srv/klngdom$ chmod g+ws .

[email protected]:/srv/klngdom$ ls -Id .

drwxrwsr-x 2 bubblegum candy 4096 окт. 21 22:02 .

. . .                       . . .                                    . . .

[email protected]:/srv/kingdom$ id

uid=1001(john) gid=1001(john) группы=1001(john),1007(candy)

[email protected]:/srv/klngdom$ touch bananaguard2

[email protected]:/srv/klngdom$ ls -l

итого 0

-rw-rw-r— 1  bubblegum bubblegum    0  окт. 21 22:02 bananaguard1

-rw-rw-r— 1  john              candy              0 окт. 21 22:02 bananaguard2

В примере из листинга выше за счет SGID-атрибута каталога, владельцем всех файлов, помещаемых в этот каталог, автоматически назначается группа-владелец самого каталога, а создатель (владелец) файла может теперь назначать нужные права доступа для всех членов этой группы к своему файлу либо неявно при помощи реверсивной маски доступа, либо явно при помощи команды chmod.

Атрибут-«липучка» t (sTicky) служит для ограничения действия базового разрешения w записи в каталоге. Например, временный каталог /tmp предназначается для хранения временных файлов любых пользователей и поэтому доступен на запись всем пользователям.

Однако право записи в каталог дает возможность не только создавать в нем новые файлы, но и удалять любые существующие файлы (любых пользователей), что совсем, не кажется логичным. Именно атрибут t ограничивает возможность удалять чужие файлы, т. е. файлы, не принадлежащие пользователю,
пытающемуся их удалить.

Дополнительный атрибут sTicky для каталога

[email protected]: /srv/kingdom$ id 
uid=1001(john) gid=1001(john) группы=1001(john),1007(candy)

[email protected]:/srv/kingdon$ ls -la

итого 8
drwxrwsr-x  2  bubblegum    candy   4096 окт.   23 20:57 .
drwxr-xr-x   3   root                root      4096  окт.   21 21:57 ..
-rw-rw-r—    1   bubblegum   bubblegum  0 окт. 21 23:15 bananaguard1
-rw-rw-r—    1    john              candy            0  окт. 21 23:24 bananaguard2

. . .                         . . .                                     . . .

[email protected]:/srv/kingdom$ rm bananaguard1

rm: удалить защищенный от записи пустой обычный файл «bananaguard1»? у

[email protected]: /srv/kingdom$ ls -1

итого 0
-rw-rw-r— 1     john  candy 0 окт. 21 23:24 bananaguard2

. . .                         . . .                                     . . .

[email protected]:/srv/kingdom$ chmod +t .

[email protected]: /srv/kingdom$ touch bananaguard1

[email protected]:/srv/kingdom$ ls -la

итого 8

drwxrwsr—t  2  bubblegum   candy   4096  окт. 23 21:19 .

drwxr-xr-x    3   root               root       4096  окт. 21 21:57 ..

-rw-rw-r—     1   bubblegum   candy          0   окт. 23 21:19 bananaguard1

-rw-rw-r—     1   john                candy          0   окт. 23 21:19 bananaguard2

. . .                         . . .                                     . . .

[email protected]:/srv/kingdom$ rm bananaguard1

rm: невозможно удалить «bananaguard1»: Операция не позволяется

 

Базовые права доступа и дополнительные атрибуты Linux: 1 комментарий

  1. Уведомление: Расширенные атрибуты файлов Linux | Debian GNU/Linux

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *