CISセキュリティベンチマークでは、/tmp
および他のすべての書き込み可能なディレクトリを別のパーティションにマウントして、noexec
フラグでマウントできるようにすることをお勧めします。
私はすでに/tmp
を/
と同じパーティションにマウントしていて、パーティションの再作成の煩わしさを避けたいので、(セキュリティの観点での意味での)リスクの違いを知りたいと思います。 chmod -R -x /tmp
とnoexec
フラグを使用して別のパーティションをマウントすることの間。
あなたは実際に3つの別々の強化技術について話し合っています。
個別のパーティション
個別のパーティションは2つのことを行います。最初にシステムを分離します。これは、ストレージの懸念など、セキュリティだけでなく多くの点で有益です。セキュリティの観点からは、グローバルにアクセスするディレクトリを分離し、完全な再構築を必要とするブートパーティションの作業なしで、簡単に削除、再構築、再展開できます。
第二に、バックアップ。パーティションのホームディレクトリ全体でバックアップシステムを実行し、ルートシステムでChefやPuppetなどの構成管理ツールを使用することは珍しくありません。ルートシステムの構成はほとんど変更されず、完全な再構築状況では、バックアップから構成ファイルを復元する以外に、ユーザーファイルを回復するよりも、ChefまたはPuppetに基づいて「/」ファイルをデプロイして標準を維持する方が通常は有益になります。
取り付け
久しぶりで、Nixシステムが目の前にありませんが、fstabファイルにアクセスして/ tmpディレクトリを編集し、NOEXECフラグを使用できるはずです。これには個別のパーティションは必要ありません。 MANページからのフラグ:
noexec
マウントされたファイルシステムでバイナリを直接実行しないでください。 (最近まで、とにかく/lib/ld*.so/mnt/binaryのようなコマンドを使用してバイナリを実行することが可能でした。このトリックはLinux 2.4.25/2.6.0以降失敗します。)
それはそれが言うことを行います。
[〜#〜] chmod [〜#〜]
変更モードは、ファイル/ディレクトリレベルで権限を変更するために使用されます。 chmodのマニュアルページを読むと、-xがファイルへの実行権限とディレクトリへのアクセス権限を付与していることがわかります。
/tmp
を含むchmod -R -x /tmp
で実行ビットを再帰的に削除しても、/tmp
からのファイルの実行が妨げられることはありません。
まず、/tmp
内のファイルcurrentlyにのみ適用されます。 chmod
を実行した後に作成された新しいファイルには、制限はありません。
第2に、別のユーザーのファイルから実行ビットを削除しても、ユーザーによる実行は妨げられません。ユーザーは、変更後に実行ビットを追加できます。
3番目に、ディレクトリの実行ビットは実際には「検索」と呼ばれ、ファイルの場合とは異なる意味を持っています。このディレクトリ構造を考えると:
.:
total 8
drwxrwxr-x 2 root root 4096 ago 25 13:54 dir1
drwxrwxr-x 2 root root 4096 ago 25 13:54 dir2
./dir1:
total 0
-rw-rw-r-- 1 root root 0 ago 25 13:54 file1
-rw-rw-r-- 1 root root 0 ago 25 13:54 file2
./dir2:
total 0
-rw-rw-r-- 1 root root 0 ago 25 13:54 file1
-rw-rw-r-- 1 root root 0 ago 25 13:54 file2
chmod -x dir1
を使用してdir1から「検索」ビットを削除すると、次のようになります。
$ chmod -x dir1
$ ls -l dir1
ls: no se puede acceder a 'dir1/file2': Permiso denegado
ls: no se puede acceder a 'dir1/file1': Permiso denegado
total 0
-????????? ? ? ? ? ? file1
-????????? ? ? ? ? ? file2
$ cat dir1/file1
cat: dir1/file1: Permiso denegado
/ tmpでこれを行うと、使用できない一時ディレクトリが表示され、いくつかのプログラムがクラッシュします。
したがって、noexec
マウントオプションをchmoddingで置き換えることはできません。
新しいパーティションを追加せずに本当にしたい場合1 または、tmpfs/loop-mountedファイルを使用して(Shaneが推奨)、bind-fuを this SF answer で試すことができます
1:論理ボリュームを使用していれば、この問題は発生しないと私は主張します;)
一部のファイルも一時ファイルであり、実際に実行する必要なく実行可能である必要があります。パーティションをnoexec
でマークしても、+x
を設定できますが、(Shell、ld-linux-x86-64.soによる)実行は禁止されています。これは、あなたが言ったようにセキュリティの追加レイヤーにつながります。
私はいくつかの方法を知っていますが、setfacl
(ACL)を使用するのが最も効果的だと感じました。 Apacheは誰も実行していないため、一時的にシェルスクリプトを実行するにはbashが必要です。
setfacl -m u:nobody:r bash
Apacheは引き続き/tmp
を読み書きできますが、実行はできません。