シンボリックリンクを読み取り専用にする方法( `chattr +i /location/symlink`)?

シンボリックリンクを読み取り専用にする方法( `chattr +i /location/symlink`)?

削除できないようにシンボリックリンクをどのようにロックできますか?

これは通常のファイル/ディレクトリを使用して可能です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ファイル記述子で動作します。つまり、フラグを設定する前にターゲットを開く必要があります。のシンボリックリンクを開けませんioctlopenO_NOFOLLOWそしてシンボリックリンクをサポートするO_NOPATHと、前者はそれ自体が失敗し、ELOOP後者は一緒に使用できないファイル記述子を返しますioctl

おすすめ記事