Дополнительные атрибуты файлов: sticky bit, suid, sgid

16.06.2018

Теги: chmodLinuxSGIDStickyBitSUIDДиректорияПраваДоступаФайл

В Linux существует три основных вида прав — право на чтение (read), запись (write) и выполнение (execute), а также три категории пользователей, к которым они могут применяться — владелец файла (user), группа владельца (group) и все остальные (others). Но, кроме прав чтения, выполнения и записи, есть еще три дополнительных атрибута.

Sticky bit

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

SUID (Set User ID)

Атрибут исполняемого файла, позволяющий запустить его с правами владельца. В Linux приложение запускается с правами пользователя, запустившего указанное приложение. Это обеспечивает дополнительную безопасность т.к. процесс с правами пользователя не сможет получить доступ к важным системным файлам, которые принадлежат пользователю root.

Если на исполняемый файл установлен бит suid, то при выполнении его «эффективный userID» автоматически меняется на идентификатор того пользователя, который является владельцем этого файла. То есть, независимо от того, кто запускает эту программу, она при выполнении имеет права владельца этого файла.

Исполняемый файл с установленным атрибутом suid является «потенциально опасным». Без установленного атрибута, файл не позволит обычному пользователю сделать то, что выходит за пределы прав пользователя (пример, программа passwd позволяет пользователю изменить только собственный пароль). Но, даже незначительная ошибка в такой программе может привести к тому, что злоумышленник сможет заставить её выполнить ещё какие-нибудь действия, не предусмотренные автором программы.

SGID (Set Group ID)

Аналогичен suid, но относиться к группе. Если установить sgid для каталога, то все файлы созданные в нем, при запуске будут принимать идентификатор группы каталога, а не группы владельца, который создал файл в этом каталоге.

Однако это не самый частый случай использования suid. Если применить этот флаг к каталогу — все файлы и подкаталоги в этом каталоге будут создаваться с группой исходного каталога. Это может быть полезно при использовании общих папок.

Например, в системе есть два пользователя user1 и user2, они работают с каталогом /var/tmp/common, к которому у обоих есть доступ (так как оба входят в группу common). В стандартной ситуации, когда каждый из пользователей создает файл, этому файлу присваиваются права основной группы пользователя. В этом случае user1 не может прочитать файлы пользователя user2 и наоборот.

После установки бита sgid на каталог /var/tmp/common, он будет иметь следующие права — drwxr-sr-x. 2 root common 4096. В этом случае все файлы и подкаталоги, созданные в /var/tmp/common, будут иметь группу common, что позволит обоим пользователям работать с файлами.

Обозначение атрибутов sticky, suid, sgid

Специальные права используются довольно редко, поэтому при выводе программы ls -l символ, обозначающий указанные атрибуты, закрывает символ стандартных прав доступа. Пример:

rwsrwsrwt

где первая s — это suid, вторая s — это sgid, а последняя t — это sticky bit.

В приведенном примере не понятно, rwt — это rw- или rwx? Определить это просто. Если t маленькое, значит x установлен. Если T большое, значит x не установлен. То же самое правило распространяется и на s.

В числовом эквиваленте данные атрибуты определяются первым символом при четырехзначном обозначении (который часто опускается при назначении прав), например в правах 1777 — символ 1 обозначает sticky bit. Остальные атрибуты имеют следующие числовое соответствие:

  • 1 — установлен sticky bit
  • 2 — установлен sgid
  • 4 — установлен suid
$ chmod 4755 backup.sh # установить suid
$ chmod 2755 backup.sh # установить sgid
$ chmod 1775 /home/dev # установить sticky bit

Есть еще один способ, более удобный

$ chmod u+s file # установить suid
$ chmod u-s file # удалить suid
$ chmod g+s file # установить sgid
$ chmod g-s file # удалить sgid
$ chmod +t file # установить sticky bit
$ chmod -t file # удалить sticky bit

Поиск: Linux • SGID • SUID • StickyBit • chmod • Директория • Права доступа • Файл

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.