NAMESPACE.CONF(5) Linux-PAM Manual NAMESPACE.CONF(5)

namespace.conf - فایل پیکربندی ماژول pam_namespace

ماژول pam_namespace.so امکان برپاسازی فضاهای نام (namespace) خصوصی را با دایرکتوری‌های چندنمونه‌ای (polyinstantiated) فراهم می‌کند. دایرکتوری‌ها می‌توانند بر اساس نام کاربر یا در صورت استفاده از SELinux، بر اساس نام کاربر، سطح حساسیت یا بافت امنیتی کامل چندنمونه‌ای شوند. اگر یک اسکریپت اجرایی به نام /etc/security/namespace.init وجود داشته باشد، هر بار که یک دایرکتوری نمونه برپا و متصل (mount) می‌شود، برای مقداردهی اولیه فضای نام استفاده می‌گردد. این اسکریپت مسیر دایرکتوری چندنمونه‌ای و مسیر دایرکتوری نمونه را به عنوان آرگومان‌های خود دریافت می‌کند. این اسکریپت با دسترسی‌های کامل ریشه (root) فراخوانی می‌شود و دسترسی به دایرکتوری نمونه در این بافت باید با احتیاط انجام گیرد، زیرا توسط کاربر غیرممتازی که برای او ایجاد شده است کنترل می‌شود.

فایل /etc/security/namespace.conf مشخص می‌کند که کدام دایرکتوری‌ها چندنمونه‌ای شوند، چگونه چندنمونه‌ای شوند، دایرکتوری‌های نمونه چگونه نام‌گذاری شوند، و برای چه کاربرانی چندنمونه‌سازی انجام نگیرد.

هنگامی که کاربری وارد سیستم می‌شود، فایل namespace.conf پیمایش می‌شود. توضیحات با نویسه‌های # مشخص می‌گردند. هر خط غیرتوضیحی نمایانگر یک دایرکتوری چندنمونه‌ای است. فیلدها با فاصله از هم جدا می‌شوند اما می‌توان آن‌ها را با نویسه‌های " نقل‌قول کرد؛ همچنین دنباله‌های گریز \b، \n و \t شناخته می‌شوند. فیلدها به شرح زیر هستند:

polydir instance_prefix method list_of_uids

فیلد اول، polydir، مسیر مطلق دایرکتوری‌ای است که باید چندنمونه‌ای شود. رشته ویژه $HOME با دایرکتوری خانگی کاربر و $USER با نام کاربری جایگزین می‌شود. این فیلد نمی‌تواند خالی باشد.

فیلد دوم، instance_prefix پیشوند رشته‌ای مورد استفاده برای ساخت نام مسیر نمونه‌سازی <polydir> است. مسیر باید با یک اسلش انتهایی یا با یک پیشوند دایرکتوری برای ساخت مسیر کامل هر نمونه پایان یابد. بسته به method چندنمونه‌سازی، سپس "رشته تمایز نمونه" به آن پیوست می‌شود تا مسیر نهایی دایرکتوری نمونه تولید گردد. این دایرکتوری در صورت عدم وجود ایجاد شده و سپس با اتصال متصل‌کننده (bind mount) بر روی <polydir> متصل می‌شود تا نمونه‌ای از <polydir> را بر اساس ستون <method> فراهم کند. رشته ویژه $HOME با دایرکتوری خانگی کاربر و $USER با نام کاربری جایگزین می‌شود. این فیلد نمی‌تواند خالی باشد.

فیلد سوم، method، روش مورد استفاده برای چندنمونه‌سازی است. این فیلد می‌تواند این مقادیر را بپذیرد: "user" برای چندنمونه‌سازی بر اساس نام کاربر، "level" برای چندنمونه‌سازی بر اساس سطح MLS فرایند و نام کاربر، "context" برای چندنمونه‌سازی بر اساس بافت امنیتی فرایند و نام کاربر، "tmpfs" برای متصل کردن سیستم‌فایل tmpfs به عنوان دایرکتوری نمونه، و "tmpdir" برای ایجاد دایرکتوری موقت به عنوان دایرکتوری نمونه که با بسته شدن نشست کاربر حذف می‌شود. روش‌های "context" و "level" فقط با SELinux در دسترس هستند. این فیلد نمی‌تواند خالی باشد.

فیلد چهارم، list_of_uids، فهرستی جداشده با کاما از نام‌های کاربری است که چندنمونه‌سازی برای آن‌ها انجام نمی‌شود. اگر خالی رها شود، چندنمونه‌سازی برای همه کاربران انجام خواهد شد. اگر فهرست با یک نویسه "~" آغاز شود، چندنمونه‌سازی فقط برای کاربران موجود در فهرست انجام می‌گیرد.

فیلد method همچنین می‌تواند شامل پرچم‌های اختیاری زیر باشد که با نویسه‌های : از هم جدا شده‌اند.

create=mode,owner,group - ایجاد دایرکتوری چندنمونه‌ای. پارامترهای mode، owner و group اختیاری هستند. مقدار پیش‌فرض mode توسط umask تعیین می‌شود، مالک (owner) پیش‌فرض کاربری است که نشست او باز شده است، و گروه (group) پیش‌فرض گروه اصلی کاربر است.

iscript=path - مسیر اسکریپت راه‌اندازی دایرکتوری نمونه. دایرکتوری پایه برای مسیرهای نسبی /etc/security/namespace.d است.

noinit - اسکریپت راه‌اندازی دایرکتوری نمونه اجرا نخواهد شد.

shared - دایرکتوری‌های نمونه برای روش‌های "context" و "level" شامل نام کاربر نخواهند بود و بین همه کاربران به اشتراک گذاشته می‌شوند.

mntopts=value - مقدار این پرچم هنگام انجام اتصال tmpfs به فراخوانی mount ارسال می‌شود. این گزینه به عنوان مثال امکان تعیین حداکثر اندازه نمونه tmpfs ایجاد شده توسط فراخوانی mount را فراهم می‌کند. علاوه بر گزینه‌های مشخص شده در راهنمای tmpfs(5)، پرچم‌های nosuid، noexec و nodev می‌توانند به ترتیب برای غیرفعال کردن اثر بیت setuid، غیرفعال کردن اجرای فایل‌های اجرایی و غیرفعال کردن تفسیر دستگاه‌ها روی سیستم‌فایل tmpfs متصل‌شده استفاده شوند.

دایرکتوری‌ای که نمونه‌های چندنمونه‌ای در آن ایجاد می‌شوند، باید وجود داشته باشد و به‌طور پیش‌فرض باید دارای حالت دسترسی (mode) برابر با 0000 باشد. شرط داشتن حالت دسترسی 0000 برای دایرکتوری والد نمونه را می‌توان با گزینه خط فرمان ignore_instance_parent_mode نادیده گرفت.

در صورت چندنمونه‌سازی بر اساس context یا level، بافت SELinux که برای چندنمونه‌سازی استفاده می‌شود، بافتی است که برای اجرای فرایند جدید با استفاده از getexeccon دریافت شده است. این بافت باید توسط برنامه فراخواننده یا ماژول pam_selinux.so تنظیم شود. اگر این بافت تنظیم نشده باشد، چندنمونه‌سازی تنها بر اساس نام کاربر خواهد بود.

"رشته تمایز نمونه" برای روش "user" برابر با <user name> و برای روش‌های "context" و "level" برابر با <user name>_<raw directory context> است. اگر کل رشته بیش از حد طولانی باشد، انتهای آن با md5sum خود جایگزین می‌شود. همچنین زمانی که گزینه خط فرمان gen_hash استفاده شود، کل رشته با md5sum خود جایگزین می‌گردد.

این‌ها چند خط نمونه هستند که ممکن است در /etc/security/namespace.conf مشخص شوند.

# The following three lines will polyinstantiate /tmp,
# /var/tmp and user's home directories. /tmp and /var/tmp
# will be polyinstantiated based on the security level
# as well as user name, whereas home directory will be
# polyinstantiated based on the full security context and user name.
# Polyinstantiation will not be performed for user root
# and adm for directories /tmp and /var/tmp, whereas home
# directories will be polyinstantiated for all users.
#
# Note that instance directories do not have to reside inside
# the polyinstantiated directory. In the examples below,
# instances of /tmp will be created in /tmp-inst directory,
# where as instances of /var/tmp and users home directories
# will reside within the directories that are being
# polyinstantiated.
#
/tmp     /tmp-inst/               level      root,adm
/var/tmp /var/tmp/tmp-inst/   	level      root,adm
$HOME    $HOME/$USER.inst/inst- context

برای سرویس‌هایی (<service>) که به چندنمونه‌سازی نیاز دارید (برای مثال login)، خط زیر را در /etc/pam.d/<service> به عنوان آخرین خط برای گروه session قرار دهید:

session required pam_namespace.so [arguments]

این ماژول همچنین به تنظیم بافت توسط pam_selinux.so وابسته است.

pam_namespace(8)، pam.d(5)، pam(8)

صفحه راهنمای namespace.conf توسط Janak Desai <janak@us.ibm.com> نوشته شده است. ویژگی‌های بیشتر توسط Tomas Mraz <tmraz@redhat.com> افزوده شده است.

01/26/2026 Linux-PAM