Sticky bit linux что это

Обновлено: 04.07.2024

В Unix каждому файлу соответствует набор прав доступа, представленный в виде 9-ти битов режима. Он определяет, какие пользователи имеют право читать файл, записывать в него данные или выполнять его. Вместе с другими тремя битами, влияющими на запуск исполняемых файлов, этот набор образует код режима доступа к файлу. Двенадцать битов режима хранятся в 16-битовом поле индексного дескриптора вместе с 4-мя дополнительными битами, определяющими тип файла. Последние 4 бита устанавливаются при создании файлов и не подлежат изменению. Биты режима (далее права) могут изменяться либо владельцем файла, либо суперпользователем с помощью команды chmod.

Существует три пути управления доступом к файлу или каталогу. Было определено, что каждый файл должен иметь владельца (owner), группового владельца (group owner), а также может потребоваться доступ для всех остальных пользователей (everyone). Эти названия обычно приводятся как пользователь/группа/остальные (user/group/others) или коротко ugo. Реализация управления доступом к файлам и каталогам в Unix позволяет или запрещает доступ по трем флагам: флаг чтения (Read), флаг записи (Write), флаг выполнения (eXecute). Они представляются следующим образом:

Флаг типа (flag) может быть одним из следующих:

Флаг Описание
- Отсутствие флага
l - лат. «л» Символическая ссылка (symbolic link)
d Директория (directory)
b Блочное устройство (block device)
c Символьное устройство (character device)
p Канал, устройство fifo (fifo device)
s Unix сокет (unix domain socket)

Права доступа

Посмотреть права доступа на объекты можно командой ls c ключем -l («л»). Также можно добавить ключ -a, для того,чтобы были отображены скрытые объекты:

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

Для файлов: r - право на чтение из файла; w - разрешает запись в файл (в частности перезапись или изменение); x - позволяет исполнить файл.

Для каталогов, флаги r w x имеют несколько отличный смысл: r - позволяет читать только имена файлов в каталоге; x - позволяет иметь доступ к самим файлам и их атрибутам (но не именам); w имеет смысл только в сочетании с x, и позволяет (в дополнение к x) манипулировать с файлами в каталоге (создавать, удалять и переименовывать). w без x - не имеет никакого эффекта.

Рассмотрим таблицу, чтобы было понятнее:

OCT BIN Mask Права на файл Права на каталог
0 000 - - - отсутствие правотсутствие прав
1 001 - - x права на выполнениедоступ к файлам и их атрибутам 1)
2 010 - w - права на записьотсутствие прав
3 011 - w x права на запись и выполнениевсе, кроме доступа к именам файлов 2)
4 100 r - - права на чтениетолько чтение имен файлов
5 101 r - x права на чтение и выполнениечтение имен файлов и доступ файлам и их атрибутам 3)
6 110 r w - права на чтение и записьтолько чтение имен файлов
7 111 r w x полные прававсе права

Для администрирования часто удобнее использовать не буквенное представление прав, а цифровое, в восьмеричном представлении (оно короче). Так, например, права на файл всем и вся, соответствуют записи 777 (что аналогично символьному представлению rwxrwxrwx).

Существуют также специальные биты, такие как SUID, SGID и Sticky-бит. SUID, SGID влияют на запуск файла, а Sticky влияет на определение владельца объектов в каталоге. При их применении необходимо использовать не три восьмеричных цифры, а 4. Зачастую, в различной технической литературе права обозначаются именно 4-мя цифрами, например 0744. Многие стараются не использовать специальные биты, сетуя на безопасность (и не без основательно), но, в некоторых ситуациях без них не обойтись. Поговорим о них несколько позже.

Давайте рассмотрим пример, итак:

Для первой строки:

Следующие три символа (rwx) обозначают права для владельца файла, в данном случае полные права для пользователя allexserv. 4) Следующие три (- - -) - определяют права для группы nogroup, в нашем примере для всех пользователей группы nogroup доступ запрещен. Ну и последние три символа (- - -) определяют права для всех остальных пользователей, в нашем случае доступ запрещен.

Восьмеричное обозначение прав для файла pro_ubuntu.zip: 0700.

Для второй строки (это каталог, о чем свидетельствует флаг «d»), по аналогии:

Для владельца каталога allexserv - полные права (rwx). Для группы nogroup - права на листинг каталога и доступ к файлам (r-x). Для пользователя «все остальные» - права на листинг каталога и доступ к файлам (r-x).

Восьмеричное обозначение в этом примере: 0755.

Для полноценного просмотра каталога, необходимы права на чтение каталога и доступ к файлам, а главное к их атрибутам, т.е. минимальные разумные права на каталог - 5 (r-x). Прав 4 (r–) хватит только на просмотр имен файлов, без атрибутов, т.е. не будут известны размер файла, права доступа, владелец.

На практике для каталогов используется только три режима: 7 (rwx), 5 (r-x) и 0 (—).

Очень любопытный режим доступа к каталогу - 3 (-wx): он позволяет делать в директории все, что угодно, но не позволяет прочитать имена объектов в директории. Т.е. если вам не известны названия объектов в этом каталоге, то вы сделать с ними ничего не сможете (даже удалить по маске * т.к. маску не к чему применять - имена то недоступны).

В каталоге с режимом доступа 3 (-wx) можно создавать новые, переименовывать и удалять файлы и каталоги (если вы знаете их имя); читать, изменять, запускать файл (если достаточно на него прав, и опять же - вы знаете его имя). Можно даже менять права доступа на файлы и каталоги (если вы знаете имя). Но самое интересное, что если вы сможете перейти (по cd 5) ) в подкаталог такого каталога (а для этого вам опять нужно знать его имя), то там у вас будет «все в ожуре» (если конечно у этого подкаталога будет нормальный режим доступа).

Никакой рекурсивный поиск/удаление тоже не сможет залезть внутрь такого каталога - ему ведь нужны названия - а их из такого каталога - никак не получить.

Но не надо думать, что такой каталог полноценно заменяет крипто-контейнер (т.е. может использоваться для хранения очень секретных данных). Да, имен объектов из такого каталога никак не получить, однако если попытаться создать объект с именем, которое уже существует, то такая операция закончится неудачей (т.е. мы получим подтверждение, что такое имя уже есть). Так же можно пытаться открыть (как файл или как каталог) объект с произвольным именем, если такого имени нет, то мы получим ошибку. Безусловно имя может быть очень длинным и шансы угадать его могут быть не велики, но не надо забывать, что права доступа могут сменить как владелец каталога так root. Да и пути доступа могут сохраниться в различных логах и файлах истории.

Команда chmod

Права устанавливаются командой chmod. Команда chmod поддерживает установку прав как в восьмеричном представлении, так и в символьном (маска режима доступа).

Синтаксис команды прост:

chmod <опции> <права> <объект или регулярное выражение>

Опции

Из самых полезных и часто используемых опций можно выделить одну:

-R - рекурсивное назначение прав. Т.е. назначить права всем объектам, руководствуясь регулярным выражением. chmod -R 755 * - Назначение прав всем объектам текущего каталога, включая подкаталоги. chmod -R 700 z* - Назначить полные права для владельца и исключить права для группы и всех остальных для всех объектов, которые начинаются именоваться на z, находящиеся в текущем каталоге и его подкаталогах. 6)

Права

Права можно записывать как в восьмеричном представлении так и в символьном. В восьмеричном представлении, для стандартных прав, указываются 3 восьмеричные цифры (1-я для владельца, 2-я для группы, 3-я для всех остальных. См. таблицу выше).

chmod 744 koshka.txt - установит права для файла koshka.txt - (r w x r - - r - -); chmod -R 775 sobaki - установит права на каталог sobaki и на все объекты, что внутри этого каталога, включая содержимое подкаталогов (r w x r w x r - x); chmod 700 * - установит права только для владельца на все файлы и каталоги в текущем каталоге, включая подкаталоги и их объекты (rwx - - - - - -).

Другой способ назначения прав - это использование маски режима доступа (символьное представление). Помимо прав задается еще кому мы собираемся эти права выставлять:

Для назначения прав используются три знака: минус, плюс или равно:

+ - добавить указанные права к существующим правам объекта; = - заменить права объекта на указанные. chmod g+w koshki.txt - Добавить пользователям группы файла koshki.txt права на запись в этот файл; chmod a=rwx sobaki.doc - Заменит существующие права на файле sobaki.doc на полные права всем; chmod o-w test.cgi - Уберет права на запись для пользователя «Все остальные». chmod ug=rw spisok.doc - Выставить права на чтение и запись файлу spisok.doc для владельца и группы. Обратите внимание, что если у пользователя «все остальные» были какие-либо права, они сохранятся в неизменном виде.

Использование символьного представления позволяет редактировать права файлов более гибко:

chmod u+x,g+w-x koshki.txt - Добавить владельцу файла koshki.txt права на его выполнение, пользователям группы разрешить запись и запретить выполнение и оставить права остальных пользователей без изменений; chmod u=rwx,g+w,go-x sobaki.doc - Установить полные права для владельца файла, разрешить пользователям группы запись и запретить выполнение всем пользователям, кроме владельца файла.

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

Массовое назначение прав

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

Итак, чтобы массово установить права на определенный тип объектов можно использовать один из вариантов (вообще, их очень много):

где -type d - каталоги, -type f - файлы. В данном примере chmod установит, начиная от текущего каталога 7) , права на все каталоги (включая подкаталоги) разрешения 770 (rwx rwx- - -) при этом не трогая права на другие объекты.

Более длинный вариант аналогичной операции:

где -type d - каталоги, -type f - файлы. В данном варианте chmod установит разрешения 775 на все файлы включая файлы в подкаталогах начиная от текущего.

Биты SUID, SGID и Sticky

Unix отслеживает не символьные имена владельцев и групп, а их идентификаторы (UID - для пользователей и GID для групп). Эти идентификаторы хранятся в файлах /etc/passwd и /etc/group соответственно. Символьные эквиваленты идентификаторов используются только для удобства, например, при использовании команды ls, идентификаторы заменяются соответствующими символьными обозначениями.

1000 - идентификатор (UID) пользователя allexserv 0 - идентификатор (GID) основной группы (root) для пользователя allexserv

1000 - идентификатор (GID) дополнительной группы allexserv пользователя allexserv 8)

Если при создании пользователя основная группа не указана явно, то основной группой пользователя будет группа с тем же именем, что и имя пользователя. Например:

Что касается процессов, то с ними связано не два идентификатора, а 4-е: реальный и эффективный пользовательский (UID), а также реальный и эффективный групповой (GID). Реальные номера применяются для учета использования системных ресурсов, а эффективные для определения прав доступа к процессам. Как правило, реальные и эффективные идентификаторы совпадают. Владелец процесса может посылать ему сигналы, а также изменять приоритет.

Процесс не может явно изменить ни одного из своих четырех идентификаторов, но есть ситуации когда происходит косвенная установка новых эффективных идентификаторов процесса. Дело в том, что существуют два специальных бита: SUID (Set User ID - бит смены идентификатора пользователя) и SGID (Set Group ID - бит смены идентификатора группы). Когда пользователь или процесс запускает исполняемый файл с установленным одним из этих битов, файлу временно назначаются права его (файла) владельца или группы (в зависимости от того, какой бит задан). Таким образом, пользователь может даже запускать файлы от имени суперпользователя.

Восьмеричные значения для SUID и SGID - 4000 и 2000.

Вобщем, одним словом установка битов SUID или SGID позволит пользователям запускать исполняемые файлы от имени владельца (или группы) запускаемого файла. Например, как говорилось выше, команду chmod по умолчанию может запускать только root. Если мы установим SUID на исполняемый файл /bin/chmod, то обычный пользователь сможет использовать эту команду без использования sudo, так, что она будет выполнятся от имени пользователя root. В некоторых случаях очень удобное решение. Кстати по такому принципу работает команда passwd, c помощью которой пользователь может изменить свой пароль.

Возьмите на заметку! Если установить SGID для каталога, то все файлы созданные в нем при запуске будут принимать идентификатор группы каталога, а не группы владельца, который создал файл в этом каталоге. Аналогично SUID. Одним словом, если пользователь поместил исполняемый файл в такой каталог, запустив его, процесс запустится от имени владельца (группы) каталога, в котором лежит этот файл.

Однако, в системе FreeBSD, если скомпилировать ядро с поддержкой suiddir, а так же смонтировать раздел с этой опцией, то, все объекты создаваемые в каталоге где установлен SUID будут иметь владельца этого каталога (наследование). Реализация подобного в Linux возможна (?) на файловой системе GFS2. Данная функция считается уязвимостью.

Установить SUID и SGID можно командой chmod:


Стандартные права (SUID, SGID, Sticky bit) в Unix/Linux

Unix является многопользовательской ОС и в основном, устроен так, что несколько пользователей могут работать одновременно. Таким образом, программа которая находится в памяти требует меньше времени чтобы начать свою работу. Таким образом, когда один пользователь только что использовал программу, а затем новый пользователь хочет использовать ту же самую программу, то 2-й юзверь не будет иметь временной задержки для инициализации утилиты.

Установка Sticky Bit

Выставляем sticky bit на файл:

Или можно еще использовать следующую команду:

Sticky bit, в основном используется в общих каталогах, таких как /var или /tmp, поскольку пользователи могут создавать файлы, читать и выполнять их, принадлежащие другим пользователям, но не могут удалять файлы, принадлежащие другим пользователям. Например, если пользователь (предположим bob) создает файл с именем /tmp/bob, то другой пользователь (допустим tom) не может удалить этот файл, даже если в каталоге /tmp есть разрешение 777. Если sticky bit не установлен, то tom юзер может удалить /tmp/bob, так как файл /tmp/bob наследует разрешения родительского каталога.

Использование SUID ( Set User ID) прав в Unix/Linux

setuid (сокращения от англ. set user ID upon execution — «установка ID пользователя во время выполнения) являются флагами прав доступа в Unix, которые разрешают пользователям запускать исполняемые файлы с правами владельца исполняемого файла. Иногда файлы требуют разрешения на выполнение для пользователей, которые не являются членами группы владельца, в этом случае вам потребуется предоставить специальные разрешения на выполнение. Когда SUID установлен, пользователь может запускать любую программу, такую как владелец программы.

Установка SUID бит на файл.

Если SUID бит установлен на файл и пользователь выполнил его. Процесс будет иметь те же права что и владелец файла.

Например: команда passwd имеет SUID bit. Когда обычный пользователь захочет изменит свой пароль в файле /etc/passwd или /etc/shadow, то у него ничего не получиться, т.к нужны права суперпользователя (процесс командны PASSWD всегда работает с правами суперюзера).

Теперь проверьте разрешения на файл с командой:

Чтобы выставить SUID для всех папок и файлов, используем:

Найти SUID файлы

Найти все SUID и SGID файлы:

Использование SGID ( Set Group ID ) прав в Unix/Linux

setgid (сокращения от англ. set group ID upon execution — «установка ID группы во время выполнения») являются флагами прав доступа в Unix, которые разрешают пользователям запускать исполняемые файлы с правами группы исполняемого файла.

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

Установка бита SUID / SGID

Установка бита SUID / SGID

Если SGID бит установлен на любой каталог, все подкаталоги и файлы, созданные внутри получат те же пермишены что и группы в качестве основного каталога.

Устанавливаем SGID на директорию:

Теперь, переключаемся на другого пользователя и создаем файл в папке /home/captain/test_dir:

В приведенном выше примере test_file.txt создался с группой root.

Чтобы выставить SGID для всех папок и файлов, используем:

Найти SGID файлы

Найти все файлы с использованием SGID бита, для root пользователя:

Найти все SUID и SGID файлы:

Зачем нужены SUID и SGID?

Есть достаточно много программ и файлов, которые должны принадлежать пользователю root, и в то же время – простые пользователи должны иметь возможность выполнять его. Для примера – утилита passwd, которая находится в каталоге /usr/bin/passwd и которая имеет дело с файлом /etc/passwd, редактировать который может только пользователь root.

Вот еще полезное чтиво:

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


В этой статье мы расскажем о специальных разрешениях, которые работают с файлами и каталогами, которые называются Stickybit, SUID и SGID.

Sticky работает только для каталогов.

Если пользователь хочет создать или удалить файл / каталог в каком-либо каталоге, ему нужно разрешение на запись в этот каталог.

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

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

Но так как пользователи имеют разрешение на запись в этот каталог, они могут удалить любой файл в этом каталоге.

Разрешения этого файла не влияют на удаление.

Но с установленным в каталоге стики битом любой может создать в нем файл / каталог, но может удалить только свои собственные файлы.

Файлы, принадлежащие другим пользователям, не могут быть удалены.

Вы можете заметить, что тег t добавлен в каталог /tmp, и это означает, что для этого каталога установлен бит.

В Linux стики бит может быть установлен командой chmod.

Вы можете использовать тег + t, чтобы добавить, и тег -t, чтобы удалить бит.

Примечание. В ОС Unix stickybit имеет другое назначение, но мы не обсуждаем его здесь.

Что такое SUID бит и как его установить

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

Это означает, что когда пользователь student запускает команду ls, соответствующий процесс будет выполняться под управлением пользователя student.

Бит SUID, также известный как бит установки идентификатора пользователя, перезаписывает это поведение.

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

У команды passwd в Linux установлен бит SUID.

С установленным битом SUID, когда обычный пользователь (скажем, student) запускает команду passwd, команда запускается с владельцем «root», а не с учетной записью student, поскольку root является владельцем этого файла.

Это необходимо, потому что пароли хранятся в файле /etc/shadow, который не имеет разрешения на групповом или другом уровне.

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

Таким образом, это вызывает проблему: если у пользователей нет прав доступа к этому файлу, как они будут изменять свои собственные пароли?

SUID немного решает проблему.

У команды passwd установлен бит SUID, поэтому, когда обычные пользователи выполняют эту команду, они запускают ее под владельцем root, то есть владельцем команды passwd.

Как установить и сбросить бит SUID

Следует отметить, что бит SUID работает только с файлами.

Чтобы установить бит SUID на файл, используйте команду chmod следующим образом

Числовой метод для изменения разрешений также может быть использован.

Предположим, что если обычные разрешения для файла равны 744, то с установленным битом SUID они станут 4744.

Бит SUID имеет значение 4.

Как SGID Bit работает с файлами и каталогоми

В отличие от бита SUID, бит SGID работает как с файлами, так и с каталогами, но в обоих случаях он имеет различное значение.

По файлам:

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

Например, файл /sbin/netreport имеет установленный бит SGID, который можно увидеть в «s» вместо «x» в разрешениях группы.

Этот файл имеет групповое владение группой root.

Таким образом, когда пользователь (скажем, student) выполняет его, соответствующий процесс не будет принадлежать группе student, а будет принадлежать группе root.

По каталогам:

Теперь поговорим о SGID в каталогах.

SGID для каталогов используется для создания совместных каталогов.

Чтобы понять бит SGID для каталогов, рассмотрим следующий сценарий:

Предположим, что три пользователя Джек, Джонс и Дженни вместе работают над каким-то проектом.

Все они принадлежат к группе под названием javaproject.

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

Все они должны видеть файлы друг друга.

Это можно сделать, просто предоставив разрешение на чтение на уровне группы.

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

Таким образом, когда разные пользователи создают свои файлы в этом каталоге, эти файлы не будут принадлежать группе javaproject group.

Что мы делаем для решения нашей проблемы, так это то, что мы устанавливаем группу каталога /javaproject равной группе javaproject, и устанавливаем бит SGID.

Когда в каталоге установлен бит SGID, все файлы и каталоги, созданные в нем, имеют групповое владение группой, связанной с этим каталогом.

Это означает, что после установки бита SGID в каталоге /javaproject все файлы и каталоги, создаваемые в этом каталоге, будут принадлежать группе «javaproject».

Более того, это поведение является рекурсивным, то есть в каталогах, созданных в этом каталоге, также будет установлен бит SGID.

Права у нового каталога также будут такими же, как и у каталога /javaproject.

Бит SGID может быть установлен командой chmod следующим образом:

Теперь, когда пользователь jones создает файл в этом каталоге, он создается под владельцем группы javaproject.

Числовое значение, соответствующее биту SGID, равно 2. Поэтому, чтобы численно добавить бит SGID, используйте следующую команду:


Они уже используются

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

Повышение вашего статуса

Обычно команды и программы Linux запускаются с тем же набором разрешений, что и лицо, запускающее программу. Когда root запускает команду passwd изменить пароль , он работает с правами root. Это означает, что команда passwd может свободно обращаться к сохраненным паролям в файле / etc / shadow.

Идеальной была бы схема, в которой любой в системе мог бы запустить программу passwd, но при этом программа passwd сохранила бы повышенные привилегии root. Это дало бы возможность любому изменить свой пароль.

Вы повышаете статус программы

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

Механизм контроля, предотвращающий работу кого-либо с паролем другого человека, содержится в программе passwd, а не в операционной системе и схеме SUID.

Самым большим преимуществом программного обеспечения с открытым исходным кодом является вы можете сами посмотреть исходный код или обратитесь к надежным экспертным обзорам этого. В исходном коде программы passwd есть проверки, поэтому вы можете увидеть, является ли человек, запускающий программу, root. Разрешены разные возможности, если кто-то является пользователем root (или кто-то использует sudo).

Этот это код, который определяет, является ли кто-то root.

Проверь это - Как записывать сразу на несколько USB-накопителей в Linux с помощью Gnome MultiWriter

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

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

Команды Linux, использующие SUID

Ниже приведены некоторые команды Linux, которые используют бит SUID для предоставления команде повышенных привилегий при запуске обычным пользователем:

Обратите внимание, что имена файлов выделены красным, что означает, что бит SUID установлен.

Права доступа к файлу или каталогу обычно представлены тремя группами по три символа: rwx. Они обозначают чтение, запись и выполнение. Если буквы присутствуют, это разрешение предоставлено. Если вместо буквы стоит дефис (-), то разрешение не было дано.

Эти разрешения делятся на три группы (слева направо): для владельца файла, для членов группы файла и для других. Когда для файла установлен бит SUID, «s» представляет разрешение на выполнение владельцем.

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

Мы рассмотрим пример. Обычный пользователь dave вводит команду passwd:

Команда passwd запрашивает у Дэйва новый пароль. Мы можем использовать команду ps чтобы увидеть детали запущенных процессов .

Мы будем использовать ps с grep в другом окне терминала и ищите процесс passwd. Мы также будем использовать параметры -e (каждый процесс) и -f (полный формат) с ps.

Набираем следующую команду:

Мы видим, что процесс passwd работает так же, как если бы его запустил root.

Установка бита SUID

Бит SUID легко изменить с помощью chmod. Символический режим u + s устанавливает бит SUID, а символический режим us очищает бит SUID.

Чтобы проиллюстрировать некоторые концепции бита SUID, мы создали небольшую программу под названием htg. Он находится в корневом каталоге пользователя dave, и для него не установлен бит SUID. Когда он выполняется, он отображает реальные и действующие идентификаторы пользователей (UID ).

Когда мы запускаем локальную копию программы, мы видим, что для реального и эффективного идентификатора установлено значение dave. Итак, он ведет себя так же, как и должна нормальная программа.

Давайте скопируем его в каталог / usr / local / bin, чтобы другие могли его использовать.

Мы вводим следующее, используя chmod для установки бита SUID, а затем проверяем, установлен ли он:

Итак, программа скопирована, и бит SUID установлен. Мы запустим его снова, но на этот раз запустим копию в папке / usr / local / bin:

Несмотря на то, что Дэйв запустил программу, эффективным идентификатором является пользователь root. Итак, если Мэри запускает программу, происходит то же самое, как показано ниже:

Бит SGID

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

Мы настроили нашу программу htg, чтобы она также показывала эффективную группу. Мы изменим группу программы htg на группу по умолчанию пользователя mary, mary. Мы также будем использовать символьные режимы us и g + s с chown, чтобы удалить бит SUID и установить SGID.

Для этого мы набираем следующее:

Вы можете увидеть бит SGID, обозначенный буквой «s» в разрешениях группы. Также обратите внимание, что группа настроена на mary, а имя файла теперь выделено желтым.

Прежде чем запускать программу, давайте выясним, к каким группам принадлежат Дэйв и Мэри. Мы будем использовать команду id с параметром -G (группы), распечатать все идентификаторы групп . Затем мы запустим программу htg от имени dave.

Набираем следующие команды:

Применим бит SGID к каталогу. Сначала мы создадим каталог под названием «работа», а затем изменим его группу на «компьютерщик». Затем мы установим бит SGID в каталоге.

Проверь это - Как получить последнюю версию Mozilla Thunderbird для Linux

Когда мы используем ls для проверки настроек каталога, мы также будем использовать параметр -d (каталог), чтобы видеть детали каталога, а не его содержимое.

Набираем следующие команды:

Устанавливаются бит SGID и группа «компьютерщиков». Это повлияет на любые элементы, созданные в рабочем каталоге.

Мы вводим следующее, чтобы войти в рабочий каталог, создать каталог под названием «demo» и проверить его свойства:

Бит SGID и группа «компьютерщиков» автоматически применяются к каталогу «demo».

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

Группа нового файла автоматически устанавливается на «компьютерщик».

Липкий бит

Когда вы устанавливаете для каталога липкий бит, люди могут удалять только принадлежащие им файлы в этом каталоге. Они не могут удалять файлы, которые принадлежат кому-то другому, независимо от того, какая комбинация прав доступа к файлам установлена ​​для файлов.

Создадим каталог под названием «общий». Мы будем использовать символический режим o + t с chmod, чтобы установить бит закрепления в этом каталоге. Затем мы рассмотрим разрешения для этого каталога, а также для каталогов / tmp и / var / tmp.

Набираем следующие команды:

Если бит закрепления установлен, исполняемый бит «другого» набора прав доступа к файлам устанавливается на «t». Имя файла также выделено синим цветом.

Папки / tmp и / var / tmp являются двумя примерами каталогов, для которых установлены все права доступа к файлам для владельца, группы и других (поэтому они выделены зеленым). Они используются как общие папки для временных файлов.

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

Напоминания

Ниже приводится краткий контрольный список того, что мы рассмотрели выше, для использования в будущем:

SUID работает только с файлами.
Вы можете применять SGID к каталогам и файлам.
Вы можете применять липкий бит только к каталогам.
Если индикаторы «s», «g» или «t» отображаются в верхнем регистре, исполняемый бит (x) не установлен.

Читайте также: