2024/04/13

Landlock

Linuxでファイルシステムへのアクセス制限ができるlandlockのサンプルプログラムを試してみました。

詳細は https://qiita.com/nekoaddict/items/39125b8cd01da08b6a91 に詳しく書かれています。

Ubuntu22.04の5.15.0-84-genericでは https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/samples/landlock/sandboxer.c?id=81709f3dccacf4104a4bc2daa80bdd767a9c4c54のコードで動くことが分かりました。 このコードをローカルファイル sandboxer.c に保存して、

gcc -o sandboxer sandboxer.c
とすると、コンパイルができます。

例えば

LL_FS_RO="/usr:/etc:/home/username/.bashrc" LL_FS_RW="/dev/null" ./sandboxer bash -i
のようにすれば、
  • /usr
  • /etc
  • /home/username/.bashrc
以下のみ読み込み、
  • /dev/null
だけに書き込めるようになっている状態でCLIからいろいろ実行できるようになります。
$ ls
ls: ディレクトリ '.' を開くことが出来ません: 許可がありません
$ ls /usr
bin  games  include  lib  <以下省略>
$ echo aaa > a
bash: a: 許可がありません
最新のカーネルではネットワークアクセスも制御できるようですが、Ubuntu22.04のデフォルトではできないようです。