chown видаляє встановлений біт: помилку чи функцію?


14

Кроки до відтворення:

germar@host:~$ cd /tmp/
germar@host:/tmp$ touch test && chmod u+s test && ls -la test
-rwSr--r-- 1 germar germar 0 Nov  2 20:11 test
germar@host:/tmp$ chown germar:germar test && ls -la test
-rw-r--r-- 1 germar germar 0 Nov  2 20:11 test

Тестували за допомогою Debian стискання та Ubuntu 12.04


Це теж на Fedora 17.
BenjiWiebe

Відповіді:


17

Не помилка згідно з документацією на chown:

$ info coreutils 'chown invocation'

   The `chown' command sometimes clears the set-user-ID or set-group-ID
permission bits.  This behavior depends on the policy and functionality
of the underlying `chown' system call, which may make system-dependent
file mode modifications outside the control of the `chown' command.
For example, the `chown' command might not affect those bits when
invoked by a user with appropriate privileges, or when the bits signify
some function other than executable permission (e.g., mandatory
locking).  When in doubt, check the underlying system behavior.

Дякую jlliagre. Я info coreutilsраніше не знав . Я лише читав man-сторінку і шукав в Інтернеті.
Гермар

12

Це задумом, і це стандартна поведінка. Цитуючи стандарт POSIX :

Якщо хоун не викликається процесом з відповідними привілеями, ідентифікатор set-user і ID-групи set-group у звичайному файлі очищаються після успішного завершення; ідентифікатори set-user-ID та біти-ID групи set інших типів файлів можуть бути очищені.

( sвстановлено (або встановлено значення в стовпці групи), а не липким, до речі.)

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

Причиною видалення біта setuid є те, що зміна власника також змінює, який користувач буде ефективним ідентифікатором користувача процесу. Зокрема, у системах, де користувач може видавати файл, cp /bin/sh foo; chmod u+s foo; chown joe fooстворили б виконаний файл із налаштуваннями, що належить Джо, гігантській дірі в безпеці.


Оголошення за нітрик! SUID / SGID - це не "клейкий" біт!
Джим Денніс

Відмінний момент щодо наслідків для безпеки збереження SUID / SGID. Мене турбувала поведінка, поки я не прочитав це речення. Я б додав, однак, я ніколи не бачив, щоб чуун не очищав шматочки, навіть коли працює як root. Мені цікаво, що означатимуть "відповідні привілеї".
надзвичайно суперіормен

1
@vastlysuperiorman На класичній платформі Unix "відповідні привілеї" означають ідентифікатор користувача 0. Але POSIX дозволяє системам визначати власну політику безпеки. Наприклад, для багатьох операцій на Linux "відповідні привілеї" реалізовані як можливості (які отримують лише root за замовчуванням). У цьому конкретному випадку придушує біт сетксиду на chown незалежно від привілеїв, як більшість, якщо не всі варіанти Unix. Але шар POSIX у Windows може працювати інакше.
Жил "ТАК - перестань бути злим"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.