И sticky bit
Помимо битов, устанавливающих разрешения на доступ к файлу, существуют специальные атрибуты, для которых предназначена еще одна триада битов:
r sticky bit (save text mode) — бит "липучка";
r SUID — бит подмены UID;
r SGID — бит подмены GID.
Sticky bit кодируется восьмеричной 1 (двоичная 001), SGID кодируется вось- меричной 2 (010), а SUID — 4 (100). В символьной нотации применяются символы t для sticky bit, s для SUID и SGID. Эти символы всегда выводятся в позиции, где обычно стоит флаг разрешения на исполнение (x). При этом:
r SUID отображается в виде буквы s в старшей триаде битов, отображаю- щей права владельца;
r SGID отображается в виде буквы s в средней триаде битов, отображаю- щей права группы;
r sticky bit отображается в виде буквы t в младшей триаде битов, отобра- жающей права для всех остальных.
Прописные символы S и T выводятся при отсутствии в этих триадах прав на исполнение, что обычно сигнализирует о ненормальном состоянии прав доступа.
Пример 6.19. Специальные биты прав доступа |
$ ls -ld /tmp /bin/ping
-rws--x--x | 1 root | root | 32908 Окт 16 2002 /bin/ping |
drwxrwxrwt | 94 root | root | 3488 Дек 14 20:31 /tmp |
Приведенный пример 6.19 показывает, что на файл системной команды ping установлен бит SUID (символ s в старшей триаде вместо прав на исполнение), а на каталог /tmp установлен sticky bit (символ t в триаде прав остальных).
Атрибут sticky bit в GNU/Linux для файлов не используется, в ранних верси- ях UNIX он был предназначен для того, чтобы оставить в памяти образ про- граммы (save text mode).
Обычный процесс наследует права доступа к системным ресурсам от пользо- вателя, запустившего процесс, и его первичной группы (UID и GID), однако для исполняемых файлов, на которые установлены биты SUID и/или SGID, это не так.
При установленном на исполняемый файл бите SUID процесс выполняется не от имени пользователя, запустившего его, а от имени владельца исполняе- мого файла команды. Аналогично, при установленном бите SGID процесс исполняется не от имени первичной группы пользователя, запустившего про- цесс, а от имени группы пользователей файла.
У каждого процесса имеются четыре идентификатора:
r RUID — Real UID, который всегда равен UID пользователя, выполнивше- го команду;
r RGID — Real GID, который всегда равен GID пользователя, выполнивше- го команду;
r EUID — Effective UID, который равен либо RUID, либо если на исполняе- мый файл установлен бит SUID, то UID владельца файла;
r EGID — Effective GID, который равен либо RGID, либо если на исполняе- мый файл установлен бит SGID, то GID владельца файла.
В подавляющем большинстве случаев подмена владельца или группы осуще- ствляется на root или какого-либо привилегированного пользователя или группу. Например, при выполнении команды ping (см. пример 6.19), несмот- ря на то, что ее запустил обычный пользователь, она будет исполняться от имени root, т. к. он владеет ее исполняемым файлом. Это используется, на- пример, в таких программах, как passwd, которые требуют временного пре- доставления доступа обычному пользователю к тем ресурсам, к которым он не имеет доступа. Естественно, такие программы требуют особого подхода к разработке, т. к. представляют серьезную угрозу для безопасности системы. На файлы сценариев Shell биты SUID и SGID устанавливать можно, но они действовать не будут.
Установка sticky bit на каталог, в отношении которого пользователь имеет права на чтение и на запись, позволяет запретить удалять и изменять пользо- вателю чужие файлы в этом каталоге. Это используется при установке прав доступа к каталогу /tmp, открытому на запись всем, поскольку иначе пользо- ватель может удалить чужие временные файлы, находящиеся в этом катало- ге, что может повлечь нежелательные последствия.
При установке атрибута SGID на каталог вновь созданные файлы в этом ка- талоге будут наследовать группу владельцев по группе владельцев каталога (так называемый "стиль BSD"), вместо RGID процесса, создающего файл (пример 6.20).
Пример 6.20. Каталог с установленным битом SGID |
$ cd dir1
$ ls -ld
drwxrwsr-x 2 tania users 48 Dec 14 20:43 .
$ id
uid=500(prof) gid=500(prof) группы=500(prof),100(users)
$ > file
$ ls -l total 0
-rw-r----- 1 prof users 0 Dec 14 22:00 file
В каталоге, на который установлен бит SGID, был создан файл (см. при- мер 6.20). При этом группа владельцев файла была назначена не по первич- ной группе пользователя, создавшего файл, а по группе пользователей ката- лога, в котором файл был создан.
Команда chmod позволяет установить особые биты доступа на файлы и ката- логи. Для этого команда chmod может быть выполнена со следующими аргу- ментами:
r u+s — для установки на файл бита SUID;
r g+s — для установки на файл или каталог бита SGID;
r o+t — для установки на каталог бита sticky bit.
Не обязательно устанавливать специальные биты в символьной нотации. Приведенная в примере 6.21 команда chmod 2775 d1 устанавливает бит SGID на каталог.
Пример 6.21. Установка SGID на каталог в восьмеричной нотации |
$ mkdir d1 | |||
$ ls -ld d1 | |||
drwxr-x--- | 2 prof | prof | 48 Dec 14 22:31 d1 |
$ chmod 2770 | d1 | ||
$ ls -ld d1 | |||
drwxrws--- | 2 prof | prof | 48 Dec 14 22:31 d1 |
В табл. 6.3 указаны результаты установки различных специальных прав дос- тупа на файлы и каталоги.
Таблица 6.3. Специальные биты прав доступа
Права | Эффект для каталогов | Эффект для файлов |
-rws--x--x | — | Команда исполняется от имени владельца файла |
-rwx--s--x | — | Команда исполняется от имени группы пользователей файла |
drwxrws--- | На файлы, создаваемые в каталоге, будет установлена такая же группа, как у каталога | — |
drwxrwxrwt | В каталоге можно удалять или переименовывать только соб- ственные файлы | — |
Дата добавления: 2015-06-12; просмотров: 1331;