シンボリックリンクの所有権を変更するには?

シンボリックリンクの所有権を変更するには?

ソフトリンクの作成に問題があります。以下は元の文書です。

$ 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

関連情報