FreeBSDでの(私にとっての)驚くべき許可動作に遭遇しました。 non-rootユーザーとして操作しているとしましょう。ファイルを作成し、そのアクセス許可を読み取り専用に設定してから、書き込みを試みます。
$ touch f
$ chmod 400 f
$ ls -l f
-r-------- 1 user wheel f
$ echo a >> t
t: Permission denied.
ここまでは順調ですね。今私はルートと同じことをして、ファイルに書き込みます:
# ls -l f2
-r-------- 1 root wheel f2
# echo a >> f2
# echo $?
0
それはバグですか、それとも意図された動作ですか?これがすべてのUnixとLinuxで機能すると思いますか?
root
がこの方法で権限を上書きできるのは正常です。
別の例は、読み取りアクセス権なしでファイルを読み取ることができるroot
です。
$ echo hello > tst
$ chmod 0 tst
$ ls -l tst
---------- 1 sweh sweh 6 Aug 16 15:46 tst
$ cat tst
cat: tst: Permission denied
$ Sudo cat tst
hello
一部のシステムにはimmutableファイルの概念があります。たとえばFreeBSDの場合:
# ls -l tst
-rw-r--r-- 1 sweh sweh 6 Aug 16 15:50 tst
# chflags simmutable tst
# echo there >> tst
tst: Operation not permitted.
root
でさえ、ファイルに書き込むことができません。しかし、もちろん、root
はremoveフラグを使用できます。
# chflags nosimmutable tst
# echo there >> tst
# cat tst
hello
there
FreeBSDでは、さらに進んでカーネルフラグを設定し、root
がフラグを削除しないようにすることができます。
# chflags simmutable tst
# sysctl kern.securelevel=1
kern.securelevel: -1 -> 1
# chflags nosimmutable tst
chflags: tst: Operation not permitted
これで誰も、root
でさえ、このファイルを変更できなくなります。
(securelevelを下げるには、システムをリブートする必要があります)。
はい、これは非常に正常です。 rootはrootであるため、読み取り/書き込みに制限はありません(ほとんど例外はありません)。