WINBINDD(8) System Administration tools WINBINDD(8)

winbindd - دیمن سوئیچ سرویس نام (NSS) برای تفکیک نام‌ها از سرورهای NT

winbindd [-D|--daemon] [-i|--interactive] [-F|--foreground] [--no-process-group] [-n|--no-caching] [-d <debug level>] [--debug-stdout] [--configfile=<configuration file>] [--option=<name>=<value>] [-l|--log-basename <log directory>] [--leak-report] [--leak-report-full] [-V|--version]

این برنامه بخشی از مجموعه samba(7) است.

دستور winbindd دیمنی است که تعدادی از سرویس‌ها را برای قابلیت «سوئیچ سرویس نام» (Name Service Switch) موجود در اکثر کتابخانه‌های مدرن C، برای برنامه‌های دلخواه از طریق PAM و ntlm_auth و برای خود سامبا فراهم می‌کند.

حتی اگر winbind برای nsswitch استفاده نشود، همچنان با مدیریت اتصالات به کنترل‌کننده‌های دامنه (Domain Controllers)، سرویسی به smbd، ntlm_auth و ماژول PAM pam_winbind.so ارائه می‌دهد. در این پیکربندی پارامتر idmap config * : range لازم نیست. (این حالت به عنوان «حالت فقط پروکسی netlogon» یا `netlogon proxy only mode' شناخته می‌شود.)

سرویس «سوئیچ سرویس نام» (NSS) امکان دریافت اطلاعات کاربر و سیستم را از پایگاه‌های داده و سرویس‌های مختلف مانند NIS یا DNS فراهم می‌سازد. رفتار دقیق آن را می‌توان از طریق فایل /etc/nsswitch.conf پیکربندی کرد. کاربران و گروه‌ها به محض تفکیک شدن، به محدوده‌ای از شناسه‌های کاربری و گروهی مشخص‌شده توسط مدیر سیستم سامبا اختصاص می‌یابند.

سرویس ارائه‌شده توسط winbindd به نام `winbind' شناخته می‌شود و می‌تواند برای تفکیک اطلاعات کاربر و گروه از یک سرور Windows NT استفاده شود. این سرویس همچنین می‌تواند خدمات احراز هویت را از طریق یک ماژول PAM مرتبط ارائه دهد.

ماژول pam_winbind از نوع‌های ماژول auth، account و password پشتیبانی می‌کند. لازم به ذکر است که ماژول account تنها تابع ()getpwnam را اجرا می‌کند تا بررسی کند که آیا سیستم می‌تواند یک uid برای کاربر دریافت کند یا خیر، زیرا کنترل‌کننده دامنه پیش‌تر کنترل دسترسی را انجام داده است. اگر کتابخانه libnss_winbind به‌درستی نصب شده باشد، یا منبع جایگزینی برای نام‌ها پیکربندی شده باشد، این عمل همیشه باید با موفقیت انجام شود.

پایگاه‌های داده nsswitch زیر توسط سرویس winbindd پیاده‌سازی شده‌اند:

hosts

این قابلیت فقط در IRIX موجود است. اطلاعات میزبانی که به‌طور سنتی در فایل hosts(5) ذخیره شده و توسط توابع gethostbyname(3) استفاده می‌شود. نام‌ها از طریق سرور WINS یا به روش برودکست (پخش همگانی) تفکیک می‌شوند.

passwd

اطلاعات کاربری که به‌طور سنتی در فایل passwd(5) ذخیره شده و توسط توابع getpwent(3) استفاده می‌شود.

group

اطلاعات گروهی که به‌طور سنتی در فایل group(5) ذخیره شده و توسط توابع getgrent(3) استفاده می‌شود.

برای مثال، پیکربندی ساده زیر در فایل /etc/nsswitch.conf می‌تواند برای تفکیک اولیه اطلاعات کاربر و گروه از /etc/passwd و /etc/group و سپس از سرور Windows NT استفاده شود.

passwd:         files winbind
group:          files winbind
## only available on IRIX: use winbind to resolve hosts:
# hosts:        files dns winbind
## All other NSS enabled systems should use libnss_wins.so like this:
hosts:          files dns wins

پیکربندی ساده زیر در فایل /etc/nsswitch.conf می‌تواند برای تفکیک اولیه نام‌های میزبان از /etc/hosts و سپس از سرور WINS به کار رود.

hosts:		files wins

-D|--daemon

در صورت مشخص شدن، این پارامتر باعث می‌شود که سرور به عنوان یک دیمن کار کند؛ یعنی خود را از ترمینال جدا کرده و در پس‌زمینه روی پورت مناسب اجرا می‌شود. اگر winbindd در خط فرمان یک شل اجرا شود، این گزینه به‌طور پیش‌فرض در نظر گرفته می‌شود.

-i|--interactive

به winbindd اعلام می‌کند که به دیمن تبدیل نشود و از ترمینال جاری جدا نگردد. این گزینه زمانی توسط توسعه‌دهندگان استفاده می‌شود که اشکال‌زدایی تعاملی winbindd مورد نیاز باشد. همچنین winbindd پیام‌های لاگ را در خروجی استاندارد ثبت می‌کند، مشابه حالتی که پارامتر -S مشخص شده باشد.

-F|--foreground

در صورت تعیین، این پارامتر باعث می‌شود که فرآیند اصلی winbindd به دیمن تبدیل نشود، یعنی فورک دوگانه (double-fork) انجام ندهد و از ترمینال جدا نشود. فرآیندهای فرزند همچنان به‌صورت عادی برای پاسخ‌گویی به هر درخواست اتصال ایجاد می‌شوند، اما فرآیند اصلی خارج نمی‌شود. این حالت عملیاتی برای اجرای winbindd تحت ناظران فرآیند (process supervisors) مانند supervise و svscan از بسته daemontools متعلق به دانیل جی. برنشتاین، یا ناظر فرآیند AIX مناسب است.

--no-process-group

گروه فرآیند جدیدی برای winbindd ایجاد نکند.

-n|--no-caching

برخی از حافظه‌های پنهان (کش) را غیرفعال می‌کند. این بدان معناست که winbindd اغلب باید قبل از اینکه بتواند به یک کلاینت پاسخ دهد، منتظر پاسخی از کنترل‌کننده دامنه بماند و بنابراین کارها کندتر انجام می‌شوند. با این حال، نتایج دقیق‌تر خواهند بود، زیرا ممکن است نتایج کش به‌روز نباشند. همچنین در صورتی که DC پاسخ ندهد، ممکن است winbindd به‌طور موقت متوقف شود. این گزینه کش samlogon را که برای ردیابی عضویت در گروه در محیط‌های مورد اعتماد لازم است، غیرفعال نمی‌کند.

-d|--debuglevel=level

مقدار level یک عدد صحیح از 0 تا 10 است. مقدار پیش‌فرض در صورت عدم تعیین این پارامتر 0 است.

هرچه این مقدار بالاتر باشد، جزئیات بیشتری درباره فعالیت‌های سرور در فایل‌های لاگ ثبت خواهد شد. در سطح 0، فقط خطاهای بحرانی و هشدارهای جدی ثبت می‌شوند. سطح 1 یک سطح معقول برای اجرای روزمره است - مقدار کمی از اطلاعات مربوط به عملیات انجام‌شده را تولید می‌کند.

سطوح بالاتر از 1 مقادیر قابل توجهی داده لاگ تولید می‌کنند و فقط باید هنگام بررسی یک مشکل استفاده شوند. سطوح بالاتر از 3 فقط برای استفاده توسعه‌دهندگان طراحی شده‌اند و مقادیر بسیار عظیمی از داده‌های لاگ تولید می‌کنند که اکثر آن‌ها بسیار مبهم هستند.

توجه داشته باشید که مشخص کردن این پارامتر در اینجا، پارامتر log level را در فایل /etc/samba/smb.conf نادیده می‌گیرد (بازنویسی می‌کند).

--debug-stdout

خروجی اشکال‌زدایی را به STDOUT هدایت می‌کند. به‌طور پیش‌فرض، دیمن‌های سرور در یک فایل لاگ می‌نویسند.

--configfile=CONFIGFILE

فایل مشخص‌شده شامل جزئیات پیکربندی مورد نیاز سرور است. اطلاعات موجود در این فایل شامل اطلاعات مخصوص سرور مانند فایل printcap مورد استفاده و همچنین توصیف تمام سرویس‌هایی است که سرور باید ارائه دهد. برای اطلاعات بیشتر به /etc/samba/smb.conf مراجعه کنید. نام فایل پیکربندی پیش‌فرض در زمان کامپایل تعیین می‌شود.

--option=<name>=<value>

گزینه smb.conf(5) با نام "<name>" را از خط فرمان به مقدار "<value>" تنظیم می‌کند. این دستور پیش‌فرض‌های زمان کامپایل و گزینه‌های خوانده‌شده از فایل پیکربندی را نادیده می‌گیرد (بازنویسی می‌کند). اگر نام یا مقداری شامل فاصله باشد، کل عبارت option=name=value-- را درون علامت نقل‌قول قرار دهید.

-l|--log-basename=logdirectory

نام دایرکتوری پایه برای فایل‌های لاگ/اشکال‌زدایی. فرآیند والد از نام فایل log.winbindd و فرآیند فرزند از نام فایل log.wb-<name> استفاده می‌کند. فایل لاگ هرگز توسط winbindd حذف نمی‌شود.

--leak-report

گزارش نشت حافظه talloc را هنگام خروج فعال می‌کند.

--leak-report-full

گزارش کامل نشت حافظه talloc را هنگام خروج فعال می‌کند.

-V|--version

شماره نسخه برنامه را چاپ می‌کند.

-?|--help

خلاصه‌ای از گزینه‌های خط فرمان را چاپ می‌کند.

--usage

پیام کوتاهی درباره نحوه استفاده نمایش می‌دهد.

به کاربران و گروه‌ها در یک سرور Windows NT یک شناسه امنیتی (SID) اختصاص داده می‌شود که هنگام ایجاد کاربر یا گروه در سراسر سیستم منحصر‌به‌فرد است. برای تبدیل کاربر یا گروه Windows NT به یک کاربر یا گروه یونیکس، نگاشتی میان SIDها و شناسه‌های کاربری و گروهی یونیکس لازم است. این یکی از وظایفی است که winbindd انجام می‌دهد.

هنگامی که کاربران و گروه‌ها توسط winbindd از یک سرور تفکیک می‌شوند، شناسه‌های کاربر و گروه از یک محدوده مشخص تخصیص می‌یابند. این کار بر اساس اولویت مراجعه (نوبت ورود) انجام می‌شود، هرچند که همه کاربران و گروه‌های موجود به محض اینکه کلاینتی دستور شمارش (enumeration) کاربر یا گروه را اجرا کند، نگاشت خواهند شد. شناسه‌های یونیکس تخصیص‌یافته در یک پایگاه داده ذخیره شده و به خاطر سپرده می‌شوند.

هشدار: پایگاه داده نگاشت SID به شناسه یونیکس تنها محلی است که نگاشت‌های کاربر و گروه در آن توسط winbindd ذخیره می‌شوند. اگر این منبع داده حذف یا خراب شود، هیچ راهی برای winbindd وجود ندارد که تشخیص دهد کدام شناسه‌های کاربر و گروه با ridهای کاربر و گروه Windows NT مطابقت دارند.

پیکربندی دیمن winbindd از طریق پارامترهای پیکربندی در فایل smb.conf(5) انجام می‌شود. تمامی پارامترها باید در بخش [global] از smb.conf تعیین شوند.

•winbind separator
•idmap config * : range
•idmap config * : backend
•winbind cache time
•winbind enum users
•winbind enum groups
•template homedir
•template shell
•winbind use default domain
•winbind: rpc only تنظیم این پارامتر winbindd را وادار می‌کند تا به جای LDAP از RPC برای بازیابی اطلاعات از کنترل‌کننده‌های دامنه استفاده کند.

برای راه‌اندازی winbindd جهت جستجوی کاربر و گروه به‌همراه احراز هویت از یک کنترل‌کننده دامنه، تنظیمی مشابه ساختار زیر به کار ببرید. این پیکربندی روی یکی از نسخه‌های اولیه Red Hat Linux آزمایش شده است.

در فایل /etc/nsswitch.conf موارد زیر را قرار دهید:

passwd: files winbind
group:  files winbind

در مسیر /etc/pam.d/* خطوط auth را با عبارتی شبیه به این جایگزین کنید:

auth  required    /lib/security/pam_securetty.so
auth  required	  /lib/security/pam_nologin.so
auth  sufficient  /lib/security/pam_winbind.so
auth  required    /lib/security/pam_unix.so \
                  use_first_pass shadow nullok

نکته

ماژول PAM با نام pam_unix اخیراً جایگزین ماژول pam_pwdb شده است. برخی سیستم‌های لینوکس از ماژول pam_unix2 به جای pam_unix استفاده می‌کنند.

به‌ویژه به استفاده از کلیدواژه sufficient و کلیدواژه use_first_pass توجه کنید.

اکنون خطوط account را با این جایگزین کنید:

account required /lib/security/pam_winbind.so

مرحله بعدی پیوستن به دامنه است. برای انجام این کار از برنامه net به صورت زیر استفاده کنید:

net join -S PDC -U Administrator

نام کاربری پس از -U می‌تواند هر کاربر دامنه‌ای باشد که دارای امتیازات مدیریتی (administrator) روی دستگاه است. نام یا نشانی IP کنترل‌کننده دامنه اولیه (PDC) خود را به جای "PDC" قرار دهید.

سپس libnss_winbind.so را در /lib و pam_winbind.so را در /lib/security کپی کنید. یک پیوند نمادین (symlink) باید از /lib/libnss_winbind.so به /lib/libnss_winbind.so.2 ایجاد شود. اگر از نسخه قدیمی‌تری از glibc استفاده می‌کنید، مقصد پیوند باید /lib/libnss_winbind.so.1 باشد.

در نهایت، یک فایل smb.conf(5) حاوی دستورالعمل‌هایی مشابه زیر تنظیم کنید:

[global]
	winbind separator = +
        winbind cache time = 10
        template shell = /bin/bash
        template homedir = /home/%D/%U
        idmap config * : range = 10000-20000
        workgroup = DOMAIN
        security = domain
        password server = *

حال winbindd را راه‌اندازی کنید؛ خواهید دید که پایگاه داده کاربر و گروه شما گسترش یافته تا کاربران و گروه‌های NT شما را نیز شامل شود و می‌توانید با استفاده از ساختار DOMAIN+user برای نام کاربری، به عنوان یک کاربر دامنه وارد سیستم یونیکس خود شوید. ممکن است بخواهید از دستورهای getent passwd و getent group برای تأیید عملکرد صحیح winbindd استفاده کنید.

نکات زیر هنگام پیکربندی و اجرای winbindd مفید هستند:

پیکربندی اشتباه PAM بسیار محتمل و آسان است. هنگام اصلاح فایل‌های پیکربندی PAM مطمئن شوید که دقیقاً چه کاری انجام می‌دهید. این احتمال وجود دارد که PAM را به گونه‌ای تنظیم کنید که دیگر نتوانید به سیستم خود وارد شوید.

اگر بیش از یک ماشین یونیکس winbindd را اجرا کنند، در حالت کلی شناسه‌های کاربر و گروه‌های تخصیص‌یافته توسط winbindd یکسان نخواهند بود. شناسه‌های کاربر و گروه فقط برای ماشین محلی معتبر خواهند بود، مگر اینکه یک پشتیبان مشترک idmap config * : backend پیکربندی شده باشد.

اگر فایل نگاشت SID ویندوز NT به شناسه کاربر و گروه یونیکس آسیب دیده یا نابود شود، نگاشت‌ها از دست خواهند رفت.

سیگنال‌های زیر را می‌توان برای مدیریت و هدایت دیمن winbindd به کار برد.

SIGHUP

فایل smb.conf(5) را مجدداً بارگذاری کرده و هرگونه تغییر پارامتر را روی نسخه در حال اجرای winbindd اعمال می‌کند. این سیگنال همچنین تمام اطلاعات کش‌شده کاربر و گروه را پاک می‌کند. فهرست سایر دامنه‌های مورد اعتماد winbindd نیز دوباره بارگذاری می‌شود.

به جای ارسال سیگنال SIGHUP، می‌توان درخواست بارگذاری مجدد فایل پیکربندی را با استفاده از برنامه smbcontrol(1) ارسال کرد.

SIGUSR2

سیگنال SIGUSR2 باعث می‌شود که winbindd اطلاعات وضعیت را در فایل لاگ winbind بنویسد.

فایل‌های لاگ در نام فایلی که با پارامتر log file تعیین شده است ذخیره می‌شوند.

/etc/nsswitch.conf(5)

فایل پیکربندی سوئیچ سرویس نام (NSS).

/run/samba/winbindd/pipe

پایپ (لوله) یونیکس که کلاینت‌ها از طریق آن با برنامه winbindd ارتباط برقرار می‌کنند. به دلایل امنیتی، کلاینت winbind تنها زمانی تلاش می‌کند به دیمن winbindd متصل شود که هر دو مورد دایرکتوری /run/samba/winbindd و فایل /run/samba/winbindd/pipe متعلق به کاربر ریشه (root) باشند.

گزینه winbindd socket directory این پیش‌فرض را بازنویسی می‌کند.

$STATEDIR/winbindd_privileged/pipe

پایپ یونیکس که کلاینت‌های «دارای امتیاز ویژه» (privileged) از طریق آن با برنامه winbindd ارتباط برقرار می‌کنند. به دلایل امنیتی، دسترسی به برخی توابع winbindd - مانند موارد مورد نیاز ابزار ntlm_auth - محدود شده است. به‌طور پیش‌فرض، فقط کاربران حاضر در گروه 'root' به این بخش دسترسی خواهند داشت، اما مدیر سیستم می‌تواند مجوزهای گروهی را روی $STATEDIR/winbindd_privileged تغییر دهد تا به برنامه‌هایی مانند 'squid' اجازه استفاده از ntlm_auth داده شود. توجه داشته باشید که کلاینت winbind تنها زمانی سعی می‌کند به دیمن winbindd متصل شود که هر دو مورد پوشه $STATEDIR/winbindd_privileged و فایل $STATEDIR/winbindd_privileged/pipe متعلق به کاربر ریشه (root) باشند.

گزینه state dir کنترل می‌کند که STATEDIR$ به چه مسیری اشاره دارد.

/lib/libnss_winbind.so.X

پیاده‌سازی کتابخانه سوئیچ سرویس نام (NSS).

$STATEDIR/winbindd_idmap.tdb

محل ذخیره‌سازی نگاشت rid در ویندوز NT به شناسه کاربر/گروه یونیکس. این دایرکتوری هنگام کامپایل اولیه سامبا با استفاده از گزینه --with-statedir یا گزینه state dir مشخص می‌شود. دایرکتوری پیش‌فرض در این نصب /var/lib/samba است.

$LOCKDIR/winbindd_cache.tdb

محل ذخیره‌سازی اطلاعات کش‌شده کاربر و گروه.

این صفحه راهنما بخشی از نسخه 4.24.6 از مجموعه سامبا است.

nsswitch.conf(5), samba(7), wbinfo(1), ntlm_auth(8), smb.conf(5), pam_winbind(8)

نرم‌افزار اصلی سامبا و ابزارهای مرتبط با آن توسط اندرو تریجل (Andrew Tridgell) ساخته شده‌اند. سامبا اکنون توسط تیم سامبا به عنوان یک پروژه متن‌باز مشابه روش توسعه هسته لینوکس توسعه می‌یابد.

ابزارهای wbinfo و winbindd توسط تیم پاتر (Tim Potter) نوشته شده‌اند.

تبدیل به DocBook برای سامبا 2.2 توسط جرالد کارتر (Gerald Carter) انجام شد. تبدیل به DocBook XML 4.2 برای سامبا 3.0 توسط الکساندر بوکووی (Alexander Bokovoy) صورت گرفت.

08/16/2026 Samba 4.24.6