web-dev-qa-db-ja.com

パーミッションの変更シンボリックリンクMacOS

Mac OSでシステムリンクのアクセス許可をどのように変更しますか?

私は試した chmod -h 755 mylink zshでiTerm2を使用していますが、機能しませんでした。

4
varnaud

この問題で完全に間違った方向に進んだ後、関連する問題を言い換えさせてください。シンボリックリンクのアクセス許可が無意味である理由を見てみましょう。そのため、アクセス許可を変更するかどうかは役に立ちません。

問題を再現できません。 一部のシステム では、シンボリックリンクのアクセス許可をまったく変更できません。私の経験では、Mac OS El Capitanはほとんどの状況でシンボリックリンクのアクセス許可を変更しますが、新しいアクセス許可は効果がありません。

概念的には、シンボリックリンクのアクセス許可を変更しても効果がないはずです。ファイルへのアクセスがシンボリックリンクを作成してからシンボリックリンクのアクセス許可を変更するのと同じくらい簡単である場合、ファイルは安全ではありません。

私はこの免責事項をman 7 symlinkで見つけました:

[システムコール]を使用して、既存のシンボリックリンクのフラグ、アクセス許可、所有者/グループ、および変更時間を変更できます。これらのうち、フラグのみがシステムによって使用されます。 アクセス許可と所有権は無視されます

これが極端な例です。

$ touch myfile
$ ln -s myfile mylink
$ ls -l myfile mylink
-rw-r--r--  1 user  staff  0 Jul 13 14:42 myfile
lrwxr-xr-x  1 user  staff  6 Jul 13 14:43 mylink -> myfile
$ chmod -h 000 mylink
$ ls -l myfile mylink
-rw-r--r--  1 user  staff  0 Jul 13 14:42 myfile
ls: mylink: Permission denied
l---------  1 user  staff  6 Jul 13 14:43 mylink
$ echo 'Hello, world!' > mylink
$ cat mylink
Hello, world!
$ ls -l myfile
-rw-r--r--  1 user  staff  14 Jul 13 14:43 myfile

シンボリックリンクには権限がありませんが、echocatmylinkからmyfileまで続きます。 echomyfileに書き込み、catはそれを読み取り、シンボリックリンクのアクセス許可を無視します。注意:シンボリックリンクのアクセス許可により、lsがシンボリックリンクのターゲットを表示できなくなりましたが、ユーティリティは引き続きシンボリックリンクをたどります。逆に、

$ chmod 000 myfile
$ chmod -h 777 mylink
$ ls -l myfile mylink
----------  1 user  staff  14 Jul 13 14:43 myfile
lrwxrwxrwx  1 user  staff   6 Jul 13 14:43 mylink -> myfile
$ cat mylink
cat: mylink: Permission denied

修辞的には、これはどうあるべきかではありませんか?

参考資料(MacOSおよびElCapitanに固有のものもあります):

  • man 7 symlink
  • man chmodのACLMANIPULATIONOPTIONSセクション
  • man chflags
4
creidhne