Чому "chmod 1777" і "chmod 3777" обидва встановлюють клейкий шматочок?


15

Щоб встановити клейкий біт на каталог, чому працюють команди chmod 1777і chmod 3777обидва?


2
Ви пропонуєте потенційно ризиковану операцію. Поєднання липкого дозволу на біт та rwx - це погана практика. Будь-хто може змінити та виконати файл та s-біт, що дозволяють перейти на root користувача без паролі.
jippie

1
@jippie setuid та setgid біти зникають, якщо файл змінено, тому ви не зможете отримати кореневий доступ таким чином.
Кайл Джонс

@KyleJones, це все ще небезпечно. Якби passwdбінарний файл був доступним для запису у світі, ви не змогли б отримати кореневий доступ, модифікуючи його, як ви кажете, але ви могли б замінити його іншим бінарним файлом, який би запускався після цього, вважаючи, що це passwd.
Wildcard

@Wildcard Погоджено.
Кайл Джонс

Відповіді:


29

Кожне число (яке також називається восьмеричним, оскільки воно є базовим8) у цій групі представляє 3 біти. Якщо ви перетворите його на бінарне, це набагато полегшує.

1 = 0 0 1
3 = 0 1 1
5 = 1 0 1
7 = 1 1 1

Отже, якщо ви зробили 1777, 3777, 5777 або 7777, ви встановите клейкий біт, оскільки третій стовпець буде рівним 1. Однак при 3777, 5777 та 7777 ви додатково встановлюєте інші біти (SUID для першого стовпця та SGID для другого стовпця).

І навпаки, будь-яке інше число в цьому місці (максимум до 7) не встановить клейкий біт, оскільки останній стовпець не буде 1 або "увімкнено".

2 = 0 1 0
4 = 1 0 0
6 = 1 1 0


3
+1 - приємний опис того, як працюють восьмеричні числа та як вони застосовуються до бітів дозволу файлу.
CVn

1
Це називається "бітмаска", а +1 також для пояснення / показу, як це можна встановити, а clearтакож групи власників та інші стовпці.
Кріс К

16

Дозволи, передані як аргумент chmod, задаються як вісімкове значення. Кожна цифра у значенні представляє три біти. Якщо вказано три цифри, ви встановлюєте читання, запис та виконання бітів для власника файлу, групи та інших (усіх інших). Якщо вказано чотири цифри, найменше ліве число встановлює встановлені, жорсткі та клейкі біти. Octal 1 встановлює клейкий шматочок. Octal 2 встановлює встановлений жорсткий біт. Октал 2 + вісімка 1 - восьмеричний 3, який встановлює як жорсткий біт, так і клейкий біт.


1
Хіба це не вісімковий 2 | восьмеричні 1, а не восьмеричні 2 + восьмеричні 1? Операції, мабуть, дають однаковий результат і в цьому випадку, але в цілому це побіжно або це важливо, чи не так?
Герріт

1
@gerrit Так, у загальному випадку ви повинні дивитися на binary orоператора. Однак, як ви зазначаєте, у цьому випадку це спрацьовує з однаковим результатом, і додаток знайоме набагато більше людей.
CVn
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.