NSENTER(1) دستورات کاربر NSENTER(1)

nsenter - اجرای برنامه در فضاهای نام (Namespaces) سایر پردازه‌ها

nsenter [options] [program [arguments]]

دستور nsenter برنامه program را در فضای(های) نام مشخص‌شده در گزینه‌های خط فرمان (توصیف‌شده در ادامه) اجرا می‌کند. اگر program داده نشده باشد، "${SHELL}" اجرا می‌شود (پیش‌فرض: /bin/sh).

فضاهای نام قابل ورود عبارتند از:

فضای نام سوارکردن (mount namespace)

سوار کردن و پیاده کردن سیستم‌های فایل روی سایر بخش‌های سیستم تأثیری نخواهد گذاشت، به جز سیستم‌های فایلی که صراحتاً به عنوان اشتراکی علامت‌گذاری شده‌اند (با mount --make-shared؛ پرچم shared را در /proc/self/mountinfo ببینید). برای جزئیات بیشتر، mount_namespaces(7) و بحث درباره پرچم CLONE_NEWNS در clone(2) را ببینید.

فضای نام UTS (UTS namespace)

تنظیم نام میزبان (hostname) یا نام دامنه (domainname) روی سایر بخش‌های سیستم تأثیری نخواهد گذاشت. برای جزئیات بیشتر، uts_namespaces(7) را ببینید.

فضای نام IPC (IPC namespace)

پردازه دارای فضای نام مستقلی برای صف‌های پیام POSIX و همچنین صف‌های پیام System V، مجموعه‌های سمافور و بخش‌های حافظه اشتراکی خواهد بود. برای جزئیات بیشتر، ipc_namespaces(7) را ببینید.

فضای نام شبکه (network namespace)

پردازه دارای پشته‌های مستقل IPv4 و IPv6، جدول‌های مسیریابی IP، قوانین دیوار آتش (firewall)، درخت‌های دایرکتوری /proc/net و /sys/class/net، سوکت‌ها و غیره خواهد بود. برای جزئیات بیشتر، network_namespaces(7) را ببینید.

فضای نام PID (PID namespace)

فرزندان مجموعه‌ای از نگاشت‌های PID به پردازه جدا از پردازه nsenter خواهند داشت. به طور پیش‌فرض در صورت تغییر فضای نام PID، دستور nsenter اقدام به fork می‌کند تا برنامه جدید و فرزندانش در یک فضای نام PID یکسان سهیم بوده و برای یکدیگر قابل مشاهده باشند. در صورت استفاده از --no-fork، برنامه جدید بدون fork کردن اجرا (exec) خواهد شد. برای جزئیات بیشتر، pid_namespaces(7) را ببینید.

فضای نام کاربر (user namespace)

پردازه مجموعه‌ای متمایز از UIDها، GIDها و قابلیت‌ها (capabilities) خواهد داشت. برای جزئیات بیشتر، user_namespaces(7) را ببینید.

فضای نام cgroup (cgroup namespace)

پردازه نمایی مجازی‌سازی‌شده از /proc/self/cgroup خواهد داشت و سوارکردن‌های cgroup جدید از ریشه cgroup فضای نام سرچشمه خواهند گرفت. برای جزئیات بیشتر، cgroup_namespaces(7) را ببینید.

فضای نام زمان (time namespace)

پردازه می‌تواند نمایی متمایز از CLOCK_MONOTONIC و/یا CLOCK_BOOTTIME داشته باشد که با استفاده از /proc/self/timens_offsets قابل تغییر است. برای جزئیات بیشتر، time_namespaces(7) را ببینید.

اگر می‌خواهید یک فضای نام جدید ایجاد کنید، از unshare(1) استفاده کنید. پس از ایجاد، می‌توانید با استفاده از nsenter برنامه‌ای را در آن اجرا کنید.

بسیاری از گزینه‌های زیر که به فضاهای نام مربوط می‌شوند، یک آرگومان اختیاری file می‌پذیرند. این آرگومان باید یکی از فایل‌های /proc/[pid]/ns/* توصیف‌شده در namespaces(7) یا نام مسیر یک اتصال سوارکردن (bind mount) باشد که روی یکی از آن فایل‌ها ایجاد شده است.

-a, --all

ورود به تمام فضاهای نام پردازه هدف با استفاده از مسیرهای پیش‌فرض فضای نام /proc/<pid>/ns/*. مسیرهای پیش‌فرض فضاهای نام پردازه هدف را می‌توان با گزینه‌های مختص فضای نام بازنویسی کرد (به عنوان مثال، --all --mount=path).

اگر فضای نام کاربر با فضای نام کاربر فعلی فراخوان‌کننده یکسان باشد، نادیده گرفته خواهد شد. این کار از بازپس‌گیری قابلیت‌ها (capabilities) توسط فراخوان‌کننده‌ای که آن‌ها را رها کرده است، از طریق فراخوانی setns(2) جلوگیری می‌کند. برای جزئیات بیشتر به صفحه راهنما مراجعه کنید.

-t, --target PID[:inode]

مشخص کردن یک پردازه هدف برای دریافت زمینه‌ها (contexts) از آن. مسیرهای زمینه‌های مشخص‌شده توسط PID به ترتیب عبارتند از:

/proc/pid/ns/mnt

فضای نام سوارکردن

/proc/pid/ns/uts

فضای نام UTS

/proc/pid/ns/ipc

فضای نام IPC

/proc/pid/ns/net

فضای نام شبکه

/proc/pid/ns/pid

فضای نام PID

/proc/pid/ns/user

فضای نام کاربر

/proc/pid/ns/cgroup

فضای نام cgroup

/proc/pid/ns/time

فضای نام زمان

/proc/pid/root

دایرکتوری ریشه

/proc/pid/cwd

به ترتیب دایرکتوری کاری

به صورت اختیاری، یک پردازه می‌تواند با آن قالب PID:inode آدرس‌دهی شود. مقدار inode توصیف‌کننده فایل (file descriptor) یکتای پردازه را مشخص می‌کند. برای بازیابی شماره inode یک پردازه می‌توانید از ابزار getino(1) استفاده کنید.

-m, --mount[=file|=:nsid]

ورود به فضای نام سوارکردن. اگر هیچ آرگومانی مشخص نشود، به فضای نام سوارکردن پردازه هدف وارد می‌شود. اگر file یا :nsid مشخص شده باشد، به فضای نام سوارکردن مشخص‌شده توسط file یا nsid وارد می‌شود.

-u, --uts[=file|=:nsid]

ورود به فضای نام UTS. اگر هیچ آرگومانی مشخص نشود، به فضای نام UTS پردازه هدف وارد می‌شود. اگر file یا :nsid مشخص شده باشد، به فضای نام UTS مشخص‌شده توسط file یا nsid وارد می‌شود.

-i, --ipc[=file|=:nsid]

ورود به فضای نام IPC. اگر هیچ آرگومانی مشخص نشود، به فضای نام IPC پردازه هدف وارد می‌شود. اگر file یا :nsid مشخص شده باشد، به فضای نام IPC مشخص‌شده توسط file یا nsid وارد می‌شود.

-n, --net[=file|=:nsid]

ورود به فضای نام شبکه. اگر هیچ آرگومانی مشخص نشود، به فضای نام شبکه پردازه هدف وارد می‌شود. اگر file یا :nsid مشخص شده باشد، به فضای نام شبکه مشخص‌شده توسط file یا nsid وارد می‌شود.

-N, --net-socket fd

ورود به فضای نام شبکه سوکت پردازه هدف. این گزینه نیازمند مشخص بودن پردازه --target است. از لینوکس ۵.۶ به بعد پشتیبانی می‌شود.

-p, --pid[=file|=:nsid]

ورود به فضای نام PID. اگر هیچ آرگومانی مشخص نشود، به فضای نام PID پردازه هدف وارد می‌شود. اگر file یا :nsid مشخص شده باشد، به فضای نام PID مشخص‌شده توسط file یا nsid وارد می‌شود.

-U, --user[=file|=:nsid]

ورود به فضای نام کاربر. اگر هیچ آرگومانی مشخص نشود، به فضای نام کاربر پردازه هدف وارد می‌شود. اگر file یا :nsid مشخص شده باشد، به فضای نام کاربر مشخص‌شده توسط file یا nsid وارد می‌شود. همچنین گزینه‌های --setuid و --setgid را ببینید.

--user-parent

ورود به فضای نام والد کاربر. فضای نام والد کاربر از هر فضای نام فعال دیگری دریافت خواهد شد. اگر با گزینه --user ترکیب شود، فضای نام والد کاربر از فضای نام کاربر دریافت شده و جایگزین آن خواهد شد.

-C, --cgroup[=file|=:nsid]

ورود به فضای نام cgroup. اگر هیچ آرگومانی مشخص نشود، به فضای نام cgroup پردازه هدف وارد می‌شود. اگر file یا :nsid مشخص شده باشد، به فضای نام cgroup مشخص‌شده توسط file یا nsid وارد می‌شود.

-T, --time[=file|=:nsid]

ورود به فضای نام زمان. اگر هیچ آرگومانی مشخص نشود، به فضای نام زمان پردازه هدف وارد می‌شود. اگر file یا :nsid مشخص شده باشد، به فضای نام زمان مشخص‌شده توسط file یا nsid وارد می‌شود.

-G, --setgid gid

تنظیم شناسه گروهی (GID) که در فضای نام واردشده استفاده خواهد شد و رها کردن گروه‌های تکمیلی (supplementary groups). دستور nsenter همواره GID را برای فضاهای نام کاربر تنظیم می‌کند که پیش‌فرض آن 0 است. اگر آرگومان "follow" مشخص شود، از GID پردازه هدف استفاده می‌شود.

-S, --setuid uid

تنظیم شناسه کاربری (UID) که در فضای نام واردشده استفاده خواهد شد. دستور nsenter همواره UID را برای فضاهای نام کاربر تنظیم می‌کند که پیش‌فرض آن 0 است. اگر آرگومان "follow" مشخص شود، از UID پردازه هدف استفاده می‌شود.

--keep-caps

هنگامی که گزینه --user داده شده باشد، تضمین می‌کند که قابلیت‌های اعطاشده در فضای نام کاربر در پردازه فرزند حفظ شوند.

--preserve-credentials

هنگام ورود به فضای نام کاربر، UID و GID را تغییر نده. پیش‌فرض این است که گروه‌های تکمیلی رها شده و GID و UID روی 0 تنظیم شوند.

-r, --root[=directory]

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

-w, --wd[=directory]

تنظیم دایرکتوری کاری. اگر هیچ دایرکتوری مشخص نشود، دایرکتوری کاری روی دایرکتوری کاری پردازه هدف تنظیم می‌شود. اگر دایرکتوری مشخص شود، دایرکتوری کاری روی دایرکتوری مشخص‌شده تنظیم می‌شود. دایرکتوری directory مشخص‌شده قبل از جابجایی به فضاهای نام درخواستی باز می‌شود، به این معنی که دایرکتوری مشخص‌شده به عنوان یک "تونل" به فضای نام فعلی عمل می‌کند. همچنین --wdns را ببینید.

-W, --wdns[=directory]

تنظیم دایرکتوری کاری. دایرکتوری directory پس از جابجایی به فضاهای نام درخواستی و پس از فراخوانی chroot(2) باز می‌شود. گزینه‌های --wd و --wdns مانعة‌الجمع هستند.

-e, --env

انتقال متغیرهای محیطی از پردازه هدف به پردازه جدیدی که در حال ایجاد است. اگر این گزینه ارائه نشود، متغیرهای محیطی همانند فضای نام فعلی باقی خواهند ماند.

-F, --no-fork

قبل از اجرای (exec) برنامه مشخص‌شده fork نکن. به طور پیش‌فرض، هنگام ورود به یک فضای نام PID، دستور nsenter قبل از فراخوانی exec اقدام به fork می‌کند تا تمام فرزندان نیز در فضای نام PID تازه‌واردشده قرار گیرند.

-Z, --follow-context

تنظیم زمینه امنیتی SELinux مورد استفاده برای اجرای پردازه جدید بر اساس پردازه در حال اجرایی که توسط --target PID مشخص شده است. (بسته util-linux باید با پشتیبانی از SELinux کامپایل شده باشد، در غیر این صورت این گزینه در دسترس نخواهد بود.)

-c, --join-cgroup

افزودن پردازه آغازشده به cgroup پردازه هدف.

-h, --help

نمایش متن راهنما و خروج.

-V, --version

نمایش نسخه و خروج.

گزینه --user-parent به لینوکس ۴.۹ یا بالاتر نیاز دارد؛ هسته‌های قدیمی‌تر خطای «ioctl نامناسب برای دستگاه» (inappropriate ioctl for device) صادر می‌کنند.

مشخص کردن فضاهای نام بر اساس nsid نیازمند لینوکس ۶.۱۹ یا بالاتر است. اگر نام file فضای نام با دو نقطه (colon) شروع شود، برای رفع ابهام ./ را به ابتدای آن اضافه کنید.

Eric Biederman <biederm@xmission.com>, Karel Zak <kzak@redhat.com>

unshare(1), lsns(8), clone(2), setns(2), namespaces(7), getino(1)

برای گزارش باگ‌ها از ردیاب مشکلات https://github.com/util-linux/util-linux/issues. استفاده کنید.

دستور nsenter بخشی از بسته util-linux است که می‌توان آن را از آرشیو هسته لینوکس https://www.kernel.org/pub/linux/utils/util-linux. دریافت کرد.

2026-09-02 util-linux 2.42.3