スーパーユーザーは読み取り専用ファイルに書き込むことができますか?

スーパーユーザーは読み取り専用ファイルに書き込むことができますか?

私はFreeBSDで(私に)驚くべきライセンス動作を偶然発見しました。活動しているとしましょうルートではないユーザー。ファイルを作成し、その権限を読み取り専用に設定してから書き込みを試みます。

$ touch f
$ chmod 400 f
$ ls -l f
-r--------  1 user  wheel  f
$ echo a >> t
t: Permission denied.

今まではそんなに良くなった。これでrootと同じことを行い、それをファイルに書き込みます。

# ls -l f2
-r--------  1 root  wheel  f2
# echo a >> f2
# echo $?
0

これはバグですか、それとも予想される動作ですか?これはすべてのUnixとLinuxで動作すると安全に仮定できますか?

ベストアンサー1

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

一部のシステムにはこの概念があります。不変文書。たとえば、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もちろん削除するバナー:

# 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このファイルを変更できません。

(セキュリティレベルを下げるにはシステムを再起動する必要があります。)

おすすめ記事