podman-unshare(1) General Commands Manual podman-unshare(1)

podman-unshare - اجرای یک دستور درون فضای نام کاربری تغییریافته

podman unshare [گزینه‌ها] [دستور]

فرایندی را (به‌طور پیش‌فرض، $SHELL) درون یک فضای نام کاربری (user namespace) جدید اجرا می‌کند. این فضای نام کاربری به‌گونه‌ای پیکربندی می‌شود که شناسه کاربری (UID) و شناسه گروهی اصلی (GID) کاربر فراخواننده به ترتیب برابر با UID 0 و GID 0 به نظر برسند. هر محدوده‌ای که با آن کاربر و گروه در /etc/subuid و /etc/subgid مطابقت داشته باشد نیز به کمک برنامه‌های کمکی newuidmap(1) و newgidmap(1) با همان هویت خودشان نگاشت می‌شوند.

دستور podman unshare برای عیب‌یابی عملیات‌های بدون دسترسی ریشه (unprivileged) و برای پاکسازی دستی فضای ذخیره‌سازی و سایر داده‌های مربوط به ایمیج‌ها و کانتینرها مفید است.

همچنین برای استفاده از دستور podman mount کاربرد دارد. اگر یک کاربر غیرریشه بخواهد کانتینری را سوار کرده و با آن کار کند، باید podman unshare را اجرا نماید. اجرای podman mount برای کاربران غیرریشه با شکست مواجه می‌شود مگر اینکه کاربر درون یک نشست podman unshare در حال اجرا باشد.

نشست unshare دو متغیر محیطی را تعریف می‌کند:

  • CONTAINERS_GRAPHROOT: مسیر داده‌های پایدار (persistent) کانتینر.
  • CONTAINERS_RUNROOT: مسیر داده‌های موقت و فرار (volatile) کانتینر.

مهم: این دستور در کلاینت ریموت پادمن در دسترس نیست.

چاپ بیانیه راهنمای استفاده

پیوستن به فضای نام شبکه بدون ریشه (rootless network namespace) که برای شبکه‌بندی netavark استفاده می‌شود. این گزینه می‌تواند برای اتصال به یک کانتینر بدون ریشه از طریق نشانی IP (شبکه‌بندی bridge) استفاده شود. در غیر این صورت، این کار از فضای نام شبکه میزبان امکان‌پذیر نیست.

کد خروج از podman unshare اطلاعاتی درباره علت شکست اجرای کانتینر یا پایان یافتن آن ارائه می‌دهد. هنگامی که دستورات podman unshare با یک کد غیر صفر خارج می‌شوند، کدهای خروج از استاندارد chroot پیروی می‌کنند (به زیر مراجعه کنید):

125 خطا از خود پادمن است

$ podman unshare --foo; echo $?
Error: unknown flag: --foo
125

126 هنگام اجرای یک دستور محصور و زمانی که این دستور قابل فراخوانی نیست

$ podman unshare /etc; echo $?
Error: fork/exec /etc: permission denied
126

127 هنگام اجرای یک دستور محصور و زمانی که این دستور یافت نمی‌شود

$ podman unshare foo; echo $?
Error: fork/exec /usr/bin/bogus: no such file or directory
127

کد خروج کد خروج دستور محصور

$ podman unshare /bin/sh -c 'exit 3'; echo $?
3

اجرای دستور مشخص‌شده درون فضای نام کاربری بدون ریشه:

$ podman unshare id
uid=0(root) gid=0(root) groups=0(root),65534(nobody)

نمایش نگاشت‌های فضای نام کاربری برای کانتینرهای بدون ریشه:

$ podman unshare cat /proc/self/uid_map /proc/self/gid_map
         0       1000          1
         1      10000      65536
         0       1000          1
         1      10000      65536

نمایش اطلاعات netns بدون ریشه در فضای نام کاربری برای کانتینرهای بدون ریشه:

$ podman unshare --rootless-netns ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: tap0: <BROADCAST,UP,LOWER_UP> mtu 65520 qdisc fq_codel state UNKNOWN group default qlen 1000
    link/ether aa:8c:0b:73:98:f6 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.100/24 brd 10.0.2.255 scope global tap0
       valid_lft forever preferred_lft forever
    inet6 fd00::a88c:bff:fe73:98f6/64 scope global dynamic mngtmpaddr
       valid_lft 86389sec preferred_lft 14389sec
    inet6 fe80::a88c:bff:fe73:98f6/64 scope link
       valid_lft forever preferred_lft forever

podman(1), podman-mount(1), namespaces(7), newuidmap(1), newgidmap(1), user_namespaces(7)