更改符号链接 Mac OS 的权限

var*_*aud 5 chmod macos

如何更改 Mac OS 上系统链接的权限?

我尝试chmod -h 755 mylink将 iTerm2 与 zsh 一起使用,但没有成功。

cre*_*hne 4

在我完全错误地解决这个问题之后,请允许我重述所涉及的问题。我们来看看为什么符号链接权限没有意义,所以改与不改也没有用。

我无法重现该问题。在某些系统上,符号链接权限根本无法更改。我的经验是,Mac OS El Capitan 在大多数情况下确实会更改符号链接权限,但新权限没有任何效果。

从概念上讲,对符号链接权限的更改一定不会产生任何影响。如果访问文件就像创建符号链接然后更改符号链接的权限一样简单,那么没有文件是安全的。

我在以下位置找到了此免责声明man 7 symlink

现有符号链接的标志、访问权限、所有者/组和修改时间可以通过[系统调用]更改。其中,只有标志被系统使用;访问权限和所有权被忽略

这是一个极端的例子。

$ touch myfile
$ ln -s myfile mylink
$ ls -l myfile mylink
-rw-r--r--  1 user  staff  0 Jul 13 14:42 myfile
lrwxr-xr-x  1 user  staff  6 Jul 13 14:43 mylink -> myfile
$ chmod -h 000 mylink
$ ls -l myfile mylink
-rw-r--r--  1 user  staff  0 Jul 13 14:42 myfile
ls: mylink: Permission denied
l---------  1 user  staff  6 Jul 13 14:43 mylink
$ echo 'Hello, world!' > mylink
$ cat mylink
Hello, world!
$ ls -l myfile
-rw-r--r--  1 user  staff  14 Jul 13 14:43 myfile
Run Code Online (Sandbox Code Playgroud)

该符号链接没有权限,但echocat遵循mylink. 写入和读取它,忽略符号链接权限。注意:符号链接权限被阻止显示符号链接的目标,但实用程序仍然遵循符号链接。反过来,myfileechomyfilecatls

$ chmod 000 myfile
$ chmod -h 777 mylink
$ ls -l myfile mylink
----------  1 user  staff  14 Jul 13 14:43 myfile
lrwxrwxrwx  1 user  staff   6 Jul 13 14:43 mylink -> myfile
$ cat mylink
cat: mylink: Permission denied
Run Code Online (Sandbox Code Playgroud)

从修辞上来说,事情不应该是这样吗?

参考资料(一些特定于 Mac OS 和 El Capitan):

  • man 7 symlink
  • ACL MANIPULATION OPTIONS 部分man chmod
  • man chflags