Як працює клейкий шматочок?


148

СУІД

Липкий біт застосовується до виконуваним програмам, що слабшає системи , щоб зберегти образ програми в пам'яті після того, як програма закінчить роботу.

Але я не знаю, що це зберігається в пам'яті. І як я їх бачу в цьому випадку.?


Ось хороший підручник з відпрацьованими прикладами та поясненнями. Ключовим моментом для розуміння цього є вісімкова система. Підручник з липкими бітами для Linux із відпрацьованими прикладами .
CMP

Відповіді:


193

Це, мабуть, одна з моїх найпокітніших речей, яку люди весь час псують. Біт SUID / GUID і липкий біт - це дві абсолютно різні речі.

Якщо ви займаєтесь цим, man chmodви можете прочитати про SUID та стики. Сторінка " man" також доступна тут .

фон

витяг

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

SUID / GUID

Наведена вище сторінка man намагається сказати, що позиція, яку займає х біт у rwxrwxrwx для восьмикутника (1-а група rwx) та восьмерики групи (2-а група rwx), може приймати додатковий стан, коли x стає a s. У цьому випадку цей файл при виконанні (якщо це програма, а не просто оболонка) запускається з дозволами власника або групи файлу.

Отже, якщо файл належить root і біт SUID увімкнено, програма запуститься як root. Навіть якщо ви виконуєте його як звичайний користувач. Те саме стосується біта GUID.

витяг

НАЛАШТУВАННЯ СТУДІТУ ТА НАСТРОЙКИ

chmod очищує біт ідентифікатора групи set звичайного файлу, якщо ідентифікатор групи файлу не відповідає ефективному ідентифікатору групи користувача або одному з додаткових ідентифікаторів групи користувачів, якщо користувач не має відповідних привілеїв. Додаткові обмеження можуть спричинити ігнорування встановлених ідентифікаторів користувача та бітів ідентифікаторів групи груп MODE або RFILE. Така поведінка залежить від політики та функціональності базового виклику системи chmod. Коли ви сумніваєтесь, перевірте основні поведінки системи.

chmod зберігає ідентифікатор set-user-ID та біт-ідентифікатор групи set, якщо явно не вказано інше. Ви можете встановити або очистити біти в символічних режимах, таких як u + s і gs, а також можна встановити (але не зрозуміло) біти за допомогою цифрового режиму.

Приклади SUID / GUID

no suid / guid - встановлюються лише біти rwxr-xr-x .

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

ввімкнено виконуваний біт suid & користувача (малі літери) - встановлюються біти 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 (малі літери) - встановлюються біти 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

біт rwxr-Sr-x встановлений біт 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. Для звичайних файлів у деяких старих системах біт зберігає текстове зображення програми на пристрої підкачки, щоб воно швидше завантажувалось під час запуску; це називається липким бітом.


43
Насправді липкий біт раніше можна було застосувати до виконуваних файлів, через що вони залишалися в свопі після першого завантаження. Це може заощадити багато непотрібного диска / мережі (NFS) та використання процесора для програм, які широко використовуються. Однак ні Linux, ні більшість (усіх?) Unix систем уже не підтримують це (його було видалено з ядра). Це "липко", тому що виконуваний файл застряг у свопі. Крім того, він використовувався для каталогів, як ви описуєте.
Баард Копперуд

4
Насправді "багато вживаного або дуже великого" було б кращим описом. Пам'ятайте, що в моєму коледжі веб-браузер Netscape був "липким" на їхньому комп'ютері HP-UX ще в 1995 році. Отже, невеликі програми, які дуже часто використовувалися (наприклад, системні команди, які часто виконувалися за допомогою cron), і великі програми (наприклад, Netscape) були головними кандидатами, які повинні бути "липкими". В обох випадках постійне завантаження їх з диска / NFS було б марно.
Баард Копперуд

8
Клейкі бітові програми повинні були залишатися резидентами в оперативній пам’яті, а не свопом (завантаження зображення з файлу swap не набагато швидше, ніж завантаження його з диска файлової системи). Він призначений для таких важливих команд рівня ОС, як ls. Очевидно, що лише супервайзер міг встановити клейкий біт на файл. Це стало менш важливим після введення віртуальної пам’яті та спільних бібліотек, особливо, коли пейджери ставали розумнішими та могли динамічно вирішувати, які сторінки зберігати.
alexis

4
А оскільки властивість sticky не мала сенсу для каталогу, той самий біт маски дозволів пізніше був інтерпретований для зміни традиційної семантики створення файлів для каталогів.
alexis

5
@alexis: Спочатку клейкі розрядні програми зберігалися в просторі своп. Це було набагато швидше, ніж читання з файлової системи, тому що читання зображень із заміною файлів було суміжними секторами, і тому їх можна було читати здебільшого асинхронно. З ранніми файловими системами не було сектору "пробігу довжин", і більшість ранніх драйверів файлової системи читали по одному сектору за часом, навіть якщо сектори трапляються послідовно. Результатом PDP-40 стало те, що липкі програми, здавалося, завантажуються миттєво, тоді як антипригарні програми займали звичайну секунду чи дві. Я думаю, у нас було лише edлипке.
wallyk

8

"Клейкий біт, застосований до виконуваних програм, що позначають систему, щоб зберегти зображення програми в пам'яті після завершення роботи програми."

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

У будь-якому випадку, у цій старій поведінці зображення (лише "код", а не дані) зберігалося лише у віртуальній пам'яті - ненормовано, не в реальній пам'яті, щоб наступного разу запустити її швидше.


3

Що таке липкі шматочки?

Клейкий біт - це біт дозволу, який встановлюється в каталозі, який дозволяє тільки власникові файлу в межах цього каталогу або кореневому користувачу видалити або перейменувати файл. Жоден інший користувач не має необхідних привілеїв, щоб видалити файл, створений іншим користувачем.

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


1
Це неправильно: en.wikipedia.org/wiki/Sticky_bit
AB

7
@AB Мені це здається досить точним, майже до того, як перефразовувати початок статті, яку ви цитуєте у Вікіпедії. Що не так з ним?
roaima

Я б сказав, що відповідь неповна. "Клейкий" також позначає, що виконуваний файл зберігатиметься в просторі підкачки, щоб швидше його працювати. Тепер це давня історія, але в старих файлових системах драйвери звикли читати по одному сектору за часом, навіть якщо сектори були послідовними. Це зробило неліпкі виконувані файли повільними, в той час в'ялість мала багато сенсу.
GhostCode
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.