web-dev-qa-db-ja.com

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

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で機能すると思いますか?

11
arrowd

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でさえ、ファイルに書き込むことができません。しかし、もちろん、rootremoveフラグを使用できます。

# 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を下げるには、システムをリブートする必要があります)。

13
Stephen Harris

はい、これは非常に正常です。 rootはrootであるため、読み取り/書き込みに制限はありません(ほとんど例外はありません)。

3
Ipor Sircer