lxc-attach
章节: (1)更新: 2021-06-03
索引 返回主内容
名称
lxc-attach - 在运行的容器内启动一个进程。语法
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] [-u, --uid uid] [-g, --gid gid] [-- command]描述
lxc-attach 在由 name 指定的容器内运行指定的 command。容器必须已经处于运行状态。如果未指定 command,则会在容器内查找运行 lxc-attach 的用户的当前默认 shell 并执行。如果容器内不存在这样的用户,或者容器没有正常工作的 nsswitch 机制,则此操作将失败。
lxc-attach 的早期版本只是附加到容器的指定命名空间并运行 shell 或指定的命令,而没有首先分配伪终端。这使得它们容易受到在具有不同权限级别的用户空间执行上下文之间切换后,通过 TIOCSTI ioctl 调用进行的输入伪造的攻击。较新的 lxc-attach 版本会在主机上尝试分配一对伪终端文件描述符,并在执行 shell 或命令之前将任何引用终端的标准文件描述符附加到伪终端的容器端。请注意,如果标准文件描述符都不引用终端,lxc-attach 将不会尝试分配伪终端。相反,它只会附加到容器的命名空间并运行 shell 或指定的命令。
选项
- -f, --rcfile config_file
- 指定配置文件来配置容器的虚拟化和隔离功能。
如果存在此配置文件,即使之前创建的容器中(通过 lxc-create)已经存在配置文件,它也会被使用。
- -a, --arch arch
- 指定内核应该显示为正在运行的架构,以供执行的命令使用。此选项将接受与容器配置文件中的 lxc.arch 选项相同的设置,请参阅 lxc.conf(5)。默认情况下,将使用正在运行的容器的当前架构。
- -e, --elevated-privileges privileges
- 在容器内运行 command 时不降低权限。如果指定此选项,则新进程将不会添加到容器的 cgroup(s) 中,并且在执行之前不会降低其功能。
如果不想提升所有权限,可以将权限指定为以管道分隔的列表,例如 CGROUP|LSM。允许的值为 CGROUP、CAP 和 LSM,分别代表 cgroup、功能和限制权限。(管道符号需要转义,例如 CGROUP\|LSM 或加引号,例如 "CGROUP|LSM"。)
警告:如果命令启动在主进程终止后仍然处于活动状态的子进程,这可能会将权限泄漏到容器中。在容器内(重新)启动守护进程存在问题,特别是如果守护进程启动了许多子进程,例如 cron 或 sshd。请谨慎使用。
- -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 结合使用,并且可以多次指定。
- --u, --uid uid
- 在容器内以用户 ID uid 执行 command。
- --g, --gid gid
- 在容器内以组 ID gid 执行 command。
常用选项
这些选项对于大多数 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
- 显示版本号。
示例
要生成在现有容器内运行的新 shell,请使用
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
或者,或者使用 -s 来使用容器外部主机上安装的工具
lxc-attach -n container -s NETWORK -- /sbin/ip link delete eth1
兼容性
完全附加(包括 pid 和挂载命名空间)到容器需要 3.8 或更高版本的内核,或已修补的内核,有关详细信息,请参阅 lxc 网站。如果与 3.7 及更早版本的未修补内核一起使用,lxc-attach 将在此情况下失败。但是,如果使用 -s 选项将进程要附加到的命名空间限制为 NETWORK、IPC 和 UTSNAME 中的一个或多个,它将在 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 命名空间上下文。为了不干扰主机的实际文件系统,在此之前将取消共享挂载命名空间(就像 lxc-unshare 所做的那样),本质上为进程提供了一个新的挂载命名空间,除了 /proc 和 /sys 文件系统之外,它与主机的挂载命名空间相同。
lxc-attach 的早期版本存在一个错误,用户可以在没有被放置在某些关键子系统的可写 cgroup 中的情况下附加到容器的命名空间。较新的 lxc-attach 版本将检查用户是否在这些关键子系统的可写 cgroup 中。因此,lxc-attach 可能会对某些用户意外失败(例如,在系统上,非特权用户在登录时未被放置在关键子系统的可写 cgroup 中)。但是,此行为是正确的,并且更安全。
安全
应谨慎使用 -e 和 -s 选项,因为如果使用不当,它可能会破坏容器的隔离。另请参阅
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>
索引
此文档由 man2html 使用手册页创建。
时间: 2024年11月3日,格林威治标准时间04:45:10