| NSS-SYSTEMD(8) | nss-systemd | NSS-SYSTEMD(8) |
نام (NAME)
nss-systemd - مدیریت و تفکیک پویای کاربران و گروههای موقت در systemd
خلاصه دستور (SYNOPSIS)
libnss_systemd.so.2
توضیحات (DESCRIPTION)
nss-systemd یک ماژول افزونه (plug-in) برای قابلیت سوئیچ سرویس نام گنو (GNU Name Service Switch یا NSS) در کتابخانه سی گنو (glibc) است که تفکیک نام کاربر و گروه یونیکس را برای سرویسهایی که User/Group Record Lookup API via Varlink[1] را پیادهسازی کردهاند فراهم میکند؛ مانند مدیر سیستم و سرویس systemd(1) (برای قابلیت DynamicUser= آن، برای جزئیات به systemd.exec(5) مراجعه کنید)، systemd-homed.service(8)، یا systemd-machined.service(8).
این ماژول همچنین تضمین میکند که کاربران و گروههای root و nobody (یعنی کاربران/گروههایی با شناسههای کاربری UID و گروهی GID برابر با 0 و 65534) همواره قابل تفکیک باقی بمانند، حتی اگر در /etc/passwd یا /etc/group فهرست نشده باشند، یا اگر این فایلها وجود نداشته باشند.
این ماژول ترجیحاً از systemd-userdbd.service(8) برای تفکیک کاربران و گروهها استفاده میکند، اما بدون در حال اجرا بودن این سرویس نیز کار میکند.
برای فعالسازی این ماژول NSS، عبارت "systemd" را به خطوطی که با "passwd:", "group:", "shadow:" و "gshadow:" در /etc/nsswitch.conf آغاز میشوند اضافه کنید.
توصیه میشود که "systemd" بعد از مدخل "files" در خطوط /etc/nsswitch.conf قرار گیرد تا نگاشتهای مبتنی بر /etc/passwd، /etc/group، /etc/shadow و /etc/gshadow اولویت داشته باشند.
رکوردهای تکمیلی ایستا JSON کاربر/گروه (STATIC DROP-IN JSON USER/GROUP RECORDS)
علاوه بر رکوردهای کاربر/گروه که از طریق واسطهای IPC یادشده Varlink و حسابهای ساختهشده root و nobody به دست میآیند، این ماژول همچنین حسابهای کاربری و گروهی را در دسترس سیستم قرار میدهد که در فایلهای تکمیلی (drop-in) ایستا در دایرکتوریهای /etc/userdb/, /run/userdb/, /run/host/userdb/ و /usr/lib/userdb/ تعریف شدهاند.
این یک سازوکار ساده برای ارائه رکوردهای ایستای کاربر و گروه از طریق فایلهای تکمیلی (drop-in) با قالب JSON است. چنین رکوردهای کاربری باید در قالبی که در مشخصات JSON User Records[2] شرح داده شده تعریف شوند و در یکی از دایرکتوریهای یادشده تحت نام فایلی متشکل از نام کاربر و پسوند .user، با حالت دسترسی قابلخواندن برای همگان (world-readable) قرار گیرند. یک پیوند نمادین (symlink) نیز با نامی برگرفته از شناسه کاربری (UID) رکورد کاربری به صورت دهدهی و با پسوند .user که به فایل رکورد اصلی اشاره میکند باید ایجاد شود، تا امکان جستجو هم بر اساس نام کاربری و هم بر اساس UID فراهم گردد. دادههای رکورد کاربری دارای دسترسی ویژه (مانند گذرواژههای هششده یونیکس) نیز میتوانند به صورت اختیاری در یک جفت فایل همگام جداگانه با پسوند .user-privileged ارائه شوند. این دادهها باید در یک فایل عادی به نام کاربر با پسوند .user-privileged، و یک پیوند نمادین اشارهکننده به آن با نام UID عددی مربوطه به صورت دهدهی با همین پسوند ذخیره شوند. این فایلهای همگام نباید برای هیچکسی جز root قابل خواندن باشند. مثال:
-rw-r--r--. 1 root root 723 May 10 foobar.user -rw-------. 1 root root 123 May 10 foobar.user-privileged lrwxrwxrwx. 1 root root 19 May 10 4711.user -> foobar.user lrwxrwxrwx. 1 root root 19 May 10 4711.user-privileged -> foobar.user-privileged
به طور مشابه، رکوردهای گروهی با پیروی از قالب شرح داده شده در JSON Group Record[3] را میتوان با استفاده از پسوندهای فایلی .group و .group-privileged تعریف کرد.
فایلهای رکورد اصلی کاربر/گروه (یعنی فایلهای دارای پسوندهای .user و .group) نباید شامل بخش "privileged" همانگونه که در مشخصات آمده است باشند. فایلهای رکورد کاربر/گروه دارای دسترسی ویژه (یعنی فایلهای دارای پسوندهای .user-privileged و .group-privileged) باید منحصراً شامل این بخش باشند.
علاوه بر دو نوع فایل رکورد کاربر و دو نوع فایل رکورد گروه، نوع پنجمی از فایلها وجود دارد که میتواند در دایرکتوریهای مورد جستجو قرار گیرد: فایلهایی که نشاندهنده عضویت کاربران در گروهها هستند. به طور مشخص، برای هر جفت کاربر/گروه که در آن کاربر باید عضو یک گروه باشد، فایلی با نام "username:groupname.membership" باید ایجاد شود؛ یعنی نام متنی کاربر یونیکس، به دنبال آن دو نقطه (:)، به دنبال آن نام متنی گروه یونیکس، با پسوند ".membership". محتوای این فایلها در حال حاضر خوانده نمیشود، با این حال توصیه میشود آنها را حاوی یک شیء خالی JSON (یعنی "{}") ایجاد کنید. صرف وجود این فایلها برای تأثیرگذاری بر عضویت کاربر/گروه کافی است. اگر برنامهای فایلهای رکورد کاربر و/یا گروه را در دایرکتوریهای مورد جستجو ارائه میدهد، باید همیشه چنین فایلهایی را هم برای عضویتهای گروهی اصلی و هم فرعی (auxiliary) ایجاد کند.
توجه داشته باشید که رکوردهای ایستای کاربر/گروه معمولاً رکوردهای دارای تداخل در /etc/passwd یا /etc/group یا سایر پایگاههای داده حسابها را لغو (override) نمیکنند. در واقع، پیش از قرار دادن این فایلها باید دقت معقولی برای جلوگیری از تداخل نام کاربر/گروه و UID/GID به کار رود.
سرویس systemd-userdb-load-credentials.service به طور خودکار هنگام بوت اجرا میشود و این فایلها را از رکوردهای کاربری که از طریق اعتبارنامههای سیستمی منتقل شدهاند نصب میکند. برای جزئیات به userdbctl(1) و systemd.system-credentials(7) مراجعه کنید.
پیکربندی در /ETC/NSSWITCH.CONF (CONFIGURATION IN /ETC/NSSWITCH.CONF)
در اینجا نمونهای از فایل /etc/nsswitch.conf آورده شده است که nss-systemd را به درستی فعال میکند:
passwd: files systemd group: files [SUCCESS=merge] systemd shadow: files systemd gshadow: files systemd hosts: mymachines resolve [!UNAVAIL=return] files myhostname dns networks: files protocols: db files services: db files ethers: db files rpc: db files netgroup: nis
مثال: نگاشتهای ارائهشده توسط SYSTEMD-MACHINED.SERVICE (EXAMPLE: MAPPINGS PROVIDED BY SYSTEMD-MACHINED.SERVICE)
کانتینر "rawhide" با استفاده از systemd-nspawn(1) راهاندازی شده است:
# systemd-nspawn -M rawhide --boot --network-veth --private-users=pick Spawning container rawhide on /var/lib/machines/rawhide. Selected user namespace base 20119552 and range 65536. ... $ machinectl --max-addresses=3 MACHINE CLASS SERVICE OS VERSION ADDRESSES rawhide container systemd-nspawn fedora 30 169.254.40.164 fe80::94aa:3aff:fe7b:d4b9 $ getent passwd vu-rawhide-0 vu-rawhide-81 vu-rawhide-0:*:20119552:65534:vu-rawhide-0:/:/usr/sbin/nologin vu-rawhide-81:*:20119633:65534:vu-rawhide-81:/:/usr/sbin/nologin $ getent group vg-rawhide-0 vg-rawhide-81 vg-rawhide-0:*:20119552: vg-rawhide-81:*:20119633: $ ps -o user:15,pid,tty,command -e|grep '^vu-rawhide' vu-rawhide-0 692 ? /usr/lib/systemd/systemd vu-rawhide-0 731 ? /usr/lib/systemd/systemd-journald vu-rawhide-192 734 ? /usr/lib/systemd/systemd-networkd vu-rawhide-193 738 ? /usr/lib/systemd/systemd-resolved vu-rawhide-0 742 ? /usr/lib/systemd/systemd-logind vu-rawhide-81 744 ? /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only vu-rawhide-0 746 ? /usr/sbin/sshd -D ... vu-rawhide-0 752 ? /usr/lib/systemd/systemd --user vu-rawhide-0 753 ? (sd-pam) vu-rawhide-0 1628 ? login -- zbyszek vu-rawhide-1000 1630 ? /usr/lib/systemd/systemd --user vu-rawhide-1000 1631 ? (sd-pam) vu-rawhide-1000 1637 pts/8 -zsh
همچنین ببینید (SEE ALSO)
systemd(1), systemd.exec(5), nss-resolve(8), nss-myhostname(8), nss-mymachines(8), systemd-userdbd.service(8), systemd-homed.service(8), systemd-machined.service(8), userdbctl(1), systemd.system-credentials(7), nsswitch.conf(5), getent(1)
نکات (NOTES)
- 1.
- User/Group Record Lookup API via Varlink
- 2.
- JSON User Records
- 3.
- JSON Group Record
| systemd 261.2 |