Что такое буква «t» в выводе «ls -ld / tmp»?

94

При запуске команды  ls -ld /tmpвывод будет:

drwxrwxrwt 30 root root 20480 Mar 11 14:17 /tmp

Итак, у меня есть два основных вопроса:

  • Какое письмо tпосле разрешения?
  • Насколько я знаю /tmp, используется для создания временных файлов, связанных с различными пользователями в системе, так почему же у него есть разрешение rwxrwxrwx(777)?

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

Сообщество
источник
8
Прочитайте статью в Википедии , это лучше, чем ответы здесь.
Жиль
1
См. Также: unix.stackexchange.com/q/79395/4784
Мартин Тома,
Хорошо. Почему тогда, когда я устанавливаю обновление или новый пакет rpm из / tmp, удаляется ли липкий бит?

Ответы:

112

Так что же такое залипание?

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

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

Почему /tmpесть tлипкий бит?

/tmpКаталог может использоваться различными пользователями Linux для создания временных файлов. А что если пользователь удалит / переименует файл, созданный другим пользователем в этом каталоге?

Что ж, чтобы избежать подобных проблем, используется понятие «липкий бит». Так что для этого 777дается, но сохранение залипшего бита - неплохая идея.

Как я могу установить липкий бит для каталога?

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

Символьный способ ( tпредставляет собой липкий бит):

chmod o+t ~/Desktop/test

или же

chmod +t ~/Desktop/test

Числовой / восьмеричный способ (1, бит битов в качестве значения 1 в первой позиции)

chmod 1757 ~/Desktop/test

Теперь давайте проверим результаты:

ls -li ~/Desktop/test

1551793 drwxrwxrwt 45 hadi hadi 20485 Mar 11 14:35 ~/Desktop/test

Удалить / Удалить бит

chmod o-t ~/Desktop/test

Теперь давайте проверим результаты:

ls -li ~/Desktop/test

1551793 drwxrwxrwx 45 hadi hadi 20485 Mar 11 14:35 ~/Desktop/test

Источник: «Что такое« липкий бит »и как его установить в Linux?» В Linux Juggernaut

Maythux
источник
13
Такое использование закрепленного бита применяется только к каталогам, а не к файлам. В далеком прошлом смысл исполняемых файлов заключался в том, чтобы сохранить текстовый сегмент программы для замены, а не отбрасывать его, чтобы повторный запуск выполнялся быстрее, но в наши дни он не имеет значения для обычных файлов.
Псуси
что такое текстовый сегмент программы и как он будет работать быстрее?
BluePython
@BluePython «Текстовый» сегмент исполняемого файла - это часть, которая включает весь машинный код: фактический исполняемый бит. Обычными другими сегментами являются «данные» для статических данных и «bss» для данных, которые все равны нулю (и, следовательно, не должны храниться в исполняемом файле).
Майлз Рут
1
есть ли разница между 't' и 'T' для разрешения каталога ?? @ psusi
Afshin
1
@Afshin: поскольку tскрывает xуказание, могут ли все пользователи выполнять файл / каталог, нам нужен другой способ указать это. Обычная вещь - то, что каждый может выполнить это, и в этом случае вы получаете нормальный t(вместо x). Но если нет, то вы получите заглавные буквы T(вместо -). Источник: Википедия.
Тоби Бартельс
25

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

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

А что если пользователь случайно или намеренно удалит (или переименует) файл, созданный другим пользователем в этом каталоге?

Что ж, чтобы избежать подобных проблем, используется понятие «липкий бит». Так как / tmp используется для этой цели. Поэтому, чтобы избежать описанного выше сценария, / tmp использует sticky bit.

Например:

mkdir demo
chmod 777 demo

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

ls -ld demo
drwxrwxrwx 2 guru guru 4096 Mar 11 18:17 demo

ls -l demo
-rwxrwxrwx 1 abhi abhi    0 Mar 11 17:11 file1
-rwxrwxrwx 1 anshu anshu   0 Mar 11 18:15 file2

Теперь включите липкий бит на этом

 chmod +t demo/
 ls -ld demo
 drwxrwxrwt 2 guru guru 4096 Mar 11 18:17 demo

Что произойдет, если один пользователь (abhi) захочет переименовать второго пользователя (anshu)

mv /home/guru/demo/file2  /home/guru/demo/file3
mv: cannot move '/home/guru/demo/file2' to  '/home/guru/demo/file3': Operation not   permitted  

Происхождение липкого бита

В Linux бит закрепления используется только в описанных выше каталогах. Исторически оно использовалось для чего-то совершенно другого в обычных файлах, и отсюда и название.

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

Чтобы улучшить эту задержку, был добавлен залипающий бит. ОС проверила, что если бит исполнения на исполняемом файле включен, то текстовый сегмент исполняемого файла был сохранен в пространстве подкачки. Это облегчало загрузку исполняемого файла в ОЗУ при повторном запуске программы, минимизируя время задержки.

Современные системы, такие как Linux, автоматически управляют своим кешем исполняемых файлов и других файлов и не нуждаются в этом.

Источник: «Концепция Linux Sticky Bit, объясненная примерами» в Geek Stuff

G_p
источник
2

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

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


источник