tokuhirom's blog

jailing を golang に移植した

なぜ golang に移植したかというとまあ以下のような理由です。

https://github.com/tokuhirom/jailingo/

  • capabilities で制御したかった
    • jailing は perl で記述されているために、setuid/setcap などで制御することが難しい
    • 今時 suid-perl 使うのもなあ、という。
  • C で書くと getopt の処理とかだるい
  • C++ で書くと、ビルドとかで悩むのがめんどい
  • golang は segv しにくくて楽

golang で記述することにより、良い面もあるが一方で、普通に golang で記述すると、clone() したあとに処理を挟むことができないので、CLONE_NEWPID | CLONE_NEWNS とかしたあとに mount したいという要望が叶えられない。ので、いったん /proc/self/exec を実行しなおして、procfs をマウントしてから子プロセスを起動する、みたいな処理が必要になってしまう。ちょっと面倒。

と、一応書いてみたが、実際には proot を利用しているのだった。


↑↑ 結局、proot 遅すぎたので jailingo 使うようにした。

Created: 2016-07-17 10:45:52 +0000
Updated: 2016-07-17 10:45:52 +0000