タラバガニー設計局stalins.clubNOTE/notes/landlock-unprivileged-sandbox

Landlockは非特権プロセス自身が権限を削るLSM

Landlockは、Linux Security Module (LSM) の1つで、非特権プロセスが自分自身とその子孫の権限を狭めるための仕組みである。

SELinuxやAppArmorのようなシステム全体のポリシーとは役割が違う。Landlockのrulesetは既存のDACや他のLSMに追加して制約を積み重ねる。プロセス自身が利用できるため、専用daemonやroot権限を必須としないのが特徴である。

LandlockはLinux 5.13で導入された。当初は主にfilesystem制約だったが、その後ABIが拡張され、2026年8月時点の最新kernel documentationではABI 10まで記載されている。

主な追加機能には次のようなものがある。

  • ABI 2: rename/linkを扱う LANDLOCK_ACCESS_FS_REFER
  • ABI 3: file truncate制御
  • ABI 4: TCP bind/connectのport制御
  • ABI 5: device ioctl(2) 制御
  • ABI 8: rulesetをthread group全体に適用するTSYNC
  • ABI 9: pathname UNIX domain socketの接続制御
  • ABI 10: UDP bind/connect/sendの制御、audit log抑制の細粒度化

この進化によって、「特定directoryだけwrite可」「外向きnetworkを限定」「UNIX socketへの到達を制限」といったprocess sandboxをkernel側でかなり表現できるようになってきた。

ただしLandlockはVMやuserspace kernelではない。sandbox対象のprocessは依然としてhost Linux kernelを直接利用する。したがって、host kernelをsecurity boundaryから外したい用途では gVisorはユーザー空間カーネルでhost kernel syscall面を減らすKata Containers 4.0はOCI UXのままVM境界を使う のような別方式が必要になる。

また、実装は実行中kernelのLandlock ABIを確認し、対応しているaccess rightだけを有効にする必要がある。kernel documentationも、異なるkernel versionで動くuser spaceについてruntimeでABIを検出するbest-effort方式を推奨している。

Landlockをseccompと組み合わせてprocess sandboxを構成する例は SandlockはLandlockとseccompを組み合わせた軽量プロセスsandbox を参照。全体の位置付けは Linuxサンドボックスの隔離境界をどう捉えるか

#security

出典

▸ ノート一覧に戻る