Landlock
Linux 5.13で導入された、非特権プロセスが「自分自身とその将来の子プロセス」に対してアクセス制御を自己適用できる仕組み。landlock(7)。積み重ね可能なLSMとして実装されている。 #linux #security
setuidやcapabilitiesとの方向性の違い
setuidやcapabilitiesが「他人・他プロセスに権限を与える/絞る」仕組みなのに対し、Landlockは「自分自身の権限を自分で絞る」方向の仕組み。root権限もCAP_SYS_ADMINのような特別なcapabilityも必要とせず、非特権プロセスが単独で利用できる点が特徴。ブラウザのレンダラープロセスのような「信頼できない入力を処理する部分を自己隔離する」用途に向く。
使い方
3つのシステムコールで構成される。
landlock_create_ruleset(2)— 新しいルールセットを作るlandlock_add_rule(2)— ルールセットにルールを追加する(例: 「特定のディレクトリ配下は読み取り専用」)landlock_restrict_self(2)— ルールセットを呼び出し元スレッドに強制する
ルールはファイル階層(パス)に紐づく形で「あるオブジェクトに対して許可するアクセス権」を表現する。一度landlock_restrict_self(2)で適用すると、その制限を自分で緩めることはできない。
Linuxの権限分離・権限昇格の仕組みの中での位置づけ
setuidやcapabilitiesが「他者に権限を与える」方向なのに対し、Landlockとseccompは「自分自身の権限を絞る」方向。両者の違いは、seccompがシステムコール単位のフィルタなのに対し、Landlockはファイルパスのようなオブジェクト単位でルールを表現できる点。
出典
man 7 landlock