一般ユーザーの権限で実行できるコンテナのことを rootless コンテナと言います. Rootless コンテナを使うと, コンテナ内では root ユーザーとほぼ同じ権限を持つ一方で, コンテナの外では一般ユーザーの権限しか持たないようなプロセスを実行することができます. Rootless コンテナは, user namespace の機能を使用して実装します. User namespace とは, user ID, group ID, capabilities などのセキュリティに関連する属性を管理する namespace です.
clone(2)
を使って新しい user namespace 内に子プロセスを作成することができます. clone
には次の 4 つの引数を渡します.
fn
: 子プロセスのエントリーポイントとなる関数.void
のポインタを受け取り,int
を返す必要があります.stack
: 子プロセスがスタックとして使うメモリ領域の底を指すポインタ.flags
: 挙動を変更するフラグ.