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


47

ソフトリンクの作成に関する問題に直面しています。以下は元のファイルです。

$ 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

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

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


どのオペレーティングシステムを使用していますか?
mjturner

$ cat / etc / redhat-release Red Hat Enterprise Linux Serverリリース6.6(サンティアゴ)
Zama Ques

回答:


68

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

リンクのターゲットは現在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

繰り返しますが、リンクtest1test変更されていますが、まだルートが所有しています。

$ 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オプションを使用してリンクの所有権を変更します。


残念な接線として:指定されたユーザー/グループとのシンボリックリンクを直接作成するcp -asことinstalllnできません。
ウルリッヒ・シュワルツ

7

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


1
最も簡潔な答え。ほとんどの人がここに来るのは、chown自体が機能しないためです-「-h」はこれを修正します。
itoctopus

4

また、上記で与えたエラーに注意してください

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

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


私はそれを考え出した。グループの書き込み権限を追加していませんでした
ザマケス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.