Provided by: libpam-cgfs_5.0.0~git2209-g5a7b9ce67-0ubuntu1.1_amd64 bug

NAME

       pam_cgfs - 非特権の LXC コンテナのための cgroup を管理する

SYNOPSIS

       pam_cgfs.so {-c kernel_controller,name=named_controller}

説明

       LXC  は LXC 1.0 以降、完全な非特権コンテナをサポートしてきました。完全な非特権コンテナは安
       全なコンテナであり、一般ユーザ(非 root)で実行できます。これはホスト上の特権のない UID と
       GID の範囲を、それとは異なるコンテナ内の UID と GID の範囲にマッピングするユーザ名前空間を
       使うことで実現しています。これは、コンテナ内の UID 0 (root)  が、コンテナの外では  1000000
       のような特権のないユーザ ID にマッピングされ、自身の所有するリソースに対してのみ権限を有す
       ることを意味します。

       完全な非特権コンテナの cgroup 管理は、このようなコンテナが使用するリソースを制限するという
       ことです。例えば、コンテナの  CPU 使用量を制限したり、コンテナ内で起動するプロセスの数を制
       限したり、コンテナが消費できるメモリを制限したりということです。  完全な非特権コンテナは一
       般ユーザによって実行され、コンテナ間のリソース消費を制限、管理する必要があるということは明
       らかです。 しかし、非特権での cgroup  管理はほとんどの  init  システムでは簡単ではありませ
       ん。 そこで、pam_cgfs.so が誕生したのです。

       pam_cgfs.so モジュールは、純粋な cgroupfs v1 (/sys/fs/cgroup/$controller) ツリーと、コント
       ローラのいくつかが cgroupfs v1 ツリー (/sys/fs/cgroup/$controller) で、それ以外が cgroupfs
       v2  (/sys/fs/cgroup/unified) ツリーと言ったようなミックスマウントを扱えます。 書き込み可能
       な cgroup がすべてのコントローラ用に作られます。また、引数で指定すれば、指定したコントロー
       ラのみ書き込み可能な  cgroup  が作られます。 純粋な cgroup v2 のみのマウントは pam_cgfs.so
       モジュールでは対象外です。

       作成された cgroup user/$user/n は cgroup カーネルコントローラ階層配下の n 番目のセッション
       用です。

       init   システムが  systemd  であるシステムは、cgroupfs  v1  と  v2  の両方が特別に扱われま
       す。cgroupfs    v1     と     v2     の両方に対して、このモジュールは     systemd     が既
       に、user.slice/user-$uid/session-n.scope を cgroup 内に作成しているかどうか、$uid == login
       uid であるかどうかをチェックします。もし $uid == login uid であるなら、session-n.scope  を
       ユーザに chown します。そうでなければ、前述のような cgroup (user/$user/n) が作成され、ログ
       イン uid で chown されます。 もし、init システムがすでにセッション特有のグループ内にログイ
       ンユーザーの cgroup を配置しているなら、pam_cgfs.so モジュールはそれを検出して再利用する機
       能を持っています。

       基本的には pam_cgfs.so  モジュールは、ログイン時に非特権(非  root)ユーザが書き込みできる
       cgroup  を配置し、ログアウト時にもその cgroup ツリーをクリーンアップする処理を行います。し
       たがって、必要に応じて提供されているリソースをコンテナに自由に委譲できます。

オプション

       -c controller-list
              カンマ(",")で区切られたカーネルコントローラと名前付きコントローラ(訳注: mount オ
              プションとして name オプションで名前を指定してマウントした cgroup v1 ツリー)のリス
              トを設定した文字列の引数を取ります。名前付きコントローラは  "name=$namedcontroller"
              の形で指定する必要があります。"all"  を指定して、すべての cgroup リソースコントロー
              ラーのツリーを有効にできます。"all"    と他のコントローラを同時に指定すると、明確に
              PAM_SESSION_ERR が返ります。

MODULE TYPES PROVIDED

       モジュールタイプとして session のみが提供されます(そして必要です)。

返り値

       PAM_SUCCESS
              ユーザ用の書き込み可能な cgroup が作成されました。

       PAM_SESSION_ERR
              ユーザ用の書き込み可能な cgroup の作成が失敗しました。

ファイル

       /etc/pam.d/common-session{,-noninteractive}
              これらのファイルの最後にデフォルト設定が追加されます。

       session optional        pam_cgfs.so -c freezer,memory,named=systemd
       # デフォルト設定
       # ユーザが書き込み可能な cgroup が freezer, memory, 名前付き cgroup "systemd" ツリー以下に作成されます。
       # freezer と memory に対しては /sys/fs/cgroup/$controller/user/$user/n
       # systemd に対しては /sys/fs/cgroup/systemd/user.slice/user-$uid/session-n.scope

       session optional        pam_cgfs.so -c all
       # すべての cgroup コントローラ以下にユーザが書き込み可能な cgroup が作成されます

       session optional        pam_cgfs.so -c all,memory,freezer
       # 不正な引数なので PAM_SESSION_ERR が返ります

SEE ALSO

       lxc-cgroup(1), cgroups(7), user_namespaces(7), namespaces(7), pam(8)

AUTHOR

       Venkata Harshavardhan Reddy Allu <venkataharshavardhan_ven@srmuniv.edu.in>

                                            2024-01-24                                pam_cgfs(8)