如何更改符号链接的所有权?

Zam*_*ues 98 linux rhel permissions symlink ln

我在创建软链接时遇到了一些问题。以下是原文件。

$ ls -l /etc/init.d/jboss
-rwxr-xr-x 1 askar admin 4972 Mar 11  2014 /etc/init.d/jboss
Run Code Online (Sandbox Code Playgroud)

链接创建失败,文件所有者的权限问题:

ln -sv  jboss /etc/init.d/jboss1
ln: creating symbolic link `/etc/init.d/jboss1': Permission denied

$ id
uid=689(askar) gid=500(admin) groups=500(admin)
Run Code Online (Sandbox Code Playgroud)

因此,我创建了具有 sudo 权限的链接:

$ sudo ln -sv  jboss /etc/init.d/jboss1
`/etc/init.d/jboss1' -> `jboss'

$ ls -l /etc/init.d/jboss1
  lrwxrwxrwx 1 root root 11 Jul 27 17:24 /etc/init.d/jboss1 -> jboss
Run Code Online (Sandbox Code Playgroud)

接下来我尝试将软链接的所有权更改为原始用户。

$ sudo chown askar.admin /etc/init.d/jboss1

$ ls -l /etc/init.d/jboss1
lrwxrwxrwx 1 root root 11 Jul 27 17:24 /etc/init.d/jboss1 -> jboss
Run Code Online (Sandbox Code Playgroud)

但是软链接的权限没有改变。

我在这里缺少什么来更改链接的权限?

mjt*_*ner 161

在 Linux 系统上,当使用 更改符号链接的所有权时chown,默认情况下它会更改符号链接的目标(即,符号链接指向的任何内容)。

如果您想更改链接本身的所有权,您需要使用以下-h选项chown

-h, --no-dereference 影响每个符号链接而不是任何引用的文件(仅在可以更改符号链接所有权的系统上有用)

例如:

$ touch test
$ ls -l test*
-rw-r--r-- 1 mj   mj   0 Jul 27 08:47 test
$ sudo ln -s test test1
$ ls -l test*
-rw-r--r-- 1 mj   mj   0 Jul 27 08:47 test
lrwxrwxrwx 1 root root 4 Jul 27 08:47 test1 -> test
$ sudo chown root:root test1
$ ls -l test*
-rw-r--r-- 1 root root 0 Jul 27 08:47 test
lrwxrwxrwx 1 root root 4 Jul 27 08:47 test1 -> test
Run Code Online (Sandbox Code Playgroud)

请注意,链接的目标现在由 root 拥有。

$ sudo chown mj:mj test1
$ ls -l test*
-rw-r--r-- 1 mj   mj   0 Jul 27 08:47 test
lrwxrwxrwx 1 root root 4 Jul 27 08:47 test1 -> test
Run Code Online (Sandbox Code Playgroud)

同样,test1即使test已更改,该链接仍由 root拥有。

$ sudo chown -h mj:mj test1
$ ls -l test*
-rw-r--r-- 1 mj mj 0 Jul 27 08:47 test
lrwxrwxrwx 1 mj mj 4 Jul 27 08:47 test1 -> test
Run Code Online (Sandbox Code Playgroud)

最后,我们使用-h选项更改链接的所有权。


Adr*_* M. 19

在处理符号链接时,您必须告诉大多数工具(chown、chmod、ls...)不要取消引用链接:您必须添加-h参数,如联机帮助页中所述:

-h, --no-dereference
          affect symbolic links instead of any referenced file (useful only on systems that can change the ownership of a symlink)
Run Code Online (Sandbox Code Playgroud)

所以尝试: sudo chown -h askar.admin /etc/init.d/jboss1

  • 最简洁的答案。大多数人来到这里是因为它自己的 chown 不起作用 - “-h”解决了这个问题。 (3认同)