web-dev-qa-db-ja.com

シンボリックリンクから所有権を変更する方法は?

ソフトリンクの作成で問題が発生しています。以下は元のファイルです。

$ 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

しかし、ソフトリンクの許可は変更されていません。

リンクの許可を変更するためにここで何が欠けていますか?

60
Zama Ques

Linuxシステムでは、chownを使用してシンボリックリンクの所有権を変更すると、デフォルトでシンボリックリンクのtargetが変更されます(つまり、シンボリックリンクが指しているものはすべて)です。

リンク自体の所有権を変更する場合は、chown-hオプションを使用する必要があります。

-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

リンクのtargetがルートによって所有されていることに注意してください。

$ 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

また、testが変更されても、リンクtest1は引き続き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

最後に、-hオプションを使用してリンクの所有権を変更します。

94
mjturner

シンボリックリンクを操作するときは、ほとんどのツール(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)

だから試してください:Sudo chown -h askar.admin /etc/init.d/jboss1

13
Adrien M.

また、上記のエラーは

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

シンボリックリンクの所有者が元のファイルの所有者以外の誰かであることが原因ではありません。 (おそらく)ユーザーaskarがディレクトリ/etc/init.dへの書き込みアクセス権を持っていないことが原因です。

4
Stefan Schmiedl