削除できないようにシンボリックリンクをどのようにロックできますか?
これは通常のファイル/ディレクトリを使用して可能ですchattr +i /file/location
が、シンボリックリンクを使用してこれを達成するにはchattr: Operation not supported while reading flags on my-file
。
同様の質問がありますが、「/etc/resolv.conf」に「chattr +i」を設定するには?しかし、ここに適用できるソリューションはありません。
ベストアンサー1
これは解決策を提供しませんが、chattr
シンボリックリンクを不変にすることができない理由を説明します。
Linuxでは、不変属性は使用されるフラグのセットの一部ですFS_IOC_SETFLAGS
ioctl
。歴史的には、これはext2で最初に実装されており、chattr
まだですe2fsprogs
。検索フラグchattr
、処理中のファイルが通常のファイルかディレクトリかを設定する前に明示的に確認してください。
if (!lstat(name, &buf) &&
!S_ISREG(buf.st_mode) && !S_ISDIR(buf.st_mode)) {
goto notsupp;
}
これらのチェックを削除したり、シンボリックリンクを許可するように変更することは、シンボリックリンクを変更できないようにするための良い最初のステップであると思うかもしれませんが、chattr
その直後に次の障害が発生します。
fd = open (name, OPEN_FLAGS);
if (fd == -1)
return -1;
r = ioctl (fd, EXT2_IOC_GETFLAGS, &f);
ioctl
ファイル記述子で動作します。つまり、フラグを設定する前にターゲットを開く必要があります。のシンボリックリンクを開けませんioctl
。open
O_NOFOLLOW
そしてシンボリックリンクをサポートするO_NOPATH
と、前者はそれ自体が失敗し、ELOOP
後者は一緒に使用できないファイル記述子を返しますioctl
。