Linux/POSIXにlchownはあるがlchmodがないのはなぜですか?

Linux/POSIXにlchownはあるがlchmodがないのはなぜですか?

Linuxはシンボリックリンク所有者の変更をサポートしているようです(例:lchown)しかし、シンボリックリンクのモード/権限を変更すること(例lchmod:)サポートしていない。私が知る限り、これはPOSIXと互換性があります。しかし、なぜ人々が2つのタスクの代わりに2つのうちの1つをサポートしているのかわかりません。これの動機は何ですか?

ベストアンサー1

ほとんどのUnixシリーズシステム(Apple OS / Xはいくつかの例外の1つ)と同様に、Linuxはターゲットを確認するときにシンボリックリンクの権限を無視します。

ただし、他のファイルと同様に、シンボリックリンクの所有権はビットが設定されているディレクトリと同じです(t例:/tmp

ファイルを削除または名前変更するには(シンボリックリンクの有無にかかわらず)、ファイルの/tmp所有者である必要があります。これがシンボリックリンクの所有権を変更する理由の1つです(リンクを解除または名前変更する権限を付与または削除するため)。

$ ln -s / /tmp/x
$ rm /tmp/x
# OK removed

$ ln -s / /tmp/x
$ sudo chown -h nobody /tmp/x
$ rm /tmp/x
rm: cannot remove ‘/tmp/x’: Operation not permitted

また、Mark Plotnickが彼の本で述べたように、回答は現在削除されましたlchown()、バックアップおよびアーカイブアプリケーションは、元の所有者へのシンボリックリンクを復元する必要があります。別のオプションは、シンボリックリンクを作成する前にeuidとegidを切り替えることです。ただし、この方法は機能せず、シンボリックリンクが抽出されるディレクトリの権限管理を複雑にします。

おすすめ記事