権限のないLXCコンテナとは何ですか?

権限のないLXCコンテナとは何ですか?

Linuxコンテナ(LXCコンテナ)を「権限なし」と言うとどういう意味ですか?

ベストアンサー1

権限のないLXCコンテナは、それを悪用するコンテナです。ユーザーネームスペース)。つまり、ホストのUID範囲を名前空間にマップできるカーネル関数です。~へUID 0 を持つユーザーが再び存在する可能性があります。

権限のないLXCコンテナに対する私の最初の考えとは異なり、これは権限のないホストユーザーがコンテナを所有しなければならないという意味ではありません。これは単なる可能性です。

関連事項は次のとおりです。

  1. ホストユーザーの一連の子UIDとGIDの定義(usermod [-v|-w|--add-sub-uids|--add-sub-gids]
  2. ...範囲はコンテナ構成(lxc.id_map = ...)にマップされます。

したがって、rootホスト上のコンテナプロセスの有効なUIDがマッピングによって定義された範囲内にあるため、権限のないコンテナを持つことも可能です。

ただし、rootまずスレーブIDを定義する必要があります。によって作成されたユーザーとは異なり、adduserrootID範囲はデフォルトでは定義されていません。

また、提供するフルスコープを使用できるため、次の構成行を使用して3つのコンテナーを持つことができます(UIDマッピングのみを表示)。

  1. lxc.id_map = u 0 100000 100000
  2. lxc.id_map = u 0 200000 100000
  3. lxc.id_map = u 0 300000 100000

気づく:コメントによると、最新バージョンではlxc.idmap

root100000から400000の間の依存UIDがあるとします。私が見つけたすべての文書では、コンテナごとに65536の子IDを使用することをお勧めしますが、一部は人が読みやすくするために100000を使用します。

つまり、すべてのコンテナに同じ範囲を割り当てる必要はありません。

40億(〜)以上のスレーブIDが可能であり2^32、これはホストユーザーのスレーブ範囲を処理するのに寛大であることを意味します。

ルートが所有して実行する権限のないコンテナ

もう一度こすります。権限のないLXCゲストは、ホスト上の権限のないユーザーが実行する必要はありません。

次のように、依存UID / GIDマッピングを使用してコンテナを構成します。

lxc.id_map = u 0 100000 100000
lxc.id_map = g 0 100000 100000

rootホストのユーザーが指定された範囲の子IDを持っている場合は、ゲストをより効果的に制限できます。

しかし、この場合、重要な追加の利点があります(はい、それが機能することを確認しました)。システムの起動時にコンテナを自動的に起動できます。

LXCに関する情報をWebで検索すると、権限のないLXCゲストは自動的に起動できないというメッセージがよく聞こえます。ただし、デフォルトでは、これはシステム全体のコンテナストア(通常は同じ/var/lib/lxc)にないコンテナでのみ機能します。もしそうなら(通常はルートによって生成され、ルートによって開始されたことを意味します)、それはまったく異なる話です。

lxc.start.auto = 1

コンテナ構成に入れると、操作はうまく行われます。

正しい権限と構成を取得する

私自身もこの問題に多少の困難を抱えており、ここにセクションを追加しました。

lxc.include通常、名前/usr/share/lxc/config/$distro.common.conf$distro展開名がある場合)として含まれる構成フラグメントに加えて、システムに存在することを確認して含める必要があります/usr/share/lxc/config/$distro.userns.conf。たとえば、

lxc.include = /usr/share/lxc/config/ubuntu.common.conf
lxc.include = /usr/share/lxc/config/ubuntu.userns.conf

スレーブ ID マッピングを追加します。

lxc.id_map = u 0 100000 65535
lxc.id_map = g 0 100000 65535

これはホストUID 100000root ~へLXCゲストのユーザーネームスペース。

次に、権限が正しいことを確認してください。ゲスト名が環境変数に保存されている場合は、$lxcguest次のコマンドを実行します。

# Directory for the container
chown root:root $(lxc-config lxc.lxcpath)/$lxcguest
chmod ug=rwX,o=rX $(lxc-config lxc.lxcpath)/$lxcguest
# Container config
chown root:root $(lxc-config lxc.lxcpath)/$lxcguest/config
chmod u=rw,go=r $(lxc-config lxc.lxcpath)/$lxcguest/config
# Container rootfs
chown 100000:100000 $(lxc-config lxc.lxcpath)/$lxcguest/rootfs
chmod u=rwX,go=rX $(lxc-config lxc.lxcpath)/$lxcguest/rootfs

これにより、最初の試行後にコンテナを実行でき、一部の権限関連のエラーが発生する可能性があります。

おすすめ記事