従来、Linuxプロセスは特権(rootとして実行)または非特権のいずれかです。特権プロセスはカーネル権限チェックの対象ではないため、システムに対してフルパワーを発揮します。機能は、特定の権限チェックをバイパスするためにプロセスが使用できる、別個の独立した特権です。機能はLinux2.2で最初に導入され、その後のバージョンでさらにいくつか追加されました。これらは通常、実行可能ファイルに設定され、機能を持つファイルが実行されるとプロセスに自動的に付与されます。機能は基本的にrootユーザーの権限を個別の特権に分割し、攻撃者がサービスを悪用または悪用することによって取得するアクセスを制限することでセキュリティを向上させます。
このガイドでは、一般的に使用される機能をいくつか紹介し、それらを表示および変更する方法を示します。
Linuxカーネルは、多数の機能を実装しています。それらのいくつかは次のとおりです:
- CAP_SYS_ADMIN:さまざまな操作を許可します。この機能は避けて、より具体的な機能を優先する必要があります。
- CAP_CHOWN:ファイルのユーザーIDとグループIDを変更します
- CAP_DAC_READ_SEARCH:ファイルの読み取りをバイパスし、ディレクトリの読み取り/実行チェックを実行します。この機能を備えたプログラムを使用して、システム上の任意のファイルを読み取ることができます。
- CAP_DAC_OVERRIDE:DAC(随意アクセス制御)をオーバーライドします。つまり、読み取り/書き込み/実行権限チェックをバイパスします。この機能により、実行可能ファイルはファイルシステム上の任意のファイルにアクセスして変更することができます。
- CAP_NET_BIND_SERVICE:1024未満のポート番号へのバインドを許可します。
- CAP_KILL:SIGHUPやSIGKILLなどのプロセスにシグナルを送信するためのアクセス許可チェックをバイパスします。
- CAP_SYS_NICE:特にプロセスのniceness値とスケジューリング優先度を変更します。
- CAP_SYS_RESOURCE:ディスククォータ、CPU時間制限など、システムリソースのさまざまな制限を上書きできます。
完全なリストは、capabilities(7)のマニュアルページにあります。
ファイルには、許可、継承、および有効の3つの異なるセットで機能を割り当てることができます。スレッドには、アンビエントとバウンディングの2つの追加セットがあります。各セットには、実際には1ビットであるファイルの有効なセットを除いて、0個以上の機能を含めることができます。これらのセットは、このガイドの範囲を超える複雑なカーネル動作を定義します。ファイルに機能を割り当てるときは、ほとんどの場合、許可された効果的なセットを使用します。
注:SELinuxは機能に干渉する可能性があります。 SELinuxが強制モードになっているシステムでは、プロセスがその機能を利用できなくなる可能性があります。
機能管理には、libcapとlibcap-ngの2つの異なるパッケージがあります。後者は前者よりも簡単になるように設計されています。このガイドでは両方について説明します。
libcapは、ファイル機能を表示および設定するためのgetcapおよびsetcapを提供し、libcap-ngは、両方の機能を1つのツールfilecapに統合します。
libcap
Debian、Ubuntu、およびその他のDebianベースのディストリビューションでは、libcapユーティリティは次のコマンドでインストールできます。
apt update apt install libcap2-bin
CentOSにインストールするには、次のコマンドを使用します。
yum install libcap
Fedoraにインストールするには、次のコマンドを使用します:
dnf install libcap
Archにインストールするには、次のコマンドを使用します。
pacman -Sy libcap
getcapは、ファイルに割り当てられている機能がある場合は、それを表示するだけです。次の構文を使用します:
getcap /path/to/binary
例:
Getcapは、-rフラグを使用して再帰的に検索することもできます。例:
注:2> / dev / nullは、getcapが/ sys、/procなどのファイルの機能を取得しようとしたときに発生する「Operationnotsupported」エラーで出力が乱雑にならないようにするために使用されます。これらの特別な仮想ファイルシステムはサポートしていません機能。
setcapを使用してファイル機能を設定するには、次の構文を使用します。
setcap CAP+set filename
たとえば、CAP_CHOWNとCAP_DAC_OVERRIDEを許可された効果的なセットに追加するには、次を使用します。
setcap CAP_CHOWN,CAP_DAC_OVERRIDE+ep file1
ファイルから機能を削除するには、-rフラグを使用します。
setcap -r filename
追加の例をいくつか示します。
libcap-ng
Debian、Ubuntu、その他のDebianベースのディストリビューションにインストールするには:
apt update apt install libcap-ng-utils
CentOSにインストールするには:
yum install libcap-ng-utils
Fedoraにインストールするには:
dnf install libcap-ng-utils
Archにインストールするには:
pacman -Sy libcap-ng
- filecapプログラムは、「CAP_」プレフィックスのない機能を参照します(たとえば、CAP_NET_ADMINの代わりにNET_ADMIN)。
- filecapは相対パスでは機能しません。ファイルまたはディレクトリを引数として渡すときに、フルパスが必要です。
- filecapでは機能セットを指定できません。機能を設定するときに、常に許可された効果的な機能を使用します。
ファイルに割り当てられた機能を表示するには:
filecap /full/path/to/file
ディレクトリを再帰的に検索するには、次を使用します。
filecap /full/path/to/dir
filecapを使用してファイルシステム全体を検索するには、次のいずれかのコマンドを使用します。
filecap / filecap -a
filecapを使用してファイルとディレクトリを調べる例を次に示します。
ファイルに機能を設定するには、次の構文を使用します。
filecap /full/path/to/file cap_name
例:
filecap /usr/bin/tac dac_override
機能を削除するには、次の構文を使用します:
filecap /full/path/to/file none
filecapを使用して機能を設定および削除する例を次に示します。
機能は、幅広いセキュリティアプリケーションを備えた強力なカーネル機能です。可能な限り、完全な特権とルートSUIDの代わりに使用する必要があります。