Что такое Ubuntu-эквивалент флага OSX `chmod -h`?

13

В OSX я могу установить разрешения самой символической ссылки (вместо того, что она указывает на использование -h). Со страницы руководства:

 -h      If the file is a symbolic link, change the mode of the link itself rather than the file that the link points to.

В Ubuntu 14.04 я пытаюсь установить разрешения для символической ссылки, но она устанавливается только для цели символической ссылки.

Это касается символической ссылки from /home/nagios/.ssh/someprivatekeyна /somewhere/else/privatekey, поэтому права доступа важны для ssh. Как мне этого добиться?

Рэй Бургемистр
источник
Итак, зачем вам эта символическая ссылка?
Муру
1
Вы уверены, что ssh заботится о разрешениях для символической ссылки, а не о разрешениях для / где-то / еще / privatekey?
Random832
@ Random832 Да, возможно, я сделал неправильный вывод, я также был немного озадачен тем, как разрешения отображались в ls -lвыходных данных ( lrwxrwxrwx).
Рэй Burgemeestre
@muru Я создавал образ Docker (buildserver), который использует ключ ssh для доступа ко всем видам серверов. Я не хочу помещать закрытый ключ внутрь по разным причинам (то есть, если я хочу разместить его на докер-хабе). Поэтому я сделал ссылку на него и указал на том, который монтируется только после запуска образа. Хотя, если подумать, я мог бы также изменить местоположение ключа, используя .ssh/config:)
Рэй Бургеместр

Ответы:

18

Невозможно. Нет никакого способа, так как разрешения для символической ссылки не имеют смысла (символическая ссылка не является файлом; она только указывает на файл). Способ сделать это с Linux, хотя через ACL .

символическая ссылка объясняется как ...

Значения битов режима файла для созданной символической ссылки не определены. Все интерфейсы, указанные в POSIX.1-2008, должны вести себя так, как будто содержимое символических ссылок всегда может быть прочитано, за исключением того, что значение битов режима файла, возвращаемых в поле st_mode структуры stat, не указано.


Разница здесь: chmod и chmod ... это BSD против Linux.


Не уверен, что это важно, но в отношении SSH: он использует stat (2) , а не lstat (2) для получения разрешений.

  • stat () stats файл, на который указывает путь, и заполняет buf.
  • lstat () идентичен stat (), за исключением того, что если path является символической ссылкой, то сама ссылка является статовой, а не файлом, на который она ссылается.
Rinzwind
источник
2
Возможность устанавливать разрешения для символических ссылок не указана даже в последней версии, это расширение BSD.
Random832
1
@ Random832 хм, может быть, более точный да. Я читал этот бит сегодня на SO, но не проверял это: D
Rinzwind
4
Кстати, POSIX действительно указывает fchmodatфункцию, которая может использоваться для изменения режима символьных ссылок (необязательная функция - системы, которые не поддерживают ее, включая Linux, возвращают ошибку EOPNOTSUPP), но ничего в chmodкоманде, чтобы использовать это. Только -Rопределяется в POSIX.
Random832
2
Разрешения символической ссылки не имеют смысла в Linux . В системах, где вы можете изменить их (с помощью lchmod(2)или fchmodat(2)...), они имеют значение (разрешить / запретить readlink()(прочитать) или разрешить путь через них (выполнить)). Разрешения на запись обычно отсутствуют, поскольку вы не можете изменить цель символической ссылки.
Стефан Шазелас
Unix не согласится с вами, что «символическая ссылка - это не файл». Симлинк это специальный файл.
Хоббс
9

Ты не можешь Основной chmodсистемный вызов просто не поддерживает это в Linux, и в этом отношении Linux также не заботится о разрешениях ссылки. От man chmod:

chmod never changes the permissions of symbolic links; the chmod system
call cannot change their permissions.  This is not a problem since  the
permissions  of  symbolic  links  are  never  used.   However, for each
symbolic link listed on the command line, chmod changes the permissions
of  the  pointed-to  file.   In  contrast, chmod ignores symbolic links
encountered during recursive directory traversals.

Что касается жестких ссылок или привязок, используются разрешения источника, поэтому ни один из трех стандартных способов отображения содержимого файла в другом месте не поможет вам в этом.

Мур
источник
Этот ответ был также очень ясен для меня, извините, я мог принять только один ответ!
Рэй Burgemeestre