ファイルにアクセスするとき、有効または実際のuidルートを持つプロセスはまだファイル許可ビットによってバインドされていますか?

ファイルにアクセスするとき、有効または実際のuidルートを持つプロセスはまだファイル許可ビットによってバインドされていますか?

ディディ・コーエンの答え 能力ベースのセキュリティですかsudosu

UnixとLinuxには、標準ユーザーとスーパーユーザー(しばしばルートと呼ばれる)の2つのレベルの権限があります。

標準ユーザーは、所有権、グループメンバーシップ、または権限でアクセスできるファイルにのみアクセスできます。前方十字靭帯

スーパーユーザーはすべてを持っており(この回答ではSELinuxのようなものを無視します)、制限はありません。ユーザー空間で。

プロセスの有効または実際のuidがルートであり、ファイルにアクセスしようとすると、まだファイルの許可ビットに縛られていますか?それとも、引用文が示すように(私が正しく理解した場合)、eui​​dルートを使用すると、ファイルの許可ビットは無視されますか?

例えば、

  • 所有者がルートではなく、そのグループがプロセスの有効または補足グループと一致しない場合、ファイルの「その他」権限ビットはプロセスに適用されますか?ファイルが他人の読み取り、書き込み、または実行を許可しない場合でも、プロセスはまだファイルを読み書きすることができますか?

  • ファイル所有者がルートであり、「ユーザー」ファイル権限ビットが読み取り、書き込み、または実行を許可しない場合でも、プロセスはファイルを読み書きすることができますか?

有効または実際のuidがルートであるプロセスがファイルにアクセスできないようにすることは可能ですか?たとえば、ファイルの許可ビットを変更することによって?

答え1

伝統的なUNIXではroot何でもできる。

しかし、最新のLinux(そしておそらく他のUnix)では今動作します。ここで説明する機能は、CAP_DAC_OVERRIDEこの機能を使用するすべてのプロセスがファイル権限を無視することです(例外x、他の回答を参照)。

ほとんどのシステムは、プロセスが変更されたときに以前のバージョンとの互換モードに設定されます。効果的なユーザーIDはrootで、すべての機能を取得します。効果的なユーザーIDがrootから変更されると、機能が失われます。

ルート以外のプロセスに特定の機能を渡すために使用できる機能の削除を防ぐ方法があります。ルートにならずに機能を得ることができる方法もあります。これは、プロセスがルートになる方法と同様に機能します。

重要なのは有効なユーザーIDです。実際のユーザーIDと保存されたユーザーIDを使用すると、このIDを他のIDの1つ(有効なユーザーIDなど)にのみコピーできます。

SE_linuxと名前空間/ cgroupsは、ルートが実行できる操作を制限できます。

答え2

ルートは権限ビットに関係なくすべてにアクセスできます。 1つの例外は、実行ビットが設定されておらず、SELinuxが制限を設定した場合、ルートプロセスがファイルを実行しようとしないことです。

ただし、ルートは依然として必要な実行ビットを設定し、SELinuxルールを変更できるため、ルートがファイルにアクセスするのを防ぐことはできません。

編集する

「人間経路解析」から

既存のUNIXシステムでは、スーパーユーザー(root、userid 0)はすべての権限を持ち、ファイルにアクセスするときにすべての権限制限をバイパスできます。

答え3

プロセスへ有効または実際uidがrootで、ファイルにアクセスしようとしています...

ファイルシステムアクセスでは、実際のUIDではなく有効なUIDのみが重要です。特権UIDを保持するプロセスは、特権を一時的に放棄するために実際の有効なUIDを混在させることができます。

# perl -MEnglish -e '$EUID = 65534; system "id"; system "cat /etc/shadow"'
uid=0(root) gid=0(root) euid=65534(nobody) groups=0(root)
cat: /etc/shadow: Permission denied

しかし、それ以外はあなたが正しいです。権限があれば、権限ビットに関係なくファイルにアクセスできます。 (しかも1ビットでも設定しないとファイル実行はできませんが、xそれは本当に便利なだけです。権限があれば通常ファイルをコピーして実行したり、権限を先に変更すればいいです。)

Linuxの最後のセクションを参照してください。マニュアルページpath_resolution(7)(「権限確認バイパス:スーパーユーザーと機能」)またはPOSIXのテキスト(「4.5ファイルへのアクセス権」)。

後者のヒントや前者の簡単な説明と同様に、実際の権限確認はUID以上である可能性があります。 Linuxでは、実際にCAP_DAC_OVERRIDE能力(またはCAP_DAC_READ_SEARCHそれ以下)。他のシステムについては詳しく知りません。

答え4

権限を持つユーザーの場合、xこのビットのみが評価されます。

これは、スーパーユーザーがファイルを実行できるようにするには、x少なくとも1ビットを設定する必要があることを意味します。

スーパーユーザーの他のすべての権限は無視されます。

関連情報