nsswitch.conf(5) File Formats Manual nsswitch.conf(5)

nsswitch.conf - پرونده پیکربندی سوئیچ سرویس نام (Name Service Switch)

پرونده پیکربندی سوئیچ سرویس نام (NSS یا Name Service Switch)، /etc/nsswitch.conf، توسط کتابخانه C گنو و برخی برنامه‌های دیگر استفاده می‌شود تا منابعی را که باید اطلاعات سرویس نام در دسته‌های مختلف از آن‌ها دریافت شود و همچنین ترتیب مراجعه به این منابع را تعیین کند. هر دسته از اطلاعات با نام یک پایگاه داده مشخص می‌شود.

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

پایگاه‌های داده زیر توسط کتابخانه C گنو پشتیبانی و شناخته می‌شوند:

نام‌های مستعار ایمیل، استفاده‌شده توسط getaliasent(3) و توابع مرتبط.
شماره‌های اترنت (Ethernet).
گروه‌های کاربران، استفاده‌شده توسط getgrent(3) و توابع مرتبط.
نام‌ها و شماره‌های میزبان، استفاده‌شده توسط gethostbyname(3) و توابع مرتبط.
فهرست دسترسی گروه‌های تکمیلی که توسط تابع getgrouplist(3) استفاده می‌شود.
فهرست سراسری شبکه‌ای از میزبان‌ها و کاربران، استفاده‌شده برای قواعد دسترسی. کتابخانه‌های C پیش از glibc 2.1 از netgroup فقط از طریق NIS پشتیبانی می‌کردند.
نام‌ها و شماره‌های شبکه، استفاده‌شده توسط getnetent(3) و توابع مرتبط.
گذرواژه‌های کاربران، استفاده‌شده توسط getpwent(3) و توابع مرتبط.
پروتکل‌های شبکه، استفاده‌شده توسط getprotoent(3) و توابع مرتبط.
کلیدهای عمومی و محرمانه برای Secure_RPC که توسط NFS و NIS+ استفاده می‌شوند.
نام‌ها و شماره‌های فراخوانی رویه از راه دور (RPC)، استفاده‌شده توسط getrpcbyname(3) و توابع مرتبط.
سرویس‌های شبکه، استفاده‌شده توسط getservent(3) و توابع مرتبط.
گذرواژه‌های سایه کاربران، استفاده‌شده توسط getspnam(3) و توابع مرتبط.

کتابخانه C گنو پایگاه‌های داده با نام‌های ناشناخته را نادیده می‌گیرد. برخی از برنامه‌ها از این ویژگی برای پیاده‌سازی سازوکارهای ویژه برای پایگاه‌های داده اختصاصی خود استفاده می‌کنند. به عنوان مثال، sudo(8) به پایگاه داده sudoers مراجعه می‌کند. واگذاری شناسه‌های کاربری/گروهی زیرمجموعه (subordinate user/group IDs) را می‌توان با استفاده از پایگاه داده subid پیکربندی کرد. برای جزئیات بیشتر به subuid(5) و subgid(5) مراجعه کنید.

در اینجا یک نمونه از پرونده /etc/nsswitch.conf آمده است:


passwd:         compat
group:          compat
shadow:         compat
hosts:          dns [!UNAVAIL=return] files
networks:       nis [NOTFOUND=return] files
ethers:         nis [NOTFOUND=return] files
protocols:      nis [NOTFOUND=return] files
rpc:            nis [NOTFOUND=return] files
services:       nis [NOTFOUND=return] files

ستون نخست، نام پایگاه داده است. ستون‌های باقی‌مانده موارد زیر را مشخص می‌کنند:

•
یک یا چند مشخصه سرویس، مانند "files"، "db" یا "nis". ترتیب سرویس‌ها در هر خط مشخص می‌کند که آن سرویس‌ها به نوبت و تا زمانی که نتیجه‌ای یافت شود به چه ترتیبی مورد پرس‌وجو قرار گیرند.
•
اقدامات اختیاری که در صورت دستیابی به یک نتیجه خاص از سرویس پیشین باید انجام شوند، به عنوان مثال "[NOTFOUND=return]".

مشخصه‌های سرویس پشتیبانی‌شده در سیستم شما به وجود کتابخانه‌های اشتراکی وابسته بوده و به همین دلیل قابل گسترش هستند. کتابخانه‌هایی به نام /lib/libnss_SERVICE.so.X سرویس نام‌برده به صورت SERVICE را ارائه می‌دهند. در یک نصب استاندارد، می‌توانید از "files"، "db"، "nis" و "nisplus" استفاده کنید. برای پایگاه داده hosts می‌توانید علاوه بر این "dns" را نیز تعیین کنید. برای پایگاه‌های داده passwd، group و shadow می‌توانید علاوه بر این "compat" را نیز تعیین کنید (بخش حالت سازگاری (compat) در زیر را ببینید). شماره نسخه X ممکن است برای glibc 2.0 برابر 1، یا برای glibc 2.1 و نسخه‌های پس از آن برابر 2 باشد. در سیستم‌هایی که کتابخانه‌های اضافی روی آن‌ها نصب شده است، ممکن است به سرویس‌های بیشتری مانند "hesiod"، "ldap"، "winbind" و "wins" نیز دسترسی داشته باشید.

همچنین می‌توان پس از یک مشخصه سرویس، یک اقدام (action) تعیین کرد. این اقدام، رفتار سیستم پس از دستیابی به نتیجه حاصل از منبع داده پیشین را تغییر می‌دهد. موارد اقدام شکل کلی زیر را دارند:

[STATUS=ACTION]
[!STATUS=ACTION]

که در آن:

STATUS => success | notfound | unavail | tryagain
ACTION => return | continue | merge

علامت ! شرط را نقیض می‌کند و با تمام نتایج ممکن به‌جز مورد مشخص‌شده مطابقت می‌یابد. حساسیت به بزرگی و کوچکی حروف در کلمات کلیدی وجود ندارد.

مقدار STATUS با نتیجه تابع جستجوی فراخوانی‌شده توسط مشخصه سرویس پیشین تطبیق داده می‌شود و می‌تواند یکی از موارد زیر باشد:

هیچ خطایی رخ نداده و ورودی درخواستی بازگردانده شده است. اقدام پیش‌فرض برای این وضعیت "return" است.
جستجو موفقیت‌آمیز بود، اما ورودی درخواستی یافت نشد. اقدام پیش‌فرض برای این وضعیت "continue" است.
سرویس به‌طور دائم از دسترس خارج است. این امر می‌تواند به این معنا باشد که پرونده مورد نیاز قابل خواندن نیست، یا برای سرویس‌های شبکه به این معناست که سرور در دسترس نبوده یا اجازه پرس‌وجو نمی‌دهد. اقدام پیش‌فرض برای این وضعیت "continue" است.
سرویس به‌طور موقت در دسترس نیست. این می‌تواند به این معنا باشد که پرونده‌ای قفل شده است یا سرور در حال حاضر نمی‌تواند اتصالات بیشتری را بپذیرد. اقدام پیش‌فرض برای این وضعیت "continue" است.

مقدار ACTION می‌تواند یکی از موارد زیر باشد:

هم‌اکنون نتیجه بازگردانده شود. هیچ تابع جستجوی دیگری فراخوانی نشود. با این حال، به دلایل سازگاری، اگر این اقدام برای پایگاه داده group و وضعیت notfound انتخاب شده باشد، و پرونده پیکربندی شامل خط initgroups نباشد، تابع جستجوی بعدی همیشه بدون تأثیر بر نتیجه جستجو فراخوانی می‌شود.
تابع جستجوی بعدی فراخوانی شود.
[SUCCESS=merge] بین دو ورودی پایگاه داده استفاده می‌شود. هنگامی که یک گروه در نخستین ورودی از دو ورودی گروه پیدا شود، پردازش به سمت ورودی بعدی ادامه خواهد یافت. اگر آن گروه در ورودی بعدی نیز یافت شود (و نام گروه و GID دقیقاً مطابقت داشته باشند)، فهرست اعضای ورودی دوم به شیء گروهی که باید بازگردانده شود افزوده خواهد شد. موجود از نسخه glibc 2.24. توجه داشته باشید که ادغام برای getgrent(3) انجام نخواهد شد، و اعضای تکراری نیز در صورتی که در هر دو ورودیِ در حال ادغام وجود داشته باشند، هرس (حذف) نخواهند شد.

سرویس NSS "compat" شبیه به "files" است، با این تفاوت که علاوه‌براین ورودی‌های ویژه‌ای را در پرونده‌های متناظر برای اعطای دسترسی به سیستم به کاربران یا اعضای گروه‌های شبکه (netgroups) مجاز می‌داند. ورودی‌های زیر در این حالت معتبر هستند:

برای پایگاه‌های داده passwd و shadow:

+user
شامل کردن user مشخص‌شده از نگاشت NIS passwd/shadow.
+@netgroup
شامل کردن تمامی کاربران در netgroup داده‌شده.
-user
مستثنی کردن user مشخص‌شده از نگاشت NIS passwd/shadow.
-@netgroup
مستثنی کردن تمامی کاربران در netgroup داده‌شده.
+
شامل کردن همه کاربران از نگاشت NIS passwd/shadow، به جز کاربرانی که پیش‌تر مستثنی شده‌اند.

برای پایگاه داده group:

+group
شامل کردن group مشخص‌شده از نگاشت NIS group.
-group
مستثنی کردن group مشخص‌شده از نگاشت NIS group.
+
شامل کردن همه گروه‌ها از نگاشت NIS group، به جز گروه‌هایی که پیش‌تر مستثنی شده‌اند.

به‌طور پیش‌فرض، منبع "nis" است، اما می‌توان با تعیین هر سرویس NSS به‌جز خود "compat" به عنوان منبع برای شبه‌پایگاه‌های داده passwd_compat، group_compat و shadow_compat، آن را بازنویسی کرد.

سرویسی با نام SERVICE توسط یک کتابخانه شیء اشتراکی با نام libnss_SERVICE.so.X پیاده‌سازی می‌شود که در /lib قرار دارد.

/etc/nsswitch.conf
پرونده پیکربندی NSS.
/lib/libnss_compat.so.X
منبع "compat" را پیاده‌سازی می‌کند.
/lib/libnss_db.so.X
منبع "db" را پیاده‌سازی می‌کند.
/lib/libnss_dns.so.X
منبع "dns" را پیاده‌سازی می‌کند.
/lib/libnss_files.so.X
منبع "files" را پیاده‌سازی می‌کند.
/lib/libnss_hesiod.so.X
منبع "hesiod" را پیاده‌سازی می‌کند.
/lib/libnss_nis.so.X
منبع "nis" را پیاده‌سازی می‌کند.
/lib/libnss_nisplus.so.X
منبع "nisplus" را پیاده‌سازی می‌کند.

هنگامی که منبع "files" برای پایگاه‌های داده مربوطه تعیین شده باشد، پرونده‌های زیر خوانده می‌شوند:

aliases
/etc/aliases
/etc/ethers
/etc/group
/etc/hosts
/etc/group
/etc/netgroup
/etc/networks
/etc/passwd
/etc/protocols
/etc/publickey
/etc/rpc
/etc/services
/etc/shadow

از نسخه glibc 2.33 به بعد، nsswitch.conf در صورت تغییر پرونده، به‌طور خودکار مجدداً بارگذاری می‌شود. در نسخه‌های پیشین، کل پرونده در هر فرایند تنها یک‌بار خوانده می‌شد. اگر پرونده بعداً تغییر می‌کرد، فرایند همچنان به استفاده از پیکربندی پیشین ادامه می‌داد.

به‌طور سنتی، تنها یک منبع منفرد برای اطلاعات سرویس وجود داشت که اغلب در قالب یک پرونده پیکربندی واحد بود (مانند /etc/passwd). با این وجود، با رواج سایر سرویس‌های نام نظیر سرویس اطلاعات شبکه (NIS یا Network Information Service) و سرویس نام دامنه (DNS یا Domain Name Service)، روشی مورد نیاز بود که انعطاف‌پذیرتر از ترتیب‌های جستجوی ثابت کدنویسی‌شده درون کتابخانه C باشد. سازوکار سوئیچ سرویس نام (Name Service Switch) که بر اساس سازوکار مورد استفاده توسط Sun Microsystems در کتابخانه C سیستم‌عامل Solaris 2 بنا شده بود، راه‌حل تمیزتری برای این مسئله ارائه کرد.

getent(1), nss(5)

2026-02-08 Linux man-pages 6.19