bionic (1) lxc-attach.1.gz

Provided by: lxc-utils_3.0.3-0ubuntu1~18.04.3_amd64 bug

NAME

       lxc-attach - 実行中のコンテナ内でプロセスの開始

SYNOPSIS

       lxc-attach {-n, --name name} [-f, --rcfile config_file] [-a, --arch arch] [-e, --elevated-privileges
                  privileges] [-s, --namespaces namespaces] [-R, --remount-sys-proc] [--keep-env] [--clear-env]
                  [-v, --set-var variable] [--keep-var variable] [-- command]

説明

       lxc-attachname で指定したコンテナ内で指定した command を実行します。 実行する時点でコンテナが実行中で
       なければなりません。

       もし command が指定されていない場合、lxc-attach  コマンドを実行したユーザのデフォルトシェルをコンテナ内で
       調べて実行します。 もしコンテナ内にユーザが存在しない場合や、コンテナで nsswitch 機構が働いていない場合は
       この動作は失敗します。

       前のバージョンの   lxc-attach   は、単に指定したコンテナの名前空間にアタッチし、最初に擬似端末    (pseudo
       terminal) を割り当てないで、シェルもしくは指定したコマンドを実行しました。 これは、異なる特権レベルを持つ
       ユーザ空間の実行コンテキストを切り替えた後に、TIOCSTI ioctl  の呼び出し経由で擬似入力を行うことに対して脆
       弱となります。  新しいバージョンの lxc-attach は、ホスト上の擬似端末のマスター/スレーブのペアを割り当てよ
       うとします。そしてシェルやコマンドを実行する前に、擬似端末のスレーブ側に対して、ターミナルを参照する標準
       ファイルディスクリプタをアタッチします。 ターミナルを参照する標準ファイルディスクリプタがない場合は、lxc-
       attach   は擬似端末の割り当てを行わないことに注意してください。代わりに、単にコンテナの名前空間にアタッチ
       し、シェルや指定したコマンドを実行します。

オプション

       -f, --rcfile config_file
              コンテナの仮想化、隔離機能の設定のための設定ファイルを指定します。

              (lxc-create 経由で) 前もってコンテナが作られた際の設定ファイルが既にあった場合でも、このオプション
              が指定された場合は、指定した設定ファイルが使用されます。

       -a, --arch arch
              コマンドを実行するコンテナのアーキテクチャを指定します。  このオプションは、コンテナの設定ファイル
              で指定する  lxc.arch オプションと同じものが使用可能です。 lxc.conf(5) を参照してください。デフォル
              トでは、実行しているコンテナのアーキテクチャになります。

       -e, --elevated-privileges privileges
              コンテナの内部で command を実行する時に特権を削除しません。 もしこのオプションが指定された場合、新
              しいプロセスはコンテナの  cgroup に追加 されず、実行する前にケーパビリティ (capability) も削除しま
              せん。

              全ての特権の取得したくない場合は、パイプで連結したリストとして、例えば CGROUP|LSM のように、特権を
              指定することが可能です。     指定できる値は、それぞれ     cgroup、ケーパビリティ、特権の制限を表す
              CGROUPCAPLSM です。 (パイプ記号を CGROUP\|LSM のようにエスケープするか、"CGROUP|LSM"  のように
              引用符号を付ける必要があります。)

              警告:  もし実行するコマンドが、アタッチするメインプロセスが終了した後も実行されたままのサブプロセ
              スを開始するような場合、このオプションの指定はコンテナ内への特権のリークとなる可能性があります。
              コンテナ内でのデーモンの開始(もしくは再起動)は問題となります。  デーモンが多数のサブプロセスを開始
              する cronsshd のような場合は特に問題となります。 充分な注意を払って使用してください。

       -s, --namespaces namespaces
              アタッチする名前空間をパイプで連結したリストで指定します。 例えば NETWORK|IPC のようにです。  ここ
              で使用可能な値は  MOUNT, PID, UTSNAME, IPC, USER , NETWORK です。 これにより指定した名前空間にプロ
              セスのコンテキストを変更できます。  例えばコンテナのネットワーク名前空間に変更する一方で、他の名前
              空間はホストの名前空間のままにするというような事が可能です。 (パイプ記号を MOUNT\|PID のようにエス
              ケープするか、"MOUNT|PID" のように引用符号を付ける必要があります。)

              重要: このオプションは -e オプションを指定しなくても指定している場合と同様の動作をします。

       -R, --remount-sys-proc
              -s を指定し、そこにマウント名前空間が含まれない時、このオプションにより  lxc-attach/proc/sys をリマウントします。 これは現在の他の名前空間のコンテキストを反映させるためです。

              もっと詳細な説明は 注意 を参照してください。

              このオプションは、マウント名前空間へのアタッチが行われる場合は無視されます。

       --keep-env
              アタッチされるプログラムに対して現在の環境を保持したままにします。  これは現在  (バージョン 0.9 時
              点) のデフォルトの動作ですが、将来は変更される予定です。  この動作がコンテナ内への望ましくない情報
              の漏洩につながる可能性があるためです。  アタッチするプログラムで環境変数が利用可能であることを期待
              している場合、将来的にもそれが保証されるようにこのオプションを使用するようにしてください。  現在の
              環境変数に加えて、container=lxc が設定されます。

       --clear-env
              アタッチする前に環境変数をクリアします。  これによりコンテナへの不要な環境変数の漏洩が起こらなくな
              ります。 変数 container=lxc のみがアタッチするプログラムの開始の時の環境変数となります。

       -v, --set-var variable
              コンテナにアタッチしたプログラムから見える環境変数を追加します。このオプションは "VAR=VALUE"  の形
              式で指定し、複数回指定できます。

       --keep-var variable
              --clear-env を指定した際に、クリアせずに保持したままにしたい環境変数を指定します。--clear-env と同
              時にしか使えません。複数回指定できます。

共通オプション

       ここで紹介するオプションは lxc コマンドの大部分で共通のものです。

       -?, -h, --help
              通常より長い使い方のメッセージを表示します。

       --usage
              使い方を表示します。

       -q, --quiet
              出力を抑制します。

       -P, --lxcpath=PATH
              デフォルトと別のコンテナパスを使用します。デフォルトは /var/lib/lxc です。

       -o, --logfile=FILE
              追加のログを FILE に出力します。デフォルトは出力しません。

       -l, --logpriority=LEVEL
              ログの優先度を LEVEL に設定します。デフォルトの優先度は ERROR です。以下の値を設定可能です: FATAL,
              CRIT, WARN, ERROR, NOTICE, INFO, DEBUG。

              このオプションは追加のログファイルへのイベントログの優先度の設定である事に注意してください。stderr
              への ERROR イベントのログには影響しません。

       -n, --name=NAME
              NAME という名前でコンテナを識別します。コンテナ識別子のフォーマットは英数字の文字列です。

       --rcfile=FILE
              コンテナの仮想化、隔離機能の設定のための設定ファイルを指定します。

              (lxc-create 経由で) 前もってコンテナが作られた際の設定ファイルが既にあった場合でも、このオプション
              が指定された場合は、指定した設定ファイルが使用されます。

       --version
              バージョン番号を表示します。

       存在するコンテナ内で新しいシェルを生成するには、以下のようにします。

                 lxc-attach -n container

       実行中の Debian コンテナの cron サービスを再起動するには、以下のように実行します。

                 lxc-attach -n container -- /etc/init.d/cron restart

       NET_ADMIN  ケーパビリティを持たない実行中のコンテナのネットワークインターフェース eth1 の動作を停止させる
       には、ケーパビリティを増加させるために -e オプションを指定し、ip ツールがインストールされていることを前提
       に、以下のように実行します。

                 lxc-attach -n container -e -- /sbin/ip link delete eth1

互換性

       (pid  とマウント名前空間を含む) コンテナに対する完全なアタッチを行うには 3.8 以上、もしくはパッチを適用し
       たカーネルが必要となります。 詳しくは lxc のウェブサイトを参照してください。  パッチが当たっていない  3.8
       より小さなバージョンのカーネルを使った場合は、lxc-attach の実行は失敗するでしょう。

       しかし、もし  -s を使用して、アタッチするものを NETWORK, IPC, UTSNAME の 1 つか複数の名前空間に限定して使
       用すれば、バージョン 3.0 以上のパッチを適用していないカーネルでもアタッチが成功するでしょう。

       ユーザ名前空間へのアタッチは、ユーザ名前空間機能を有効にした 3.8 以上のカーネルでサポートされます。

注意

       Linux の /proc/sys ファイルシステムは名前空間によって影響を受けるある程度の情報を持っています。  これ
       は  /proc 内のプロセス ID の名前のディレクトリや、/sys/class/net 内のネットワークインターフェース名のディ
       レクトリなどです。 擬似ファイルシステムをマウントしているプロセスの名前空間が、どのような情報を表示するか
       を決定します。 /proc/sys にアクセスしているプロセスの名前空間が決定するのではありません。

       -s を使ってコンテナの pid 名前空間のみをアタッチし、マウント名前空間 (これはコンテナの /proc を含み、ホス
       トのは含まないでしょう) はアタッチしない場合、/proc  のコンテンツはコンテナのものではなく、ホストのものと
       なります。  似たような事例として、ネットワーク名前空間のみをアタッチして、/sys/class/net のコンテンツを読
       んだ場合も同じような事が起こるでしょう。

       この問題への対処のために、-R オプションが /proc/sys が提供されています。 これにより、アタッチするプロ
       セスのネットワーク/pid 名前空間のコンテキストを反映させることができます。ホストの実際のファイルシステムに
       影響を与えないために、実行前にはマウント名前空間は  unshare  されます   (lxc-unshare   のように)。   これ
       は、/proc/sys ファイルシステム以外はホストのマウント名前空間と同じである、新しいマウント名前空間がプ
       ロセスに与えられるということです。

       以前のバージョンの lxc-attach は、いくつかの重要なサブシステムに対して、書き込み可能な cgroup  内に配置す
       ることなしに、ユーザがコンテナの名前空間にアタッチできたバグがありました。  新しいバージョンの lxc-attach
       は、このような重要なサブシステムに対して、ユーザが書き込み可能な  cgroup   内にいるかどうかをチェックしま
       す。 したがって、ユーザによっては lxc-attach は不意に失敗するかもしれません (例えば、非特権ユーザが、ログ
       イン時に重要であるサブシステムの書き込み可能な cgroup に配置されていないようなシステムで)。しかし、この振
       る舞いは正しく、よりセキュアです。

セキュリティ

       -e-s オプションの使用には注意を払うべきです。 不適切に使用した場合、コンテナの隔離を破壊してしまう可
       能性があります。

SEE ALSO

       lxc(7), lxc-create(1),  lxc-copy(1),  lxc-destroy(1),  lxc-start(1),  lxc-stop(1),  lxc-execute(1),  lxc-
       console(1),  lxc-monitor(1),  lxc-wait(1),  lxc-cgroup(1),  lxc-ls(1),  lxc-info(1),  lxc-freeze(1), lxc-
       unfreeze(1), lxc-attach(1), lxc.conf(5)

作者

       Daniel Lezcano <daniel.lezcano@free.fr>

                                                   2023-05-05                                      lxc-attach(1)