IDMAP_SCRIPT(8) System Administration tools IDMAP_SCRIPT(8)

idmap_script - بک‌اند idmap_script مربوط به Samba برای Winbind

پلاگین idmap_script جایگزینی برای بک‌اند idmap_tdb2 است که توسط winbindd جهت ذخیره جدول‌های نگاشت SID/uid/gid در محیط‌های خوشه‌ای به همراه Samba و CTDB به کار می‌رود. این بک‌اند فقط‌خواندنی است و از یک اسکریپت برای انجام نگاشت استفاده می‌کند.

این بک‌اند بر پایه بک‌اند idmap_tdb2 توسعه یافته است و نگاشت‌های SID/uid/gid را در یک TDB ذخیره نمی‌کند، زیرا winbind_cache tdb پس از ارائه نگاشت‌ها، آن‌ها را در خود ذخیره خواهد کرد.

range = low - high

محدوده در دسترس UID و GID منطبق را مشخص می‌کند که این بک‌اند روی آن مرجعیت دارد.

script

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

بک‌اند نگاشت شناسه script از یک برنامه خارجی برای انجام نگاشت‌های شناسه از طریق گزینه /etc/samba/smb.conf با عنوان idmap config * : script یا شکل قدیمی و منسوخ‌شده آن idmap : script پشتیبانی می‌کند.

این اسکریپت باید گزینه‌های خط فرمان زیر را بپذیرد.

SIDTOID S-1-xxxx
IDTOSID UID xxxx
IDTOSID GID xxxx
IDTOSID XID xxxx

و باید یکی از پاسخ‌های زیر را به عنوان یک خط متن منفرد برگرداند.

UID:yyyy
GID:yyyy
XID:yyyy
SID:ssss
ERR:yyyy

شناسه XID نشان می‌دهد که شناسه بازگردانده‌شده باید هم یک UID و هم یک GID باشد. به این معنی که یک ID_TYPE_BOTH را درخواست می‌کند، اما در نهایت بر عهده اسکریپت است که آیا می‌تواند به این درخواست پاسخ دهد یا خیر. اسکریپت می‌تواند فقط یک نگاشت UID یا GID را برگرداند.

این مثال نحوه استفاده از script را به عنوان بک‌اند پیش‌فرض idmap با کمک یک برنامه خارجی از طریق پارامتر script نشان می‌دهد:

[global]
idmap config * : backend = script
idmap config * : range = 1000000-2000000
idmap config * : script = /usr/local/samba/bin/idmap_script.sh

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

#!/bin/sh
#
# Uncomment this if you want some logging
#echo $@ >> /tmp/idmap.sh.log
if [ "$1" == "SIDTOID" ]
then
	# Note. The number returned has to be within the range defined
	#echo "Sending UID:1000005" >> /tmp/idmap.sh.log
	echo "UID:1000005"
	exit 0
else
	#echo "Sending ERR: No idea what to do" >> /tmp/idmap.sh.log
	echo "ERR: No idea what to do"
	exit 1
fi

بدیهی است که این اسکریپت کافی نیست، زیرا احتمالاً باید از wbinfo برای تعیین اینکه آیا یک SID ورودی متعلق به یک کاربر یا گروه است استفاده کند و سپس نگاشت را در یک جدول جستجو کرده یا از سازوکار دیگری برای نگاشت SIDها به UIDها و غیره بهره ببرد.

لطفاً توجه داشته باشید که این اسکریپت با متغیر محیطی _NO_WINBINDD با مقدار 1 فراخوانی می‌شود. این کار از فراخوانی‌های بازگشتی به winbind از درون اسکریپت، هم از طریق فراخوانی‌های صریح به wbinfo و هم از طریق فراخوانی‌های ضمنی توسط nss_winbind جلوگیری می‌کند. برای نمونه، فراخوانی ls -l می‌تواند چنین بازگشت بی‌پایانی را ایجاد کند.

فراخوانی wbinfo -n و wbinfo -s از داخل یک اسکریپت idmap ایمن است. برای انجام این کار، اسکریپت باید متغیر محیطی _NO_WINBINDD را دقیقاً پیش از فراخوانی wbinfo لغو (unset) کرده و بلافاصله پس از بازگشت wbinfo مجدداً آن را روی 1 تنظیم کند تا در برابر بازگشت بی‌پایان محافظت شود.

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

08/16/2026 Samba 4.24.6