答え1
難しい質問のようです。複数のシステムでは、fchmodat(2)
フラグ付きのシステムコールを使用したり、システムコールとオプションを含むコマンドをAT_SYMLINK_NOFOLLOW
使用してシンボリックリンクの権限を変更したりできますが、UbuntuなどのLinuxベースのオペレーティングシステムでは変更できません。lchmod(2)
chmod
-h
これらの権限の変更を許可する多くのシステムでは、とにかく無視されます(macosはIIRC例外です)。したがって、権限を変更する必要はほとんどありません。とにかくw
シンボリックリンクは変更できないため、システム権限は重要ではないと予想しています。シンボリックリンクの宛先を変更するには、親ディレクトリへの書き込み+検索権限を必要とする新しい宛先にシンボリックリンクを再作成する必要があります1。
ここでは、次のようにだまされて上書きできますls
。
ls() (
set -o pipefail
command ls "$@" | sed 's/^lrwxrwxrwx/lrwxr-xr-x/'
)
ls
(stdoutはパイプなので、ほとんどのls
実装が端末デバイスに到達したときに異なる(より人間に優しい)出力を提供することが多いため、フォーマットに影響を与える可能性があることに注意してください。)
¹ 以下の場合です。所有権t
(削除制限)ビットがディレクトリに設定され、そのディレクトリを所有していない場合、そのディレクトリを所有していない場合はシンボリックリンクを削除できるため、シンボリックリンクが重要になる可能性があります。