Чому налаштування ігнорується в каталогах?


19

У системах Linux ви можете успішно chmod u+s $some_directory, але замість того, щоб примушувати право власності на нові підкаталоги та файли бути власником каталогу, що містить (і також встановлювати підкаталоги u+s), як ви могли очікувати, система просто ігнорує встановлений біт. Підкаталоги та файли продовжують успадковувати UID процесів їх створення, а підкаталоги не встановлені за замовчуванням.

Чому налаштування ігнорується в каталогах і як я можу змусити систему розпізнати його?


Цікаво, чи може на це вплинути опція кріплення "nosuid".
Гептит

Розглянута файлова система не змонтована - nosuidхоча є ще один (ramdisk /dev/shm), який / є / монтується nosuid, і, схоже, трактує setuidбіт точно так само. 6_9
Blacklight Shining

1
Дивіться також: serverfault.com/questions/371541/…
jjlin

2
Щодо його реалізації, вихідний код Linux легко доступний, сміливо реалізуйте цю функцію. Оскільки він уже існує у FreeBSD, ви можете досить просто скопіювати код, я впевнений. Звичайно, ці біти все одно не матимуть ніякого значення для будь-якої іншої системи Linux.
mikebabcock

Відповіді:


16

Нагадаємо, що біти setuid та setgid були винайдені з зовсім іншою метою: змусити виконуваний файл виконуватись з uid або gid його власника, а не з uid або gid користувача, який запускає файл. Будь-яке інше використання - лише додаткова функція.

Ці біти не мають функції для звичайних файлів, які не виконуються. (А також оболонки скриптів на деяких дистрибутивах через проблеми безпеки.) Спочатку вони також не мали функції для каталогів. Очевидно, хтось вирішив, що було б круто взяти невикористаний setgid в каталогах і використовувати його для забезпечення послідовності володіння групою. Зрештою, якщо ви граєте з груповим правом власності, це тому, що з файлом працює більше однієї людини, і, мабуть, має сенс усі файли в даному каталозі належати до однієї групи, незалежно від того, хто їх створив. Ущільнення через те, що хтось забув запустити newgrp, усуваються.

Отже, чому б не реалізувати ту саму функцію для setuid та файлу uid? Ну, uid набагато основніший ніж gid. Якщо ви реалізуєте це, часто файл не належить користувачеві, який його створив! Імовірно, користувач може все-таки змінити файл (якщо припустити, що umask є чимось розумним), але вони не можуть змінити біти дозволу. Важко побачити корисність цього.


Мені б хотілося, щоб це було реалізовано, хоч би задля послідовності… X3 У будь-якому випадку, якщо не вирішити проблему на зразок cronjob, щоб періодично проходити та змінювати право власності, / чи є який-небудь спосіб змусити право власності на файл?
Blacklight Shining

4
Мені спокуса цитувати Емерсона про дурну послідовність. Перш ніж переконати мене, що це бажана особливість, вам доведеться показати мені випадок використання, де це має сенс.
Ісаак Рабінович

1
FreeBSD chmod (2) насправді дещо обговорює це, але лише зазначає, що його зазвичай не слід використовувати через невизначені "дірки безпеки". Я підозрюю , що більшість інших Unixes не прийняти цю функцію , тому що в той час як у нього є деякі випадки використання, це не що дуже корисно.
jjlin

1
"Важко помітити корисність цього" ->, встановленого в домашній каталог, тому сценарії забезпечення, що виконуються як root, не можуть забути випадково затримати щось?
ufotds

1
запуск сценаріїв суперпользователя у вашому домашньому довіднику - це дуже погана ідея
Ісаак Рабінович

7

Я вважаю, що відповідь на це питання стосується проблем безпеки "передачі файлів", які призвели до того, що більшість сучасних Unix-подібних ОС не дозволяють "передавати файли". "Видача файлів" - це коли користувач, що не користується користувачем, змінює право власності на файл іншим, ніж цей користувач. Ця можливість надає багато можливостей для пустощів.

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

Щодо зміни поведінки, вам доведеться змінити бібліотеки та утиліти ОС.


2

Один дуже хороший випадок використання для його здійснення:

Скажімо, у вас є багатопрофільний сервер з 3 захищеними сайтами. У вас створено 3 групи, по одній для кожного з різних сайтів, що обслуговують сайти. Усі файли на всіх сайтах повинні належати користувачеві апачі, щоб апач міг читати та записувати їх (drupal / wordpress тощо).

Якщо setuid, але працював як встановлений біт для дозволів каталогів, виглядатиме приблизно так:

/var/www/sitea - apache:groupa  rwS rwS ---
/var/www/siteb - apache:groupb  rwS rwS ---
/var/www/sitec - apache:groupc  rwS rwS ---

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

Інший випадок використання для Anonymous ftp / http або навіть sftp / ssh. Група та GID у каталозі завантаження будуть кореневими, а також власник та UID. Інші дозволи будуть -wx. Це дозволить усім WRITE отримати доступ до каталогу завантажень, але вони не змогли прочитати нічого, як тільки він буде завантажений, і root матиме всі новостворені файли.

Отже, є два ідеально хороших та дійсних випадки використання для того, щоб функція UID в каталогах відповідала GID-біту.

Стівен Меркуріо


1
Схоже, це не стосується питання, яке було задано.
Кевін Панько

2
@KevinPanko Ні, це не відповідає на моє запитання. Це може бути навіть поза темою для сайту («для чого це корисний випадок <nonexistent feature X>?»). Однак це стосується мого питання, і я, як запитувач, вважаю це корисним.
Blacklight Shining

0

Трохи запізнюючись на вечірку, але у випадку, якщо майбутні читачі натрапляють на це;) Як зазначають інші, у стандартній файловій системі OS-X setUID для каталогів ігнорується - і, здається, це не простий спосіб ( mount -o.... чи що ні). Як це часто, сторінка man насправді не відповідає поведінці OS-X, про яку вона буквально говорить:

4000 (біт set-user-ID-on-Execution) [...] Каталоги з набором біта set-user-id змусять усі файли та підкаталоги, створені в них, належати власнику каталогу, а не uid процесу створення [...]

але він також перераховує можливість досягти такого ж ефекту, не відмовляючись від початкового права власності. Linux використовує '[g /] setfacls' для подібних ефектів (вони дозволу насправді не видно на перший погляд, тому вони можуть колись викликати неприємності).

Щодо "як я можу досягти подібних ефектів", прочитайте всю сторінку чоловіка та поспіль:

chmod +a 'guest allow read,write,delete,add_file,add_subdirectory,file_inherit,directory_inherit' ./[DIRECTORY]

ви можете перевірити через

ls -le

якщо все виглядає нормально. Подальші варіанти включають вставки правил на певних позиціях, видалення або заміну конкретних правил. Тут можна звернути увагу на два варіанти " file_inheritта directory_inherit", що дозволяють приєднати правила до нового каталогу / файлу.

Мені не дуже подобається використовувати setUID, але setGID дуже корисний на файлових серверах, де просто налаштування «основної» групи не працює або клієнти мають файлові маски, що забороняють записувати групу. Це вирішиться шляхом:

chmod +a 'mygroup allow read,write,delete,add_file,add_subdirectory,file_inherit,directory_inherit' /fileserver/groupfolders/mygroup

Ласкаво просимо на обмін стеками! Це хороша відповідь, хоча, що стосується OS X, а не дистрибутивів Linux (які, як ви вже згадували, використовують іншу систему ACL), це не зовсім здається актуальним. Це, безумовно, було б добре підходити до питання про те, як зробити OS X почесними встановленими каталогами; можливо, ви повинні опублікувати його ?
Blacklight Shining

До речі, біт, який ви залишили з сторінки керівництва OS X, chownнасправді здається досить важливим! “[…] Якщо основна файлова система підтримує цю функцію: див. Chmod (2) та suiddir варіант для монтажу (8).” Я насправді раніше цього ніколи не помічав. Якщо HFS реалізується suiddir, ви можете насправді зробити це в звичайній системі OS X.
Blacklight Shining

(А ACL-файли OS X такі ж, як "не справді видні на перший погляд", як Linux ACL.)
Blacklight Shining

0

Ну, це повинно поважати стандарт. Я можу подумати на декількох сценаріях з sftp, лише щоб це врятувало мені багато клопотів, як з acl, так і з набором acl-mask, що робить sshd, і скиданням, що я повинен зробити для цієї маски.

Безпека за замовчуванням є цілком корисною, але якщо ви не робите це як варіант, ви просто створюєте крила.

https://www.gnu.org/software/coreutils/manual/html_node/Directory-Setuid-and-Setgid.html

Так чи інакше, це так, як зараз йде Linux, тому просто використовуйте acl, щоб обійти їх.


-1

Відповідно до http://en.wikipedia.org/wiki/Setuid#setuid_and_setgid_on_directories біт встановлення ігнорується для каталогів як у системах UNIX, так і Linux. Однак можна змусити його діяти так, як ви очікували на FreeBSD.


Не корисно - я запитав, чому setuidігноруються каталоги та чи можна зробити його розпізнаваним у Linux.
Blacklight Shining

Здається очевидним, що його ігнорують у Linux, оскільки його ігнорують на Unix, що робить правильним поведінку для Linux, щоб він відповідав справжньому * nix. Не соромтеся прочитати цю статтю. Та сама відповідь на greenend.org.uk/rjk/tech/perms.html від 2004 року, також дублікат serverfault.com/questions/371541/…
mikebabcock

То чому його ігнорують на Unix?
Ісаак Рабінович

@IsaacRabinovitch, оскільки Blacklight дав зрозуміти, що це питання щодо Linux, це не стосується [мови в щоках], але я підозрюю, що його просто не визначена поведінка, коли багато Unixes робили різні речі з цим і нічого не роблять, це більш безпечне припущення.
mikebabcock

Питання / є / позначено тегами linux, так, але це не означає, що я віддаю перевагу розпливчастому "Це робиться саме так, тому що інші системи роблять це так", щоб відповісти, що пояснює, чому це робиться саме так в інших системах. (Може бути, linuxтег потрібно просто видалити?)
Blacklight Shining
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.