web-dev-qa-db-ja.com

Linuxで/ homeを個別のユーザーアカウントで適切に保護する方法

このInfoSec stackExchangeスレッドからのすばらしい引用。

悪意のあるコードがホームディレクトリのファイルに損傷を与えるのを防ぐ方法は、アカウントを使用して実行しないことです。特別な権限を持たないseparate_userを作成し、信頼できるかどうかを判断するまで、そのUIDでコードを実行します。

私が実行するほとんどのコードは悪意のある可能性があり、Sudo apt-get install suspect_programを介してインストールされるニッチな科学アプリケーションです。 apt-getは、インストール中にsuspect_programにrootアクセスを許可します。したがって、コードは、システム上のどこにいても、悪意のあるものを実行できます。

seperate_userアカウントでコードを実行すると、Ubuntu Linuxボックスの他のアカウントがどのように保護されますか?ダーンなものをインストールしたとき、私はすでにsuspect_programにrootアクセスを与えました。

4
stackinator

プログラムにrootアクセスを与えた場合、プログラムがアカウントにアクセスするのを防ぐことはできません。

(「ルートアクセス」とは、「最高レベルの特権」を意味します。SELinuxなどのセキュリティフレームワークを介して、最高レベルの特権を付与しなくても、ユーザーrootとしてプログラムを実行できます。ただし、実際の保護を得るには、setuidバイナリやcronジョブを作成するなどして特権を昇格させないように、制限付きの特権でパッケージマネージャーを実行する必要があります。これは可能だと思いますが、セットアップが非常に難しく、これを行う既存のフレームワークについては知りません。)

プログラム(そのインストールスクリプトを含む)を本当に分離するには、仮想環境にインストールして実行する必要があります。プログラムがハードウェアに直接アクセスする必要がなく、最高のCPUパフォーマンスを引き出す必要がない場合は、仮想マシンで実行します。それが不可能な場合は、プログラムをコンテナーで実行します。これにより、メインと同じカーネル上に仮想ユーザーランド環境が作成されます環境。プログラムは同じカーネル上で実行されているため、そのパフォーマンスはコンテナーでの実行によって影響を受けることはなく、コンテナーは、アクセスを許可したデバイスにアクセスできます。コンテナー内でrootとして実行されているプログラムは、コンテナー内のrootのみであり、コンテナーと共有されていないファイルにはアクセスできません。 Docker は、コンテナーを管理および配布するための一般的なソフトウェアです。