Чому Linux / POSIX мають lchown, але не lchmod?


11

Схоже, що Linux підтримує зміну власника символічного посилання (тобто lchown), але зміна режиму / дозволу символічного посилання (тобто lchmod) не підтримується . Наскільки я бачу, це відповідає POSIX. Однак я не розумію, чому можна було б підтримувати будь-яку з цих операцій, але не обидві. Яка мотивація за цим?


1
Дозволи на симпосилання завжди є lrwxrwxrwx. Тут chmodнемає сенсу. Перейшовши за посиланням, ви можете отримати цільові дозволи.
ott--

2
@ott: У Linux права доступу до символьних посилань - це завжди ті, які ви дали саме тому, що Linux не підтримує lchmod. Але інші Unix-подібні ОС підтримують його (наприклад, Mac OS X ), тому питання полягає в тому, чому Linux не підтримує її lchown.
Флоріан Брюкер

Відповіді:


9

Linux, як і більшість Unix-подібних систем (Apple OS / X є одним з рідкісних винятків), ігнорує дозволи на символьні посилання, наприклад, коли йдеться про вирішення їхніх цілей.

Однак право власності на посилання, як і інші файли, є релевантним, коли мова заходить про дозвіл перейменовувати або від’єднувати їх записи в каталогах, у яких встановлено tбіт, наприклад /tmp.

Щоб мати змогу видалити або перейменувати файл (символьний посилання чи ні) /tmp, потрібно бути власником файлу. Ось одна з причин, можливо, можна змінити право власності на симпосилання (надати або видалити дозвіл на від’єднання / перейменування).

$ ln -s / /tmp/x
$ rm /tmp/x
# OK removed

$ ln -s / /tmp/x
$ sudo chown -h nobody /tmp/x
$ rm /tmp/x
rm: cannot remove ‘/tmp/x’: Operation not permitted

Також, як згадував Марк Плотнік у своїй тепер видаленій відповіді , додатки lchown()для резервного копіювання та архіву потребують відновлення посилань на своїх початкових власників. Іншим варіантом було б перемикання euid і egid перед створенням симпосилання, але це не було б ефективним і складним управлінням справами в каталозі, з якого витягується символьне посилання.


Я не впевнений, що це оригінальна мотивація, але це дає причину, чому дизайн корисний. Спасибі!
Флоріан Брюкер

0

У posix немає lchmod (), але fchmodat (), який би дозволив встановити дозволи на симпосилання. Це все ще не вимагає оцінки дозволів символьних посилань.


1
ОП знає, що lchmodнемає відповідності POSIX. Що додає ця відповідь, що вже не в питанні?
muru

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

1
Як так? Стандарт говорить : Деякі реалізації можуть дозволити змінити режим символічних посилань. Це не підтримується інтерфейсами в специфікації POSIX. Системи з такою підтримкою надають інтерфейс під назвою lchmod (). Для підтримки таких реалізацій fchmodat () має параметр прапора. Все це говорить про те, що є fchmodat прапор, який дозволяє впровадженню змінити символьні посилання. Не те, що це обов’язково може.
muru

Правильно, оскільки дозвіл символьних посилань не оцінюється з 35 років, не має сенсу змінювати режими. Fchmodat () існує для ортогонності. Єдиною реальною перевагою був futimensat (), оскільки встановлені часові позначки для посилань допомагають людині зрозуміти дерево каталогів.
schily

@schilly, OS / X робить почесні дозволи на символьні посилання. Там, якщо у вас немає дозволу на читання, ви не можете вирішити їх цілі.
Стефан Шазелас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.