7.ホストのセキュリティ

7.1. ホストセキュリティの強化

7.1.1. カーネルセキュリティ

BIOSとGRUB2強化の設定

最近のLinuxではブートローダにGRUB2が使われている。 GRUB2の設定(/boot/grub2/grub.cfg)変更は、/etc/default/grubなどのファイル編集後にgrub2-mkconfigコマンドを使用して行う。

GRUB2のセキュリティ強化として、システム起動時にブートパラメータの編集(Eキーを押したとき)にパスワード入力が必要になる設定は以下のように行う。

# /etc/default/grubを編集
vi /etc/default/grub
:
set superuser="superuser1"
password superuser1 xxxxxxxxxxxx
# grub2-mkconfigコマンドで設定を反映
grub2-mkconfig -o /boot/grub2/grub.cfg

不要なソフトウェアを無効化

実行中のすべてのプログラムには、セキュリティ上の脅威が存在する可能性があるため、使用されていないサービスを無効にすることは、セキュリティ上の良い設定となる。

サービスの無効化にはsystemctlおよびchkconfigを使用することで可能。 一般的に無効化するサービスには、atd、ava hi-daemon、cups がある。

systemctlとchkconfigの比較は以下の通り。

機能chkconfigsystemctl
サービスの自動起動有効化chkconfig [サービス名] onsystemctl enable [サービス名].servive
サービスの自動起動無効化chkconfig [サービス名] offsystemctl disbale [サービス名].service
サービスの自動起動状態確認chkconfig --list [サービス名]systemctl is-enabled [サービス名].servive
すべてのサービスの自動起動状態確認chkconfig --listsystemctl list-unit-files --type service

内部的にはchkconfigコマンドはsystemctlコマンドに変換されて実行される。

sysctlによるカーネルパラメータの設定

カーネルパラメータを適切チューニングするとDos攻撃やバッファオーバフロー攻撃に対策し、セキュリティの向上につながる。

sysctl [オプション] [変数]
オプション説明
-aすべてのカーネルパラメータの設定値を表示
-w指定したカーネルパラメータの値を反映
-pカーネルパラメータの設定を行ったファイルを反映
–system``/etc/sysctl.d/*などのファイルのカーネルパラメータの反映
# ===========================
# SYNクッキーの有効化
# ===========================
sysctl net.ipv4.tcp_syscookies
# カーネルパラメータの値の変更
sysctl -w net.ipv4.tcp_syscookies=1
# 設定の反映
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

# ===========================
# SYNクッキーの有効化(恒久設定)
# ===========================
vi /etc/sysctl.conf
net.ipv4.tcp_syscookies = 1
sysctl -p

カーネルパラメータのチューニング

sysctlコマンドは、カーネルパラメータを表示および設定できる。

# 設定の全表示
sysctl -a

# カーネルパラメータからの表示
sysctl -n

# 設定の検索
sysctl -ar [検索パターン]

procfs 

# 設定の保存
sysctl -w  <param>=<value>

# 恒久的な設定の記述ファイル
/etc/sysctl.conf

# /etc/sysctl.confからの反映(ファイルから読み込む)
sysctl -p

chroot環境での作業

chrootは指定したディレクトリをあたかもルートディレクトリのように見えるようにするコマンド。

7.1.2. Linuxの機能

プロセス機能

特定のプロセスの機能を確認するには/procディレクトリ内のステータスファイルを確認する。

cat /proc/self/statusで現在で実行中のプロセスを、capsh --printまたは/proc/<pid>/statusで他のユーザの実行中のプロセスを確認できる。

cat /proc/1234/status | grep Cap
cat /proc/$$/status | grep Cap

上記コマンドで表示される各行は以下内容を意味する。

  • CapInh … 継承された機能
  • CapPrm … 許可される機能
  • CapEff … 有効な能力
  • CapBnd … 境界セット
  • CapAmb … アンビエント機能セット

また、実行中のプロセスの機能を確認するには、getpcapsツールの後にプロセス ID (PID) を続けて使用することでできる。

バイナリ機能

バイナリには、実行中に使用できる機能を含めることができる。 たとえば、cap_net_rawのような機能をping持つバイナリを見つけるのは非常に一般的となる。

getcap /usr/bin/ping
/usr/bin/ping = cap_net_raw+ep

バイナリ検索はgetcap -r / 2>/dev/nullで行える。

capsh による機能の削除

pingのCAP_NET_RAW機能を削除すると、ping ユーティリティは機能しなくなる。

capsh --drop=cap_net_raw --print -- -c "tcpdump"

バイナリ機能の削除

バイナリの機能を削除するには以下コマンドで行える。

setcap -r </path/to/binary>

7.1.3. USBGuard

USBGuard ソフトウェア は、デバイス属性に基づいた基本的なホワイトリスト機能とブラックリスト機能を実装することにより、USB デバイスに対するシステム保護を提供する。 ユーザー定義のポリシーを強制するために、USBGuard はLinux カーネルの USB デバイス認証機能を使用する。 USBGuardフレームワークは次のコンポーネントを提供する。

  • 動的対話とポリシー適用のためのプロセス間通信 (IPC) インターフェイスを備えたデーモンコンポーネント
  • 実行中のUSBGuardインスタンスと対話するためのCLI
  • USB デバイス認証ポリシーを記述するためのルール言語
  • 共有ライブラリに実装されたデーモンコンポーネントと対話するための C++ API

USBGuardの機能

# 初期ルールセットを作成する
usbguard generate-policy > /etc/usbguard/rules.conf

# USBGuard ルール セットをカスタマイズする
vi /etc/usbguard/rules.conf

# USBGuard デーモンを起動する
systemctl enable usbguard.service

# USBGuard によって認識されるすべての USB デバイスをリストする
usbguard list-devices

# デバイスがシステムと対話することを許可する
usbguard allow-device <device-num>

# デバイスを認証解除してシステムから削除する
usbguard reject-device <device-num>

# デバイスの認証を解除するだけ
usbguard block-device <device-num>

またUSBGuardでは、blockおよび拒rejectという用語を次の意味で使用する。

  • block … 現在このデバイスと通信しないようにする
  • reject … このデバイスを存在しないかのように扱う

ホワイトリスト/ブラックリストの作成

ホワイトリスト/ブラックリストはusbguard-daemon.confによりロードされ、デーモンの実行時パラメータの構成に使用される。

ホワイトリストまたはブラックリストを作成するには、/etc/usbguard/usbguard-daemon.confファイルを編集し、そのオプションを使用することで実現できる。

RedHat系におけるUSBGuard

USBGuardのデーモンはUSBGuardパブリックIPCインターフェイスを提供する。 このインターフェイスへのアクセスはRedHat系の場合、rootユーザーのみに制限されている。

アクセス制限にはIPCAccessControlFilesオプション、またはIPCAllowedUsersオプションの設定で制御できる。 なお必ずIPCAllowedGroupsオプションの設定も行う必要があり、これを行わない場合、IPCインターフェイスがすべてのローカルユーザーに公開され、USB デバイスの認証状態を操作したり、USBGuardポリシーを変更したりできるようになってしまう。

7.1.4. ASLRの管理

ASLR(Address Space Layout Randomization)はプログラムがロードされるたびに、メモリ内の異なる場所にロードされるようにする仕組みのこと。

ASLR の設定または設定解除はカーネル パラメータによって制御される。 設定すべきカーネルパラメータはkernel.randomize_va_spaceとなる。

各値毎の動作は以下の通り。

  • 0 … ALSR が無効
  • 1 … ALSR が保守モードで動作
  • 2 … ALSR が完全に機能して動作

7.1.5. NXビット

NXビットはCPUの機能で保護されたメモリ領域からの実行を防ぐことができるもの

この機能の利用により実行可能なメモリ空間を制限することできる。そのため悪意のあるプログラムによる任意のコードの実行が困難にすることが可能。

NXビットは CPUレベルの機能であるため、CPU 情報を確認して確認する必要がある。

grep -Fw nx /proc/cpuinfo

7.1.6. Exec-Shield

Exec-ShieldはNXビットの機能のない CPU をサポートするように設計された、同じ問題に対するソフトウェア手法のこと。 NXビットと同様に保護されたメモリ領域からの実行を防ぐことができる。

7.1.7. ICMPのセキュリティ設定

ICMPの無効化はカーネルパラメータのnet.ipv4.icmp_echo_ignore_all=1で設定ができる。

sysctl -w net.ipv4.icmp_echo_ignore_all=1

このICMPの無効化はICMP(ping)応答の無効化やDDoSの軽減などホストの稼働状況に関する情報漏洩を防ぐことができる。

なお、ICMPエコーブロードキャストのみ無効化させる場合はnet.ipv4.icmp_echo_ignore_broadcasts=1で可能。

7.1.8. SSH認証局

SSH公開鍵認証の問題

SSH 接続が初めて確立されると、SSH サーバーは自分自身を識別するための公開キーをユーザーに送信する。この認証スキームは「初回使用時の信頼」または TOFU と呼ばれる。

この認証スキームはホストのIP、名前、または公開キーが変更されると、ユーザ側にホストが信頼できないようなメッセージが表示される。

SSH CAベースの認証

SSHの認証で認証局を使用してサーバーとクライアントを認証する機能を利用するとクライアントに対してホストを認証でき、ホストの信頼性を検証できないという混乱を招くSSH公開鍵認証の問題を回避できる

この構成を行い場合、接続先ホストとクライアントの2台だけではなく、認証局用のCAサーバが必要となる。

7.1.9. Chroot環境

chrootは特定のユーザーおよびプロセスに対して設定される疑似的なルートファイルシステムのこと。 特徴は以下の通り。

  • 特権のないプロセスは、chroot 環境外のファイルにアクセスできない
  • chroot 環境ではハードリンクできないため、ファイル自体をコピーして配置しておく必要がある

最新のプロセス分離ではChroot環境ではなく、仮想化コンテナが使用される。

7.1.10. Spectre/Meltdown脆弱性

Spectre/Meltdown脆弱性はプロセッサまたは CPU のハードウェアの脆弱性のこと。 この脆弱性は発見されてはいるが、悪用するには非常に難しいとされている。 具体的にはIntel製のプロセッサに対する脆弱性で内容は以下の通り。

  • Spectre脆弱性
    • コンピュータにインストールされているアプリケーション間の分離が破壊されるもの
    • 攻撃者は安全性の低いアプリケーションをだまして、オペレーティング システムのカーネル モジュールから他の安全なアプリケーションに関する情報を朗詠させられる
  • Meltdown脆弱性
    • ユーザー、アプリケーション、オペレーティング システム間の分離を破壊するもの
    • 攻撃者は、そのプログラムや他のプログラムのメモリ位置にアクセスし、システムから機密情報を取得するプログラムを作成することができる

Linux マシンに Meltdown と Spectre に対するパッチが適用されているかどうかを確認するには以下プロジェクトのソフトウェアで可能。

git clone https://github.com/speed47/spectre-meltdown-checker.git
  1. cd spectre-meltdown-checker
  2. chmod u+x spectre-meltdown-checker.sh
  3. ./spectre-meltdown-checker.sh

7.1.11. Polkit

PolKitは特権のないユーザセッションと特権のあるシステムとの間のネゴシエーターとして機能するアプリケーションのこと。 内部的にはユーザセッションのプロセスがシステムコンテキストでアクションを実行しようとするたびにPolkitがクエリされる。

Polkitの動作はsudoなどの従来の権限承認プログラムとは異なり、rootセッション全体に権限を付与するのではなく、特定のアクションにのみ権限を付与する。

7.1.12. Grubの制御

GRUB はパスワード機能を提供し、管理者だけが対話型操作を開始できるようにすべきものといえる。 これはGrubが構成を変更したり、実行時に任意のコマンドを実行したりできる機能があるためユーザレベルの制御としては強すぎるためである。

7.2. ホストへの侵入検知

7.2.1. スレッド検出ツール

Linuxの脅威検出ツールには以下のようなものがある。

  • AIDE … ホストの改ざん・侵入検知ツール
  • OPENScap … システム監視用のRedHat系向けのツール
  • Linux Malware Detect(LMD) … 悪意のあるソフトウェアを検出するための別のツール
  • Rkhunter … ルートキットを検知/駆除ツール
  • Chkrootkit … ルートキットを検知/駆除ツール

7.2.2. AIDE

AIDEはLinux向けのファイルとディレクトリの整合性をチェックする強力なOSSの侵入検知ツール(ホスト型IDS)

AIDE はファイルとディレクトリの整合性をチェックするための独自のデータベースを持つ。そのファイル署名のデータベースを維持し、ファイル署名を定期的に検証する。

またAIDEは、最近変更または変更されたファイルの監視に役立つ。誰かがファイルやディレクトリを修正または変更しようとしたときに、それらを追跡できるようになっている。

/etc/aide.conf

AIDEの設定ファイルは/etc/aide.confであり、検査対象と検査内容を設定できる。

# 記述例
CONTENT_EX = sha256+ftype+p+u+g+n+acl+selinux+xattrs
検査ルール意味
pパーティション
ftypeファイル種別
iinode番号
lリンク名
nリンク数
uユーザ
gグループ
sファイルサイズ
bブロック数
m最終更新時刻
a最終アクセス時刻
c最終ステータス更新時刻
Sサイズの増分
I inode番号の変更は無視
aclアクセスコントロールリスト
selinuxSELinuxのコンテキスト
xattrs拡張ファイル属性
md5チェックサム(MD5)
sha256チェックサム(SHA256)
# 設定例
/boot/ CONTENT_EX # ルールの適用

!/etc/.*~ # etc以下の「.」ファイルは無視
=/var/log # /var/log以下のチェック
ディレクトリ/ファイルのルール説明
!<ターゲット>指定したファイル/ディレクトリを検査しない
=<ターゲット>指定したファイル/ディレクトリを検査する(下層ファイル含まず)
<ターゲット> <ルール>指定したファイルやディレクトリは以下ヘルール適用

aideコマンド

# データベースの初期化
aide --init

# データベースのチェック
aide --check

# データベースの更新
aide --update
オプション説明
-C, –checkファイル改ざんチェック
–compareデータベースを比較
-Daide.confの書式チェック
-iデータベースの初期化
-uファイルの改ざんチェックとデータベースの更新

aideの設定

システムに AIDE を実装するには、データベースを初期化する必要がある。 データベースは/var/lib/aideディレクトリに作成される。

7.2.3. OpenSCAP

OpenSCAPはSCAPのOSSで拡張構成チェックリスト記述形式(XDDCF)を利用する脆弱性/セキュリティ設定監査ツールのこと。
このツールではシステムのセキュリティ対策の設定や、脆弱性対策をどこまで行っているかなどを診断・HTMLファイルとしてレポートすることができる。

なおOpenSCAPは自動化のための言語OVAL(Open Vulnerability and Assessment Language)とセキュリティ設定のチェックリストのフォーマットであるXCCDF(The Extensible Configuration Checklist Description Format)などに対応している。

7.2.4. Maldet

MaldetはLinux Malware Detect(LMD)とも呼ばれる、マルウェア検出ツールのこと。
検出対象とするファイルシステムの情報をあらかじめデータベース化し、チェックした情報を比較することで改ざんを検知する。

以下のような特徴を持つ。

  • 脅威を迅速に識別するためのMD5ファイルハッシュ検出
  • ClamAV(アンチウイルスソフトウェア)をスキャナエンジンとして統合
  • シグネチャ(マルウェア検体が持つバイトデータ)のアップデート機能
  • 脅威を安全に隔離・保存、脅威を取り除いた隔離ファイルの復元
  • マルウェアが挿入された文字列の削除を試行
  • cronによる日次のスキャン

標準ではインストールパッケージにcronスクリプトが含まれており、定期的にスキャンおよびシグネチャのアップデートが動作するよう設定されている。
動作設定は/etc/maldetect/conf.maldetで行う。

maldetコマンド

# スキャン
maldet -a
maldet --scan-all <ディレクトリ>

# レポート
maldet -e
オプション説明
-a, –scan-all指定したディレクトリを対象にすべてのファイルのスキャンを実施
-bコマンドをバックグラウンドで実行
-dmaldetctのバージョンアップデートを実施
-e検出されたマルウェアの情報を出力
-lログを表示
-q [スキャンID]マルウェアとして検出されたファイルに対して検疫を実施
-r [ディレクトリ] [日数]指定したディレクトリを対象に、指定した日数をさかのぼってスキャン
-s検出されたマルウェアをもとに戻す
-uマルウェアの署名をアップデート

7.2.5. ルートキットの検出

ルートキットはコンピュータへ侵入した後に、その活動や存在を隠蔽するためにシステムを改変し、侵入の形跡を隠滅してしまうソフトウェアのこと
ルートキットを検知するためのツールにはchkrootkitrkhunterがある。

chkrootkit

chkrootkit セキュリティスキャナは、システムが「ルートキット」に感染している兆候を検索できる。なおchkrootkitはrootkitを検出しても自動的に対処してくれるわけではないため、検出後は手動で処理する必要がある。

# ルートキットのチェック
chkrootkit

# ルートキットのチェック(冗長出力OFF)
chkrootkit -q
オプション説明
-dデバックモードでの実行
-l検査対象のコマンドの一覧を表示
-nNFSによりマウントされたディレクトリの検査をスキップ
-p [ディレクトリ]chkrootkitが使用するコマンドを格納したディレクトリを指定して実行
-r [ディレクトリ]指定したディレクトリをルートディレクトリとして実行
-xエクスポートモードでの実行
-Vchkrootkitのバージョンを表示

rkhunter

rkhunterはルートキット検知ツールで、マルウェア対策ソフトのように、定義データベースをアップデートすることで最新のrootkitに対応することができる。 設定ファイルは/etc/rkhunter.confとなる。

# /var/lib/rkhunter/db データベースの更新
rkhunter --update

# 保持されたデータファイルを現在値で更新
rkhunter --propupd

# ルートキットの検出
rkhunter --check --skip-keypress --report-warning-only
オプション説明
-cルートキットの検知を実行
-C設定ファイルをチェック
-Vrkhunterのバージョンを表示
–list [リスト対象]rkhunterが提供する機能のリストを表示
–propupd [アップデート対象]データベースの作成と反映
–updateデータベースのアップデート
–versioncheckrkhunterの最新バージョンを確認

7.2.6. Auditdによるシステム監査

ログ監査システムはシステムによって保存場所やソフトウェアが異なる。 以下は通常のOS以上のログファイルを扱うプログラムである。

  • syslog … /var/logにログを保存
  • systemd-journald

LinuxのOSシステム監査にはAuditシステムが使用される。
auditdというデーモンによって、ファイルアクセスやシステムコールの監視、ユーザの特定の操作、セキュリティイベントの記録、ネットワークアクセスの監視など、様々なイベントを監視することができる。

具体的に監視/記録できる項目は以下の通り。

  • ファイルアクセスの監視
  • システムコールの監視
  • ユーザログインの結果の記録
  • コマンド実行の記録

【Auditの主なコマンド】

コマンド説明
auditctlAuditの動作に関する設定/Auditルールの定義を行う
ausearchログファイルから特定の監査結果を検索する
aureportAuditログファイルから監査結果のレポートを作成する

【Auditの主な設定ファイル】

設定ファイル説明
/etc/audit/auditd.confAuditデーモンの設定ファイル
/etc/audit/audit.rulesAuditルールの定義ファイル

監査の構成と記録

Auditにおいて、監査のログ(Auditログ)や監査のルールを設定するには以下のファイルやauditctlコマンドを用いる。

  • /etc/audit/auditd.conf … Auditログ全般の設定(ログファイルやローテーションの頻度など)
  • /etc/audit/audit.rules … Auditルールを設定(永続的な設定)
  • auditctlコマンド … Auditルールを設定(一時的)

なお、これらルールによる監査の結果は、デフォルトでは/var/log/audit/audit.logへ出力される。

Auditルール

audit.rulesauditctlコマンドで設定するAuditルールには、以下の3つがある。

  • 制御ルール … Auditルールの動作設定
  • システムコールルール … システムコールの呼び出し
  • ファイルシステムルール … 特定ファイル/ディクトリへのアクセス

auditctlコマンド

auditctlはAuditシステムのカーネルコンポーネントを制御し、Auditシステムの設定やパラメータ設定が行えるコマンド
制御ルールの定義、ファイルシステムルール、およびシステムコールの定義の追加が追加ができる。なおauditdの再起動を行うとルールは削除されてしまう。

auditctl <オプション>
制御ルールのオプション説明
-b <値>Auditバッファの最大値
-e [0,1,2]監査設定(0:無効,1:有効,2:ロック)
-f [0,1,2]深刻なエラー時の挙動(0:何もなし,1:printkへ出力,2:カーネルパニック)
-r <メッセージ数>1秒あたりのメッセージ上限
-D全ルールの削除
-l現在の設定のリスト表示
-sAuditシステムのステータス表示
ファイルシステムルールに関するオプション説明
-w <パス>監査対象のファイル/ディレクトリ
-p <パーミッション>ログに記録するパーミッション設定(r:読み取り,w:書き込み,x:実行, a:属性変更)
-k <キーワード>ログエントリ参照時のキーワード
システムコールに関するオプション説明
-a [リスト, アクションリスト]リストおよびアクションの追加
-d <リスト,アクション>リスト/アクションの削除
-S <システムコール名>システムコール名または番号(全監視はall)
-F =アーキテクチャ/ユーザIDの条件に基づいてイベント照合する際の追加オプションを指定
-k <キーワード>ログエントリ参照時のキーワード
システムコールルールのアクション説明
always常に監査ログを記録
never監査ログの作成を行わない
システムコールルールのリスト説明
exclude特定イベントの除外
exitシステムコールの終了時
taskプロセス生成,プロセスコピー時
userアプリケーションイベントの対象にする

なお、システムコールの番号はusr/include/asm/unisted_64.hの参照、またはausyscallコマンドにより調べることができる。

# ファイルシステムルールの設定オプション
audtictl -w /etc/passwd -p wa -k identity

# ファイルシステムルールが変更されていることを確認
auditctl -l

# システムコールルールの設定オプション
auditctl -a always,exit -S adjtimax,settimeofday -F arch=b64 -k time-change

永続化ルールの設定

/etc/audit/audit.rulesファイルにルールを記載することに、システム再起動後の設定を維持できる。

その他のAuditユーティリティ

# Auditログファイル内のイベント検索
ausearch

# Auditログファイルに記録されたイベントについてサマリー/レポートの作成
aureport

# プログラム終了までシステム コールとプロセスを追跡できるコマンド
autrace

TTY入力の監視

各ユーザのTTY入力の監視の有効化はpam_tty_audit.soの設定を行う。 この設定によりユーザがどのコマンドを実行したかAuditログに記録できる。

監査の有効化は/etc/pam.d/password-auth/etc/pam.d/system-auth陛下のように定義する。

# rootのみ、TTY入力の監査を有効にする
session required pam_tty_audit.so diable=* enable=root

なお、結果はaureport --ttyで参照できる。

7.3. リソース制御

LinuxOSにはユーザが使用できるシステムリソース量を制限できる機能があり、制限にはulimitコマンドを用いる。

7.3.1. ulimitコマンド

シェルやシェルにより開始されるプロセスが使用できるリソースを制限できるコマンド。

ulimit -a
オプション説明
-a現在設定されている値を全て表示
-fシェルとその子によって書き込まれるファイルの最大サイズ
-t最大 CPU 時間 (秒単位)
-u1 人のユーザーが使用できるプロセスの最大数
-Tスレッドの最大数
-Hハードリミットの指定
-Sソフトリミットの指定

/etc/security/limits.conf

再起動時にulimitの設定を維持するには、/etc/security/limits.confでシステム全体に制限をかける必要がある。

なお制限方法は以下の2種類がある。

  • ソフトリミット … 現在有効なユーザーの利用可能なリソースの制限
  • ハードリミット … 実際の最大制限

7.3.2. pam_limits.so

pam_limits.soモジュールはユーザセッションで取得できるシステムリソースに制限を設定できるもの。

なおuid=0のユーザも影響を受ける。 またデフォルトに制限は構成ファイル/etc/security/limits.conf、次にディレクトリ/etc/security/limit.dの各ファイルが読み取られる。

# ======================================
## ユーザが作成可能なファイルサイズの制限
# ======================================
# ``/etc/security/limits.conf``の属性を編集
#<domain> <type> <item> <value>
*         soft   fsize  5120
*         hard   fsize  10240
# 一般ユーザでログインしulimitを実行(値の反映の確認)
ulimit -H -f
ulimit -S -f

制限可能なitemは以下の通り。

リソース説明
as最大仮想メモリ空間(KB)
core最大コアファイルサイズ(KB)
cpu最大CPU時間(分)
data最大データセグメントサイズ(KB)
fsize最大ファイルサイズ(KB)
maxlogins最大ログイン数(root以外)
memlockロック可能な最大メモリサイズ
nofileプロセス当たりのオープン可能な最大ファイルディスクリプタ数
nproc最大プロセス数
stack最大スタックサイズ(KB)

7.3.3. Cgroup

CgroupはRedHat系の機能でシステム上で実行されているユーザー定義のタスク (プロセス) グループ間で、CPU 時間、システム、メモリ、ネットワーク帯域幅、またはこれらのリソースの組み合わせなどのリソースを割り当てることができる仕組みのこと。

一言で言うとカーネル内の特定のサブシステムを制御するためのメカニズムといえる。

Cgroups V1(RHEL8以前)の仕組み

CgroupsはKubernetes、Docker等のコンテナ技術でも使用されている。 Cgroupにおいてデバイス、CPU,メモリ(RAM)、ネットワークアクセスなどのサブシステムはコントローラと呼ぶ。

コントローラのタイプ(Cpu,blkio,memoryなど)はツリー上に細分化され、各枝や葉には独自の重み/制限がある。 コントローラのグループは複数のプロセスが関連付けられているため、リソースしよるいつが細かくなっており微調整が容易となっている。

Cgropus

cgroup はリソースタイプごとに作成され、相互に関連付けはない。 つまり、すべてのコントローラにグループを関連付けることはできるが、グループは独立して扱われる

/proc/cgroups

コンピュータ上で有効なコントロールグループが確認できる。

cat /proc/cgroups

/sys/fs/group

sysfs経由でも確認できる。

ls -l  /sys/fs/group

コントロールグループに関する情報の取得

systemd-cglsコマンドで制御グループの階層を表示ができるsystemd-cgtopコマンドではのリソース消費をリアルタイムで監視できる

systemd-cgls

systemd-cgtop