lxc-attach(1) lxc-attach(1)

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 دستور (command) مشخص‌شده را در داخل کانتینری که با name تعیین شده است اجرا می‌کند. کانتینر باید از قبل در حال اجرا باشد.

اگر هیچ command مشخص نشده باشد، شل پیش‌فرض فعلی کاربری که lxc-attach را اجرا کرده در داخل کانتینر جستجو شده و اجرا می‌شود. این کار در صورتی که چنین کاربری در کانتینر وجود نداشته باشد یا کانتینر سازوکار nsswitch کارآمدی نداشته باشد، با شکست مواجه خواهد شد.

نسخه‌های پیشین lxc-attach صرفاً به فضاهای نام (namespaces) مشخص‌شده یک کانتینر متصل می‌شدند و یک شل یا دستور تعیین‌شده را بدون تخصیص اولیه یک شبه‌ترمینال (pseudo-terminal) اجرا می‌کردند. این امر آن‌ها را در برابر جعل ورودی از طریق فراخوانی ioctl با دستور TIOCSTI پس از جابه‌جایی میان زمینه‌های اجرایی فضای کاربر با سطوح دسترسی متفاوت آسیب‌پذیر می‌کرد. نسخه‌های جدیدتر lxc-attach تلاش می‌کنند تا یک جفت توصیف‌گر فایل شبه‌ترمینال را روی میزبان تخصیص دهند و پیش از اجرای شل یا دستور، هرگونه توصیف‌گر فایل استانداردی را که به ترمینال اشاره دارد، به سمت کانتینر شبه‌ترمینال متصل کنند. توجه داشته باشید که اگر هیچ‌یک از توصیف‌گرهای فایل استاندارد به یک ترمینال اشاره نکنند، lxc-attach تلاشی برای تخصیص شبه‌ترمینال نخواهد کرد، بلکه صرفاً به فضاهای نام کانتینر متصل شده و شل یا دستور مشخص‌شده را اجرا می‌کند.

مشخص کردن فایل پیکربندی جهت تنظیم قابلیت‌های مجازی‌سازی و ایزولاسیون برای کانتینر.

در صورت وجود، این فایل پیکربندی حتی اگر از قبل یک فایل پیکربندی در کانتینر ایجاد‌شده (از طریق lxc-create) وجود داشته باشد، استفاده خواهد شد.

معماری‌ای را که هسته باید به نظر برسد دستور اجراشده تحت آن در حال اجراست تعیین می‌کند. این گزینه همان تنظیمات گزینه lxc.arch در فایل‌های پیکربندی کانتینر را می‌پذیرد؛ به lxc.conf(5) مراجعه کنید. به صورت پیش‌فرض، معماری فعلی کانتینر در حال اجرا استفاده خواهد شد.
هنگام اجرای command در داخل کانتینر، امتیازات و دسترسی‌ها را کاهش ندهد. در صورت مشخص شدن این گزینه، فرایند جدید به cgroup(های) کانتینر افزوده نخواهد شد (not) و پیش از اجرا قابلیت‌های خود را رها نخواهد کرد.

در صورتی که نمی‌خواهید همه دسترسی‌ها ارتقا یابند، می‌توانید آن‌ها را به صورت یک فهرست جداشده با خط عمودی (pipe)، مانند CGROUP|LSM مشخص کنید. مقادیر مجاز عبارتند از CGROUP، CAP و LSM که به ترتیب نمایانگر دسترسی‌های cgroup، قابلیت‌ها و محدودیت‌ها هستند. (نماد خط عمودی باید اسکیپ شود، مثلاً CGROUP\|LSM یا در نقل‌قول قرار گیرد، مانند "CGROUP|LSM".)

هشدار: اگر دستور اقدام به راه‌اندازی زیرفرایندهایی کند که پس از خاتمه فرایند اصلی متصل‌شده همچنان فعال بمانند، ممکن است دسترسی‌ها و امتیازات به داخل کانتینر نشت کنند. راه‌اندازی (یا راه‌اندازی مجدد) دیمون‌ها در داخل کانتینر مشکل‌ساز است، به ویژه اگر آن دیمون زیرفرایندهای زیادی ایجاد کند مانند cron یا sshd. با احتیاط بسیار زیاد استفاده شود.

فضاهای نامی را که باید به آن‌ها متصل شد به صورت یک فهرست جداشده با خط عمودی تعیین می‌کند، مانند NETWORK|IPC. مقادیر مجاز عبارتند از MOUNT، PID، UTSNAME، IPC، USER و NETWORK. این امکان را فراهم می‌سازد که زمینه فرایند مثلاً به فضای نام شبکه کانتینر تغییر یابد در حالی که سایر فضاهای نام همانند میزبان باقی بمانند. (نماد خط عمودی باید اسکیپ شود، مثلاً MOUNT\|PID یا درون نقل‌قول قرار گیرد، مانند "MOUNT|PID".)

مهم: این گزینه مستلزم -e است.

هنگام استفاده از -s و در صورتی که فضای نام mount گنجانده نشده باشد، این فلگ باعث می‌شود lxc-attach مسیرهای /proc و /sys را مجدداً متصل (remount) کند تا زمینه‌های دیگر فضاهای نام فعلی بازتاب داده شوند.

برای جزئیات بیشتر لطفاً بخش نکات را ببینید.

در صورتی که به هر حال به فضای نام mount متصل شوید، این گزینه نادیده گرفته خواهد شد.

محیط فعلی را برای برنامه‌های متصل‌شده حفظ می‌کند. این رفتار پیش‌فرض فعلی است (از نسخه 0.9)، اما احتمالاً در آینده تغییر خواهد کرد زیرا ممکن است اطلاعات ناخواسته را به کانتینر نشت دهد. اگر به در دسترس بودن متغیرهای محیطی برای برنامه متصل متکی هستید، برای اطمینان از سازگاری در آینده از این گزینه استفاده کنید. علاوه بر متغیرهای محیطی فعلی، مقدار container=lxc نیز تنظیم خواهد شد.
محیط را پیش از اتصال پاکسازی می‌کند تا هیچ متغیر محیطی ناخواسته‌ای به داخل کانتینر نشت نکند. متغیر container=lxc تنها متغیر محیطی خواهد بود که برنامه متصل‌شده با آن آغاز به کار می‌کند.
یک متغیر محیطی اضافی تنظیم می‌کند که توسط برنامه متصل‌شده در کانتینر قابل مشاهده است. این متغیر به شکل "VAR=VALUE" مشخص می‌شود و می‌توان چندین بار آن را تعیین کرد.
یک متغیر محیطی مشخص را حفظ می‌کند. این گزینه فقط در ترکیب با --clear-env قابل استفاده است و می‌توان آن را چندین بار تعیین کرد.
دستور command را با شناسه کاربری (مقدار عددی) uid در داخل کانتینر اجرا می‌کند.
دستور command را با شناسه گروهی (مقدار عددی) gid در داخل کانتینر اجرا می‌کند.

این گزینه‌ها میان بیشتر دستورات lxc مشترک هستند.

-?, -h, --help
نمایش پیام راهنمای کامل‌تر نسبت به حالت معمول.
نمایش پیام نحوه استفاده از دستور.
بی‌صدا کردن و جلوگیری از نمایش پیام‌های خروجی.
استفاده از یک مسیر جایگزین برای ذخیره کانتینر. مقدار پیش‌فرض /var/lib/lxc است.
هدایت خروجی گزارش‌ها به پرونده جایگزین FILE. حالت پیش‌فرض عدم ثبت لاگ در فایل است.
تنظیم اولویت ثبت گزارش‌ها روی LEVEL. اولویت پیش‌فرض لاگ‌ها ERROR است. مقادیر مجاز عبارتند از: FATAL، ALERT، CRIT، WARN، ERROR، NOTICE، INFO، DEBUG، TRACE.

توجه داشته باشید که این گزینه اولویت وقایع ثبت‌شده در پرونده لاگ جایگزین را تنظیم می‌کند و تاثیری بر وقایع ERROR چاپ‌شده در خروجی خطای استاندارد (stderr) ندارد.

استفاده از شناسه کانتینر NAME. قالب شناسه کانتینر یک رشته الفبایی-عددی است.
مشخص کردن فایل پیکربندی جهت تنظیم قابلیت‌های مجازی‌سازی و ایزولاسیون کانتینر.

در صورت وجود، این فایل پیکربندی حتی اگر از قبل یک فایل پیکربندی در کانتینر ساخته‌شده (از طریق lxc-create) وجود داشته باشد، استفاده خواهد شد.

نمایش شماره نسخه برنامه.

برای اجرای یک شل جدید در داخل یک کانتینر موجود، از دستور زیر استفاده کنید:

lxc-attach -n container

برای راه‌اندازی مجدد سرویس cron در یک کانتینر در حال اجرای دبیان، از دستور زیر استفاده کنید:

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

برای غیرفعال کردن پیوند شبکه eth1 در یک کانتینر در حال اجرا که فاقد قابلیت NET_ADMIN است، با فرض نصب بودن ابزار ip، از گزینه -e جهت استفاده از قابلیت‌های ارتقایافته استفاده کنید:

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

یا در غیر این صورت، از گزینه -s برای استفاده از ابزارهای نصب‌شده روی میزبان در خارج از کانتینر استفاده کنید:

lxc-attach -n container -s NETWORK -- /sbin/ip link delete eth1

اتصال کامل (شامل فضاهای نام pid و mount) به یک کانتینر نیازمند هسته نسخه 3.8 یا بالاتر، یا یک هسته وصله‌شده (پچ‌شده) است؛ لطفاً برای جزئیات به وب‌سایت lxc مراجعه کنید. در این صورت اگر از یک هسته وصله‌نشده نسخه 3.7 یا قبل‌تر استفاده شود، lxc-attach با شکست مواجه خواهد شد.

با این وجود، اگر از گزینه -s برای محدود کردن فضاهای نامی که فرایند قرار است به آن‌ها متصل شود به یک یا چند مورد از NETWORK، IPC و UTSNAME استفاده شود، روی هسته وصله‌نشده نسخه 3.0 یا بالاتر نیز موفقیت‌آمیز خواهد بود.

اتصال به فضاهای نام کاربری توسط هسته 3.8 یا بالاتر با فعال‌سازی فضای نام کاربری پشتیبانی می‌شود.

سیستم‌فایل‌های /proc و /sys در لینوکس حاوی اطلاعاتی درباره برخی مقادیر هستند که تحت تاثیر فضاهای نام قرار دارند، مانند دایرکتوری‌هایی که بر اساس شناسه فرایندها در /proc نام‌گذاری شده‌اند یا اطلاعات رابط شبکه در /sys/class/net. فضای نام فرایندی که شبه‌سیستم‌فایل‌ها را متصل (mount) می‌کند تعیین‌کننده اطلاعات نمایش‌داده‌شده است، not فضای نام فرایندی که به /proc یا /sys دسترسی پیدا می‌کند.

اگر از گزینه -s تنها برای اتصال به فضای نام pid یک کانتینر استفاده شود، اما به فضای نام mount آن (که حاوی /proc کانتینر است و نه میزبان) متصل نشود، محتویات /proc اطلاعات میزبان را بازتاب خواهد داد و نه کانتینر را. به همین ترتیب، هنگام خواندن محتویات /sys/class/net و اتصال تنها به فضای نام شبکه نیز همین مسئله رخ می‌دهد.

برای برطرف کردن این مشکل، فلگ -R این امکان را فراهم می‌کند که /proc و /sys مجدداً متصل (remount) شوند تا زمینه فضای نام شبکه/pid فرایند متصل‌شده را بازتاب دهند. برای جلوگیری از تداخل با سیستم‌فایل واقعی میزبان، پیش از انجام این کار، فضای نام mount از اشتراک خارج خواهد شد (مانند کاری که lxc-unshare انجام می‌دهد) که اساساً فضای نام mount جدیدی به فرایند می‌دهد که به جز سیستم‌فایل‌های /proc و /sys، با فضای نام mount میزبان یکسان است.

نسخه‌های پیشین 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)

2026-08-01