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で機能すると思いますか?
rootが常にファイルに書き込むことができる必要がある理由は、従来のUNIXファイルシステム(ext4、zfsなど)では、ファイルのアクセス権がファイルの一部であるためです。したがって、rootがファイルに書き込めない場合、NOBODYはファイルに書き込めないため、読み取り専用ファイルを再度書き込み可能にすること
—
slebetman
chmod
ができます。
@slebetman権限を更新するためにファイルへの書き込みアクセス権を持っている必要はありません。
—
user253751
touch somefile; chmod 0000 somefile; chmod 0644 somefile
通常のユーザーとして試してください。
@immibis:あなたが所有していること。ルートは、自分が所有していないファイルのアクセス権を変更できる必要があります
—
slebetman
@slebetmanええ...しかし、書き込みできないファイルのアクセス権を変更することについて話していました。所有していないファイルのアクセス権を変更することについてではありません。
—
user253751
CAP_DAC_OVERRIDE
がこれを行うことができます。ほとんどすべてのLinuxシステムでは、これはrootがこれを実行できることを意味するため、意図的なものです。FreeBSDの部分について話すことはできませんが、同様の設定があると思います。