在 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 中,我尝试设置符号链接的权限,但它仅在符号链接目标上设置。
/home/nagios/.ssh/someprivatekey
它与从到 的符号链接有关/somewhere/else/privatekey
,因此权限对于 ssh 很重要。我该如何实现这一点?
答案1
不可能。没有办法,因为符号链接的权限毫无意义(符号链接不是文件;它只指向一个文件)。在 Linux 中,可以通过访问控制列表尽管。
符号链接解释为……
所创建的符号链接的文件模式位的值未指定。POSIX.1-2008 指定的所有接口的行为都应如同符号链接的内容始终可读取一样,但 stat 结构的 st_mode 字段中返回的文件模式位的值未指定。
区别在于:修改模式和修改模式... 这是 BSD 与 Linux 之间的对抗。
不确定这是否重要,但关于 SSH:它使用 统计(2),而不是 lstat(2) 来获取权限。
- stat() 对路径指向的文件进行统计并填充到buf中。
- lstat() 与 stat() 相同,不同之处在于,如果路径是符号链接,则统计的是链接本身,而不是它引用的文件。
答案2
你不能。Linuxchmod
中的底层系统调用根本不支持这一点,而且 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.
对于硬链接或绑定挂载,使用源的权限,因此在其他地方反映文件内容的三种标准方法都无法帮助您做到这一点。