심볼릭 링크의 소유권을 변경하는 방법은 무엇입니까?

심볼릭 링크의 소유권을 변경하는 방법은 무엇입니까?

소프트 링크를 만드는 데 문제가 있습니다. 아래는 원본 문서입니다.

$ ls -l /etc/init.d/jboss
-rwxr-xr-x 1 askar admin 4972 Mar 11  2014 /etc/init.d/jboss

파일 소유자의 권한 문제로 인해 링크 생성에 실패했습니다.

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)

그래서 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

다음으로 소프트 링크의 소유권을 원래 사용자로 변경해 보았습니다.

$ 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

그러나 소프트 링크의 권한은 변경되지 않았습니다.

링크의 권한을 변경하기 위해 여기서 무엇을 놓치고 있습니까?

답변1

chownLinux 시스템에서 다음을 사용하여 심볼릭 링크의 소유권을 변경할 때표적심볼릭 링크(예:심볼릭 링크가 가리키는 것이 무엇이든).

링크 자체의 소유권을 변경하려면 -h다음 옵션을 사용해야 합니다 chown.

-h, --역참조 없음 참조된 파일이 아닌 각 심볼릭 링크에 영향을 줍니다(심볼릭 링크 소유권을 변경할 수 있는 시스템에서만 유용함).

예를 들어:

$ 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

참고하시기 바랍니다,표적이제 링크는 루트가 소유합니다.

$ 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

다시 말하지만, 변경에도 불구하고 링크는 test1여전히 root 의 소유입니다 test.

$ 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

마지막으로 링크 소유권을 변경하는 옵션을 사용합니다 -h.

답변2

-h심볼릭 링크에서 작업할 때 대부분의 도구(chown, chmod, ls...)에 링크를 역참조하지 말라고 지시해야 합니다. 맨페이지에 설명된 대로 인수를 추가해야 합니다 .

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

그러니 시도해 보세요:sudo chown -h askar.admin /etc/init.d/jboss1

답변3

또한 위에서 제공한 오류에 유의하세요.

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

심볼릭 링크의 소유자가 원본 파일의 소유자가 아니기 때문이 아닙니다. 이는 사용자 askar가 디렉토리에 대한 쓰기 권한이 없기 때문에 발생했을 가능성이 높습니다 /etc/init.d.

관련 정보