Как работает липкий бит?

148

SUID

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

Но я не знаю, что хранится в памяти. И как я могу их видеть, в этом случае.?

двуустка-нг
источник
Вот хороший учебник с отработанными примерами и пояснениями. Ключом к пониманию является восьмеричная система. Linux Sticky Bits Tutorial с отработанными примерами .
CMP

Ответы:

193

Это, наверное, одна из моих самых утомительных вещей, которые люди все время путают. Бит SUID / GUID и бит закрепления - это две совершенно разные вещи.

Если вы сделаете это, man chmodвы можете прочитать о SUID и sticky-битах. Страница man также доступна здесь .

фон

выдержка

Буквы rwxXst выбирают биты режима файла для затронутых пользователей: чтение (r), запись (w), выполнение (или поиск каталогов) (x), выполнение / поиск только в том случае, если файл является каталогом или уже имеет разрешение на выполнение для некоторых пользователь (X), установка идентификатора пользователя или группы при выполнении (ях) , ограниченный флаг удаления или фиксированный бит (t) .

SUID / GUID

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

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

выдержка

SETUID И SETGID БИТЫ

chmod очищает бит set-group-ID обычного файла, если идентификатор группы файла не совпадает с эффективным идентификатором группы пользователя или одним из идентификаторов дополнительной группы пользователя, если только у пользователя нет соответствующих привилегий. Дополнительные ограничения могут привести к игнорированию битов set-user-ID и set-group-ID в MODE или RFILE. Это поведение зависит от политики и функциональности основного системного вызова chmod. В случае сомнений проверьте поведение системы.

chmod сохраняет биты set-user-ID и set-group-ID каталога, если вы явно не укажете иное. Вы можете установить или очистить биты с помощью символических режимов, таких как u + s и gs, и вы можете установить (но не очистить) биты с помощью числового режима.

Примеры SUID / GUID

нет suid / guid - только биты rwxr-xr-x установлены.

$ ls -lt b.pl
-rwxr-xr-x 1 root root 179 Jan  9 01:01 b.pl

suid & исполняемый бит пользователя включен (строчные буквы s) - биты rwsr-xrx установлены.

$ chmod u+s b.pl 
$ ls -lt b.pl 
-rwsr-xr-x 1 root root 179 Jan  9 01:01 b.pl

suid включен и исполняемый бит отключен (верхний регистр S) - биты rwSr-xr-x установлены.

$ chmod u-x b.pl
$ ls -lt b.pl 
-rwSr-xr-x 1 root root 179 Jan  9 01:01 b.pl

Включен исполняемый бит guid & group (строчные буквы s) - биты rwxr-sr-x установлены.

$ chmod g+s b.pl
$  ls -lt b.pl 
-rwxr-sr-x 1 root root 179 Jan  9 01:01 b.pl

guid включен и исполняемый бит отключен (верхний регистр S) - биты rwxr-Sr-x установлены.

$ chmod g-x b.pl
$  ls -lt b.pl 
-rwxr-Sr-x 1 root root 179 Jan  9 01:01 b.pl

липкий бит

Липкий бит с другой стороны обозначается как t, например, с /tmpкаталогом:

$ ls -l /|grep tmp
drwxrwxrwt. 168 root root 28672 Jun 14 08:36 tmp

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

выдержка

ОГРАНИЧЕННЫЙ ФЛАГ УДАЛЕНИЯ ИЛИ КЛЕЙКА

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

SLM
источник
43
На самом деле sticky-бит можно было ранее применить к исполняемым файлам, что привело к тому, что они оставались в свопе после их первой загрузки. Это может сэкономить много ненужного диска / сети (NFS) и использования ЦП для программ, которые широко использовались. Однако ни Linux, ни большинство (все?) Unix-систем больше не поддерживают это (оно было удалено из ядра). Это «липкий», потому что исполняемый файл застрял в swap. Кроме того, он был использован для каталогов, как вы описываете.
Баард Копперуд
4
На самом деле «лучше использовать или очень большой» было бы лучшим описанием. Помните, в моем колледже в 1995 году веб-браузер Netscape был «липким» на компьютере HP-UX. Поэтому использовались очень маленькие программы (например, системные команды, часто выполняемые cron) и большие программы (например, Netscape). были первыми кандидатами, чтобы быть "липкими". В обоих случаях постоянно перезагружать их с диска / NFS было бы расточительно.
Баард Копперуд
8
Стик-битные программы должны были оставаться в оперативной памяти, а не в подкачке (загрузка образа из файла подкачки не намного быстрее, чем загрузка его с диска файловой системы). Он был предназначен для таких важных команд на уровне ОС, как ls. Очевидно, что только суперпользователь может установить бит закрепления для файла. Это стало менее важным после появления виртуальной памяти и общих библиотек, особенно когда пейджеры стали умнее и могут динамически решать, какие страницы сохранять резидентными.
Алексис
4
А поскольку свойство sticky не имело смысла для каталога, тот же бит маски прав доступа был позже интерпретирован для изменения традиционной семантики создания файлов для каталогов.
Алексис
5
@alexis: Первоначально, программы-биты хранились в пространстве подкачки. Это было намного быстрее, чем чтение из файловой системы, потому что чтение образов файлов подкачки было смежными секторами и поэтому могло считываться в основном асинхронно. В ранних файловых системах не было «длин серий» секторов, и большинство ранних драйверов файловых систем считывали один сектор за раз, даже если сектора оказывались последовательными. Результатом на PDP-40 были липкие программы, которые загружались мгновенно, в то время как незакрепленные программы занимали обычную секунду или две. Я думаю, что мы были только edлипкими.
Wallyk
8

«Закрепленный бит применяется к исполняемым программам, помечающим систему, чтобы сохранить образ программы в памяти после завершения работы программы».

Я думаю, что это довольно устаревшая информация, сегодня большинство современных Unixes игнорируют это. В Linux залипание относится только к каталогам. Смотрите здесь и довольно информативную статью в Википедии .

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

leonbloy
источник
3

Что такое липкие биты?

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

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

chandrakumar.M
источник
1
Это не правильно: en.wikipedia.org/wiki/Sticky_bit
AB
7
@AB Это кажется мне довольно точным, почти до такой степени, чтобы перефразировать начало цитируемой вами статьи в Википедии. Что с этим не так?
Роайма
Я бы сказал, что ответ неполный. «Sticky» также означает, что исполняемый файл будет сохранен в пространстве подкачки, чтобы он работал быстрее. Это древняя история, но в старых файловых системах драйверы считывали один сектор за раз, даже если эти сектора были последовательными. Это делало нелипкие исполняемые файлы медленными, в то время липкость имела большой смысл.
GhostCode