Почему в Linux / POSIX есть lchown, а не lchmod?

11

Кажется, что Linux поддерживает изменение владельца символической ссылки (т.е. lchown), но изменение режима / разрешения символической ссылки (т.е. lchmod) не поддерживается . Насколько я вижу, это соответствует POSIX. Тем не менее, я не понимаю, почему можно было бы поддерживать одну из этих операций, но не обе. Какова мотивация этого?

Флориан Брукер
источник
1
Разрешения символической ссылки всегда lrwxrwxrwx. А chmodне имеет здесь смысла. Перейдя по ссылке, вы попадете в список разрешений.
ot--
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. Что добавляет этот ответ, которого еще нет в вопросе?
Муру
Оператор спросил, почему поддерживается только одна из функций, и я объяснил, что практически обе доступны, но не под указанным именем.
Шили
1
Как так? Стандарт гласит : некоторые реализации могут позволять изменять режим символьных ссылок. Это не поддерживается интерфейсами в спецификации POSIX. Системы с такой поддержкой предоставляют интерфейс с именем lchmod (). Для поддержки таких реализаций fchmodat () имеет параметр flag. Все это говорит о том, что есть флаг для fchmodat, который позволяет реализации изменять символические ссылки. Не то чтобы это обязательно может.
Muru
Правильно, поскольку разрешения символических ссылок не оцениваются с 35 лет, нет смысла менять режимы. Fchmodat () существует для ортогональности. Единственным реальным преимуществом была функция futimensat (), так как устанавливаемые временные метки для символических ссылок помогают людям понять дерево каталогов.
Щили
@schilly, OS / X соблюдает права доступа к символическим ссылкам. Там, если у вас нет прав на чтение, вы не можете решить их цели.
Стефан Шазелас