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


11

FreeBSDでの(私にとっての)驚くべき許可動作に遭遇しました。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で機能すると思いますか?


のすべてのユーザーCAP_DAC_OVERRIDEがこれを行うことができます。ほとんどすべてのLinuxシステムでは、これはrootがこれを実行できることを意味するため、意図的なものです。FreeBSDの部分について話すことはできませんが、同様の設定があると思います。
Bratchley

1
rootが常にファイルに書き込むことができる必要がある理由は、従来のUNIXファイルシステム(ext4、zfsなど)では、ファイルのアクセス権がファイルの一部であるためです。したがって、rootがファイルに書き込めない場合、NOBODYはファイルに書き込めないため、読み取り専用ファイルを再度書き込み可能にすることchmodができます。
slebetman

1
@slebetman権限を更新するためにファイルへの書き込みアクセス権を持っている必要はありません。touch somefile; chmod 0000 somefile; chmod 0644 somefile通常のユーザーとして試してください。
user253751

@immibis:あなたが所有していること。ルートは、自分が所有していないファイルのアクセス権を変更できる必要があります
slebetman

@slebetmanええ...しかし、書き込みできないファイルのアクセス権を変更することについて話していました。所有していないファイルのアクセス権を変更することについてではありません。
user253751

回答:


13

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

(securelevelを下げるには、システムをリブートする必要があります)。


再起動を要求することはどのように効果的なセキュリティ対策ですか?また、rootがrootであり、何でもできる場合、どうしてrootがrootが望んでいることを実行しないようにしようとするのですか?

1
安全なシステムでは、ルートは神のようなものではありません。FreeBSDのsecurelevelは、rootを神のようから遠ざけるための小さな試みです。Securelevelは、システム構成でデフォルトの1に設定できるため、再起動後もアクティブのままです。したがって、コンソールアクセスとシングルユーザーモードが必要であり、それは非常に改ざんされています。Unixのセキュリティについては、SEのコメントフィールドとしては大きすぎるエッセイがありますが、「rootはすべてアクセスできる」モデルからより微妙なものに移ろうとしています。可能な場合は強制し(securelevelなど)、できない場合は検出します(再起動の証拠、監査証跡)。
スティーブンハリス

4
FWIW、Linux chattr +i tstでは不変属性を設定します。
ルスラン

3

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.