ファイルやディレクトリへの特権アクセスは、実際に存在するかどうかではなく、機能によって実際に決定されますroot
。実際にroot
は、通常はすべての可能な機能を備えていますが、それらのすべて/多くがドロップされたり、他のユーザー(プロセス)に与えられたりする可能性があります。
簡単に説明すると、アクセス制御チェックが特権プロセスでどのように機能するかについてはすでに説明しました。さまざまな機能が実際にどのように影響するかを次に示します。
ここでの主な機能はCAP_DAC_OVERRIDE
、「ファイルの読み取り、書き込み、および許可チェックの実行をバイパスする」ことができるプロセスです。これには、ファイルの読み取りと書き込み、およびディレクトリの読み取り、書き込み、アクセスが含まれます。
実際には、実行可能としてマークされていない実行ファイルには適用されません。アクセスがファイルをチェックする前の()のコメントgeneric_permission
fs/namei.c
は、
読み取り/書き込みDACは常にオーバーライド可能です。少なくとも1つのexecビットが設定されている場合、実行可能DACはオーバーライド可能です。
そして、コードはx
、ファイルを実行しようとしている場合、少なくとも1 ビットが設定されていることをチェックします。偶然にランダムなデータファイルを実行してエラーや奇妙な結果を得るのを防ぐための便利な機能だと思います。
とにかく、アクセス許可をオーバーライドできる場合は、実行可能コピーを作成して実行するだけで済みます。それはプロセスのsetuidのファイルのための理論の違いを作るかもしれないが(ファイルのパーミッションを(オーバーライドすることが可能であったCAP_DAC_OVERRIDE
)が、他の関連する機能を持っていませんでした(CAP_FSETID
/ CAP_FOWNER
/ CAP_SETUID
)。しかし有するCAP_DAC_OVERRIDE
編集することができます/etc/shadow
、それはほぼ同じですので、そのようなものとにかく完全なルートアクセス権を持つだけです。)
またCAP_DAC_READ_SEARCH
、ファイルの読み取りやディレクトリへのアクセスを許可する機能がありますが、実行や書き込みはできません。またCAP_FOWNER
、許可ビットやファイルグループの変更など、通常はファイルの所有者のみに予約されている処理をプロセスで実行できます。
ディレクトリのスティッキービットのオーバーライドはでのみ言及されているCAP_FOWNER
ため、それCAP_DAC_OVERRIDE
を無視するだけでは十分ではないようです。(それはあなたに書き込み許可を与えますが、通常はとにかくスティッキーディレクトリにあなたはそれを持っていて、+t
制限します。)
(ここでは、特殊なデバイスは「ファイル」としてカウントされると思います。少なくともgeneric_permission()
ディレクトリのタイプチェックのみがありますが、それ以外はチェックしませんでした。)
もちろん、機能でさえファイルの修正に役立たない場合があります:
/proc
およびの一部のファイルは/sys
実際のファイルではないため
- ルートを制限する可能性のあるSELinuxおよびその他のセキュリティモジュール
chattr
ext2 / ext3 / ext4の不変フラグ+i
と追加+a
フラグのみ。両方ともルートを停止し、ファイル名の変更なども防止します。
- サーバーが独自のアクセス制御を行うことができるネットワークファイルシステム。たとえば
root_squash
、NFSでrootをnobodyにマップします。
- FUSE、私は何でもできると思います
- 読み取り専用マウント
- 読み取り専用デバイス
capabilities(7)
マニュアルページに反映されていないように思われるのは驚くべきことです。バグレポートを提出することを検討してください。