podmansh(1) General Commands Manual podmansh(1)

podmansh - اجرای پوسته ورود درون کانتینر podmansh پادمن

podmansh

هنگام ورود کاربر به سیستم، یک پوسته کاربری را درون کانتینر اجرا می‌کند. کانتینری که کاربران به آن متصل می‌شوند می‌تواند از طریق یک پرونده پادمن کُوآدلت (Podman Quadlet) تعریف شود. این کاربر تنها به حجم‌ها و قابلیت‌هایی دسترسی دارد که درون پرونده Quadlet پیکربندی شده‌اند.

مدیران سیستم می‌توانند یک Quadlet در مسیر /etc/containers/systemd/users ایجاد کنند تا systemd هنگام ورود هر کاربر آن را اجرا کند. مدیر می‌تواند یک Quadlet ویژه با نام کانتینر podmansh بسازد، سپس پوسته ورود کاربران را به /usr/bin/podmansh تنظیم کند. این پوسته‌های ورود کاربر به صورت خودکار توسط پادمن در داخل کانتینر podmansh اجرا می‌شوند.

همچنین مدیر می‌تواند فایل‌های Quadlet را در دایرکتوری /etc/containers/systemd/users/${UID} برای یک کاربر خاص قرار دهد. در این صورت، تنها همین شناسه کاربر (UID) به هنگام ورود این سرویس‌های Quadlet را اجرا خواهد کرد.

کاربر از طریق تمام سازوکارهای امنیتی، از جمله SELinux، درون محیط کانتینر محصور و محدود می‌شود. تنها اطلاعاتی از سیستم میزبان در دسترس کاربر خواهد بود که از طریق حجم‌ها (volumes) به درون کانتینر متصل شده باشند.

سرویس systemd به هنگام آغاز نشست کاربری، به طور خودکار کانتینر را ایجاد می‌کند. همچنین هنگامی که تمامی اتصالات به نشست کاربری پایان یابند، systemd کانتینر را متوقف و جمع‌آوری می‌کند. این بدان معناست که کاربران می‌توانند چندین بار به سیستم وارد شوند و هر نشست به همان کانتینر متصل خواهد شد.

مدیران سیستم می‌توانند از حجم‌ها برای به اشتراک‌گذاری داده‌های معینی از سیستم میزبان با کاربر استفاده کنند، بدون آنکه کاربر به سایر بخش‌های سیستم میزبان دسترسی داشته باشد.

مدت زمان مهلت (Timeout) برای podmansh را می‌توان با استفاده از گزینه podmansh_timeout در containers.conf تعیین کرد.

ایجاد نشست ورود کاربر با استفاده از دستور useradd با دسترسی کاربر ریشه (root):

# useradd -s /usr/bin/podmansh lockedu
# grep lockedu /etc/passwd
lockedu:x:4008:4008::/home/lockedu:/usr/bin/podmansh

یک فایل پادمن Quadlet شبیه به یکی از نمونه‌های زیر ایجاد کنید:

کانتینر کاملاً محدودشده بدون دسترسی به سیستم‌عامل میزبان:

# USERID=$(id -u lockedu)
# mkdir -p /etc/containers/systemd/users/${USERID}
# cat > /etc/containers/systemd/users/${USERID}/podmansh.container << _EOF
[Unit]
Description=The podmansh container
After=local-fs.target
[Container]
Image=registry.fedoraproject.org/fedora
ContainerName=podmansh
UserNS=keep-id
RunInit=yes
DropCapability=all
NoNewPrivileges=true
Exec=sleep infinity
[Install]
RequiredBy=default.target
_EOF

روش جایگزین: با دسترسی ریشه، یک Quadlet بسازید که در آن کاربر اجازه یابد درون فضای نام کاربری (user namespace) به root تبدیل شود. همچنین کاربر می‌تواند به طور دائمی محتوای دایرکتوری خانه خود را که از حساب کاربری واقعی در میزبان مانت شده است، به جای ذخیره درون کانتینر، بخواند یا بنویسد:

# useradd -s /usr/bin/podmansh confinedu
# grep confinedu /etc/passwd
confinedu:x:4009:4009::/home/confinedu:/usr/bin/podmansh
# USERID=$(id -u confinedu)
# mkdir -p /etc/containers/systemd/users/${USERID}
# cat > /etc/containers/systemd/users/${USERID}/podmansh.container << _EOF
[Unit]
Description=The podmansh container
After=local-fs.target
[Container]
Image=registry.fedoraproject.org/fedora
ContainerName=podmansh
UserNS=keep-id
RunInit=yes
Volume=%h/data:%h:Z
Exec=sleep infinity
[Service]
ExecStartPre=/usr/bin/mkdir -p %h/data
[Install]
RequiredBy=default.target
_EOF

نمونه‌ای دیگر: با دسترسی ریشه، یک Quadlet ایجاد کنید که در آن کاربران داخل کانتینر مجاز به اجرای کانتینرها با جداسازی SELinux بوده و قادر به خواندن و نوشتن محتوا در دایرکتوری $HOME/data باشند:

# useradd -s /usr/bin/podmansh fullu
# grep fullu /etc/passwd
fullu:x:4010:4010::/home/fullu:/usr/bin/podmansh
# USERID=$(id -u fullu)
# mkdir -p /etc/containers/systemd/users/${USERID}
# cat > /etc/containers/systemd/users/${USERID}/podmansh.container << _EOF
[Unit]
Description=The podmansh container
After=local-fs.target
[Container]
Image=registry.fedoraproject.org/fedora
ContainerName=podmansh
UserNS=keep-id
RunInit=yes
PodmanArgs=--security-opt=unmask=/sys/fs/selinux   
	--security-opt=label=nested   
	--security-opt=label=user:container_user_u   
	--security-opt=label=type:container_user_t   
	--security-opt=label=role:container_user_r   
	--security-opt=label=level:s0-s0:c0.c1023
Volume=%h/data:%h:Z
WorkingDir=%h
Volume=/sys/fs/selinux:/sys/fs/selinux
Exec=sleep infinity
[Service]
ExecStartPre=/usr/bin/mkdir -p %h/data
[Install]
RequiredBy=default.target
_EOF

containers.conf(5), podman(1), podman-exec(1), podman-systemd.unit(5)

می ۲۰۲۳، در ابتدا توسط Dan Walsh گردآوری شد: ⟨mailto:dwalsh@redhat.com⟩