تمكين مصادقة Active Directory عبر SMB لعملاء Linux الذين يصلون إلى ملفات Azure
لمزيد من المعلومات حول الخيارات والاعتبارات المدعومة، راجع نظرة عامة على خيارات المصادقة المستندة إلى هوية Azure Files للوصول إلى SMB.
تدعم Azure Files المصادقة المستندة إلى الهوية عبر Server Message Block (SMB) لأجهزة Linux الظاهرية (VMs) باستخدام بروتوكول مصادقة Kerberos من خلال الطرق التالية:
- Windows خدمات مجال Active Directory المحلي (AD DS)
- خدمات مجال Microsoft Entra
لاستخدام AD DS، يجب مزامنة AD DS مع معرف Microsoft Entra باستخدام Microsoft Entra الاتصال.
إشعار
تستخدم هذه المقالة Ubuntu لخطوات المثال. ستعمل التكوينات المماثلة لأجهزة RHEL وSLES، ما يسمح لك بتحميل مشاركات ملفات Azure باستخدام Active Directory.
ينطبق على
نوع مشاركة الملف | SMB | NFS |
---|---|---|
مشاركات الملفات القياسية (GPv2)، حسابات التخزين المكررة محليًا (LRS) وحسابات التخزين المكررة في المنطقة (ZRS) | ||
مشاركات الملفات القياسية (GPv2)، حساب تخزين مكرر جغرافي (GRS) أو حساب تخزين مكرر للمنطقة الجغرافية (GZRS) | ||
مشاركات الملفات المدفوعة (FileStorage)، حسابات التخزين المكررة محليًا (LRS) وحسابات التخزين المكررة في المنطقة (ZRS) |
قيود عميل Linux SMB
لا يمكنك استخدام المصادقة المستندة إلى الهوية لتحميل مشاركات Azure File على عملاء Linux في وقت التمهيد باستخدام fstab
الإدخالات لأن العميل لا يمكنه الحصول على تذكرة Kerberos في وقت مبكر بما يكفي لتحميلها في وقت التمهيد. ومع ذلك، يمكنك استخدام إدخال fstab
وتحديد noauto
الخيار. لن يؤدي هذا إلى تحميل المشاركة في وقت التمهيد، ولكنه سيسمح للمستخدم بتحميل مشاركة الملف بشكل ملائم بعد تسجيل الدخول باستخدام أمر تحميل بسيط دون جميع المعلمات. يمكنك أيضا استخدام autofs
لتحميل المشاركة عند الوصول.
المتطلبات الأساسية
قبل تمكين مصادقة AD عبر SMB لمشاركات ملفات Azure، تأكد من إكمال المتطلبات الأساسية التالية.
- جهاز Linux الظاهري (Ubuntu 18.04+ أو RHEL أو SLES VM مكافئ) يعمل على Azure. يجب أن يحتوي الجهاز الظاهري على واجهة شبكة واحدة على الأقل على VNET تحتوي على Microsoft Entra Domain Services، أو جهاز Linux ظاهري محلي مع AD DS متزامن مع معرف Microsoft Entra.
- بيانات اعتماد المستخدم أو المستخدم الجذر إلى حساب مستخدم محلي له حقوق sudo كاملة (لهذا الدليل، localadmin).
- يجب ألا يكون جهاز Linux الظاهري قد انضم إلى أي مجال AD. إذا كان بالفعل جزءا من مجال، فيجب عليه أولا ترك هذا المجال قبل أن يتمكن من الانضمام إلى هذا المجال.
- تم تكوين مستأجر Microsoft Entra بشكل كامل، مع إعداد مستخدم المجال بالفعل.
تثبيت حزمة سامبا ليس ضروريا تماما، ولكنه يمنحك بعض الأدوات المفيدة ويجلب حزما أخرى تلقائيا، مثل samba-common
و smbclient
. قم بتشغيل الأوامر التالية لتثبيته. إذا طلب منك أي قيم إدخال أثناء التثبيت، فاتركها فارغة.
sudo apt update -y
sudo apt install samba winbind libpam-winbind libnss-winbind krb5-config krb5-user keyutils cifs-utils
الأداة wbinfo
هي جزء من مجموعة سامبا. يمكن أن يكون مفيدا لأغراض المصادقة وتصحيح الأخطاء، مثل التحقق مما إذا كان يمكن الوصول إلى وحدة التحكم بالمجال، والتحقق من المجال الذي انضم إليه الجهاز، والعثور على معلومات حول المستخدمين.
تأكد من أن مضيف Linux يحتفظ بالوقت متزامنا مع خادم المجال. راجع وثائق توزيع Linux الخاص بك. بالنسبة لبعض توزيعات، يمكنك القيام بذلك باستخدام systemd-timesyncd. قم بالتحرير /etc/systemd/timesyncd.conf
باستخدام محرر النص المفضل لديك لتضمين ما يلي:
[Time]
NTP=onpremaadint.com
FallbackNTP=ntp.ubuntu.com
ثم أعد تشغيل الخدمة:
sudo systemctl restart systemd-timesyncd.service
تمكين مصادقة AD Kerberos
اتبع هذه الخطوات لتمكين مصادقة AD Kerberos. قد تكون وثائق Samba هذه مفيدة كمرجع.
تأكد من أن خادم المجال قابل للوصول وقابل للاكتشاف
- تأكد من أن خوادم DNS المتوفرة تحتوي على عناوين IP لخادم المجال.
systemd-resolve --status
Global
DNSSEC NTA: 10.in-addr.arpa
16.172.in-addr.arpa
168.192.in-addr.arpa
17.172.in-addr.arpa
18.172.in-addr.arpa
19.172.in-addr.arpa
20.172.in-addr.arpa
21.172.in-addr.arpa
22.172.in-addr.arpa
23.172.in-addr.arpa
24.172.in-addr.arpa
25.172.in-addr.arpa
26.172.in-addr.arpa
27.172.in-addr.arpa
28.172.in-addr.arpa
29.172.in-addr.arpa
30.172.in-addr.arpa
31.172.in-addr.arpa
corp
d.f.ip6.arpa
home
internal
intranet
lan
local
private
test
Link 2 (eth0)
Current Scopes: DNS
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNS Servers: 10.0.2.5
10.0.2.4
10.0.0.41
DNS Domain: domain1.contoso.com
إذا كان الأمر يعمل، فتخط الخطوات التالية وانتقل إلى القسم التالي.
إذا لم يعمل، فتأكد من أن عناوين IP لخادم المجال تعمل على اختبار اتصال.
ping 10.0.2.5
PING 10.0.2.5 (10.0.2.5) 56(84) bytes of data.
64 bytes from 10.0.2.5: icmp_seq=1 ttl=128 time=0.898 ms
64 bytes from 10.0.2.5: icmp_seq=2 ttl=128 time=0.946 ms
^C
--- 10.0.2.5 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 0.898/0.922/0.946/0.024 ms
إذا لم يعمل اختبار الاتصال، فارجع إلى المتطلبات الأساسية، وتأكد من أن الجهاز الظاهري الخاص بك على VNET لديه حق الوصول إلى مستأجر Microsoft Entra.
إذا كانت عناوين IP تعمل على اختبار الاتصال ولكن لم يتم اكتشاف خوادم DNS تلقائيا، يمكنك إضافة خوادم DNS يدويا. تحرير
/etc/netplan/50-cloud-init.yaml
باستخدام محرر النص المفضل لديك.
# This file is generated from information provided by the datasource. Changes
# to it will not persist across an instance reboot. To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
ethernets:
eth0:
dhcp4: true
dhcp4-overrides:
route-metric: 100
dhcp6: false
match:
macaddress: 00:22:48:03:6b:c5
set-name: eth0
nameservers:
addresses: [10.0.2.5, 10.0.2.4]
version: 2
ثم قم بتطبيق التغييرات:
sudo netplan --debug apply
- يفترض Winbind أن خادم DHCP يحتفظ بسجلات DNS للمجال محدثة. ومع ذلك، هذا غير صحيح ل Azure DHCP. لإعداد العميل لإجراء تحديثات DDNS، استخدم هذا الدليل لإنشاء برنامج نصي للشبكة. إليك نموذج البرنامج النصي الذي يعيش في
/etc/dhcp/dhclient-exit-hooks.d/ddns-update
.
#!/bin/sh
# only execute on the primary nic
if [ "$interface" != "eth0" ]
then
return
fi
# When you have a new IP, perform nsupdate
if [ "$reason" = BOUND ] || [ "$reason" = RENEW ] ||
[ "$reason" = REBIND ] || [ "$reason" = REBOOT ]
then
host=`hostname -f`
nsupdatecmds=/var/tmp/nsupdatecmds
echo "update delete $host a" > $nsupdatecmds
echo "update add $host 3600 a $new_ip_address" >> $nsupdatecmds
echo "send" >> $nsupdatecmds
nsupdate $nsupdatecmds
fi
الاتصال إلى Microsoft Entra Domain Services وتأكد من أن الخدمات قابلة للاكتشاف
- تأكد من أنك قادر على اختبار اتصال خادم المجال باسم المجال.
ping contosodomain.contoso.com
PING contosodomain.contoso.com (10.0.2.4) 56(84) bytes of data.
64 bytes from pwe-oqarc11l568.internal.cloudapp.net (10.0.2.4): icmp_seq=1 ttl=128 time=1.41 ms
64 bytes from pwe-oqarc11l568.internal.cloudapp.net (10.0.2.4): icmp_seq=2 ttl=128 time=1.02 ms
64 bytes from pwe-oqarc11l568.internal.cloudapp.net (10.0.2.4): icmp_seq=3 ttl=128 time=0.740 ms
64 bytes from pwe-oqarc11l568.internal.cloudapp.net (10.0.2.4): icmp_seq=4 ttl=128 time=0.925 ms
^C
--- contosodomain.contoso.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3016ms
rtt min/avg/max/mdev = 0.740/1.026/1.419/0.248 ms
- تأكد من أنه يمكنك اكتشاف خدمات Microsoft Entra على الشبكة.
nslookup
> set type=SRV
> _ldap._tcp.contosodomain.contoso.com.
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
_ldap._tcp.contosodomain.contoso.com service = 0 100 389 pwe-oqarc11l568.contosodomain.contoso.com.
_ldap._tcp.contosodomain.contoso.com service = 0 100 389 hxt4yo--jb9q529.contosodomain.contoso.com.
إعداد اسم المضيف واسم المجال المؤهل بالكامل (FQDN)
- باستخدام محرر النص، قم بتحديث
/etc/hosts
الملف ب FQDN النهائي (بعد الانضمام إلى المجال) والاسم المستعار للمضيف. لا يهم عنوان IP في الوقت الحالي لأنه سيتم استخدام هذا السطر بشكل أساسي لترجمة اسم المضيف القصير إلى FQDN. لمزيد من التفاصيل، راجع إعداد سامبا كعضو في المجال.
127.0.0.1 contosovm.contosodomain.contoso.com contosovm
#cmd=sudo vim /etc/hosts
#then enter this value instead of localhost "ubuntvm.contosodomain.contoso.com UbuntuVM"
- الآن، يجب حل اسم المضيف الخاص بك. يمكنك تجاهل عنوان IP الذي يحله في الوقت الحالي. يجب حل اسم المضيف القصير إلى FQDN.
getent hosts contosovm
127.0.0.1 contosovm.contosodomain.contoso.com contosovm
dnsdomainname
contosodomain.contoso.com
hostname -f
contosovm.contosodomain.contoso.com
إشعار
تتطلب بعض توزيعات تشغيل hostnamectl
الأمر من أجل تحديث اسم المضيف -f:
hostnamectl set-hostname contosovm.contosodomain.contoso.com
إعداد krb5.conf
- تكوين
/etc/krb5.conf
بحيث يمكن الاتصال بمركز توزيع مفتاح Kerberos (KDC) مع خادم المجال للمصادقة. لمزيد من المعلومات، راجع وثائق MIT Kerberos. إليك نموذج/etc/krb5.conf
ملف.
[libdefaults]
default_realm = CONTOSODOMAIN.CONTOSO.COM
dns_lookup_realm = false
dns_lookup_kdc = true
إعداد smb.conf
- حدد المسار إلى
smb.conf
.
sudo smbd -b | grep "CONFIGFILE"
CONFIGFILE: /etc/samba/smb.conf
- قم بتغيير تكوين SMB ليكون عضوا في المجال. لمزيد من المعلومات، راجع إعداد سامبا كعضو في المجال. إليك نموذج
smb.conf
ملف.
إشعار
هذا المثال مخصص ل Microsoft Entra Domain Services، والتي نوصي بإعدادها backend = rid
عند تكوين idmap. قد يفضل مستخدمو AD DS المحليون اختيار خلفية idmap مختلفة.
[global]
workgroup = CONTOSODOMAIN
security = ADS
realm = CONTOSODOMAIN.CONTOSO.COM
winbind refresh tickets = Yes
vfs objects = acl_xattr
map acl inherit = Yes
store dos attributes = Yes
dedicated keytab file = /etc/krb5.keytab
kerberos method = secrets and keytab
winbind use default domain = Yes
load printers = No
printing = bsd
printcap name = /dev/null
disable spoolss = Yes
log file = /var/log/samba/log.%m
log level = 1
idmap config * : backend = tdb
idmap config * : range = 3000-7999
idmap config CONTOSODOMAIN : backend = rid
idmap config CONTOSODOMAIN : range = 10000-999999
template shell = /bin/bash
template homedir = /home/%U
- فرض winbind لإعادة تحميل ملف التكوين الذي تم تغييره.
sudo smbcontrol all reload-config
الانضمام إلى المجال
net ads join
استخدم الأمر للانضمام إلى المضيف إلى مجال Microsoft Entra Domain Services. إذا طرح الأمر خطأ، فراجع استكشاف أخطاء أعضاء مجال samba وإصلاحها لحل المشكلة.
sudo net ads join -U contososmbadmin # user - garead
Enter contososmbadmin's password:
Using short domain name -- CONTOSODOMAIN
Joined 'CONTOSOVM' to dns domain 'contosodomain.contoso.com'
- تأكد من وجود سجل DNS لهذا المضيف على خادم المجال.
nslookup contosovm.contosodomain.contoso.com 10.0.2.5
Server: 10.0.2.5
Address: 10.0.2.5#53
Name: contosovm.contosodomain.contoso.com
Address: 10.0.0.8
إذا كان المستخدمون سيسجلون الدخول بنشاط إلى أجهزة العميل أو الأجهزة الظاهرية والوصول إلى مشاركات ملفات Azure، فستحتاج إلى إعداد nsswitch.conf وتكوين PAM ل winbind. إذا كان الوصول سيقتصر على التطبيقات الممثلة بحساب مستخدم أو حساب كمبيوتر يحتاج إلى مصادقة Kerberos للوصول إلى مشاركة الملف، فيمكنك تخطي هذه الخطوات.
إعداد nsswitch.conf
- الآن بعد أن انضم المضيف إلى المجال، تحتاج إلى وضع مكتبات winbind في الأماكن للبحث عنها عند البحث عن المستخدمين والمجموعات. قم بذلك عن طريق تحديث إدخالات passwd والمجموعة في
nsswitch.conf
. استخدم محرر النص لتحرير/etc/nsswitch.conf
وإضافة الإدخالات التالية:
passwd: compat systemd winbind
group: compat systemd winbind
- تمكين خدمة winbind لبدء التشغيل التلقائي عند إعادة التشغيل.
sudo systemctl enable winbind
Synchronizing state of winbind.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable winbind
- ثم أعد تشغيل الخدمة.
sudo systemctl restart winbind
sudo systemctl status winbind
winbind.service - Samba Winbind Daemon
Loaded: loaded (/lib/systemd/system/winbind.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2020-04-24 09:34:31 UTC; 10s ago
Docs: man:winbindd(8)
man:samba(7)
man:smb.conf(5)
Main PID: 27349 (winbindd)
Status: "winbindd: ready to serve connections..."
Tasks: 2 (limit: 4915)
CGroup: /system.slice/winbind.service
├─27349 /usr/sbin/winbindd --foreground --no-process-group
└─27351 /usr/sbin/winbindd --foreground --no-process-group
Apr 24 09:34:31 contosovm systemd[1]: Starting Samba Winbind Daemon...
Apr 24 09:34:31 contosovm winbindd[27349]: [2020/04/24 09:34:31.724211, 0] ../source3/winbindd/winbindd_cache.c:3170(initialize_winbindd_cache)
Apr 24 09:34:31 contosovm winbindd[27349]: initialize_winbindd_cache: clearing cache and re-creating with version number 2
Apr 24 09:34:31 contosovm winbindd[27349]: [2020/04/24 09:34:31.725486, 0] ../lib/util/become_daemon.c:124(daemon_ready)
Apr 24 09:34:31 contosovm systemd[1]: Started Samba Winbind Daemon.
Apr 24 09:34:31 contosovm winbindd[27349]: STATUS=daemon 'winbindd' finished starting up and ready to serve connections
- تأكد من اكتشاف مستخدمي المجال والمجموعات.
getent passwd contososmbadmin
contososmbadmin:*:12604:10513::/home/contososmbadmin:/bin/bash
getent group 'domain users'
domain users:x:10513:
إذا لم يعمل ما سبق، فتحقق مما إذا كان يمكن الوصول إلى وحدة التحكم بالمجال باستخدام أداة wbinfo:
wbinfo --ping-dc
تكوين PAM ل winbind
- تحتاج إلى وضع winbind في مكدس المصادقة بحيث تتم مصادقة مستخدمي المجال من خلال winbind عن طريق تكوين PAM (وحدة مصادقة التوصيل) ل winbind. يضمن الأمر الثاني إنشاء homedir لمستخدم مجال عند تسجيل الدخول الأول إلى هذا النظام.
sudo pam-auth-update --enable winbind
sudo pam-auth-update --enable mkhomedir
- تأكد من أن تكوين مصادقة PAM يحتوي على الوسيطات التالية في
/etc/pam.d/common-auth
:
grep pam_winbind.so /etc/pam.d/common-auth
auth [success=1 default=ignore] pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass
- يجب أن تكون الآن قادرا على تسجيل الدخول إلى هذا النظام كمستخدم المجال، إما من خلال ssh أو su أو أي وسيلة أخرى للمصادقة.
su - contososmbadmin
Password:
Creating directory '/home/contososmbadmin'.
contososmbadmin@contosovm:~$ pwd
/home/contososmbadmin
contososmbadmin@contosovm:~$ id
uid=12604(contososmbadmin) gid=10513(domain users) groups=10513(domain users),10520(group policy creator owners),10572(denied rodc password replication group),11102(dnsadmins),11104(aad dc administrators),11164(group-readwrite),11165(fileshareallaccess),12604(contososmbadmin)
التحقق من التكوين
للتحقق من ربط جهاز العميل بالمجال، ابحث عن FQDN للعميل على وحدة تحكم المجال وابحث عن إدخال DNS المدرج لهذا العميل المحدد. في كثير من الحالات، <dnsserver>
هو نفس اسم المجال الذي انضم إليه العميل.
nslookup <clientname> <dnsserver>
بعد ذلك، استخدم klist
الأمر لعرض التذاكر في ذاكرة التخزين المؤقت Kerberos. يجب أن يكون هناك إدخال يبدأ ب krbtgt
الذي يبدو مشابها لما يلي:
krbtgt/CONTOSODOMAIN.CONTOSO.COM@CONTOSODOMAIN.CONTOSO.COM
إذا لم تقم بتكوين PAM ل winbind، klist
فقد لا تظهر إدخال التذكرة. في هذه الحالة، يمكنك مصادقة المستخدم يدويا للحصول على التذاكر:
wbinfo -K contososmbadmin
يمكنك أيضا تشغيل الأمر كجزء من برنامج نصي:
wbinfo -K 'contososmbadmin%SUPERSECRETPASSWORD'
تحميل مشاركة الملف
بعد تمكين مصادقة Kerberos AD (أو Microsoft Entra ID) والانضمام إلى مجال جهاز Linux الظاهري الخاص بك، يمكنك تحميل مشاركة الملف.
للحصول على إرشادات تحميل مفصلة، راجع تحميل مشاركة ملف Azure عند الطلب مع التحميل.
استخدم خيار التحميل الإضافي التالي مع جميع نماذج التحكم في الوصول لتمكين أمان Kerberos: sec=krb5
إشعار
تدعم هذه الميزة فقط نموذج التحكم في الوصول المفروض من قبل الخادم باستخدام NT ACLs بدون وحدات بت في الوضع. أدوات Linux التي تقوم بتحديث NT ACLs هي الحد الأدنى، لذا قم بتحديث قوائم التحكم بالوصول من خلال Windows. التحكم في الوصول المفروض من قبل العميل (modefromsid,idsfromsid
) ونماذج التحكم في الوصول المترجمة من قبل العميل (cifsacl
) غير مدعومة حاليا.
خيارات التحميل الأخرى
تحميل مستخدم واحد مقابل تحميل متعدد المستخدمين
في حالة استخدام تحميل مستخدم واحد، يتم الوصول إلى نقطة التحميل من قبل مستخدم واحد لمجال AD ولا تتم مشاركتها مع مستخدمين آخرين للمجال. يحدث كل وصول إلى الملف في سياق المستخدم الذي تم استخدام بيانات اعتماد krb5 الخاصة به لتحميل مشاركة الملف. أي مستخدم على النظام المحلي يصل إلى نقطة التحميل سوف ينتحل شخصية هذا المستخدم.
في حالة استخدام التحميل متعدد المستخدمين، لا تزال هناك نقطة تحميل واحدة، ولكن يمكن لمستخدمي AD المتعددين الوصول إلى نفس نقطة التحميل هذه. في السيناريوهات التي يصل فيها العديد من المستخدمين على نفس العميل إلى نفس المشاركة، ويتم تكوين النظام ل Kerberos وتثبيته باستخدام sec=krb5
، ضع في multiuser
اعتبارك استخدام خيار التحميل.
أذونات الملف
أذونات الملف مهمة، خاصة إذا كان كل من عملاء Linux وWindows سيوصولون إلى مشاركة الملف. لتحويل أذونات الملفات إلى DACLs على الملفات، استخدم خيار تحميل افتراضي مثل file_mode=<>،dir_mode=<>. يتم فرض أذونات الملف المحددة على أنها file_mode dir_mode داخل العميل فقط. يفرض الخادم التحكم في الوصول استنادا إلى واصف أمان الملف أو الدليل.
ملكية الملفات
ملكية الملفات مهمة، خاصة إذا كان كل من عملاء Linux وWindows سيوصولون إلى مشاركة الملف. اختر أحد خيارات التحميل التالية لتحويل ملكية الملفات UID/GID إلى معرف الأمان الخاص بالمالك/المجموعة على ملف DACL:
- استخدم افتراضيا مثل uid=<>,gid=<>
- تكوين تعيين UID/GID عبر RFC2307 وActive Directory (nss_winbind أو nss_sssd)
اتساق ذاكرة التخزين المؤقت لسمة الملف
الأداء مهم، حتى إذا لم تكن سمات الملف دقيقة دائما. القيمة الافتراضية ل actimeo هي 1 (ثانية)، ما يعني أنه يتم جلب سمات الملف مرة أخرى من الخادم إذا كانت السمات المخزنة مؤقتا قديمة أكثر من ثانية. تعني زيادة القيمة إلى 60 أن السمات مخزنة مؤقتا لمدة دقيقة واحدة على الأقل. بالنسبة لمعظم حالات الاستخدام، نوصي باستخدام قيمة 30 لهذا الخيار (actimeo=30).
للحصول على نواة أحدث، ضع في اعتبارك تعيين ميزات actimeo بشكل أكثر دقة. يمكنك استخدام acdirmax للتخزين المؤقت لإعادة التحقق من إدخال الدليل و acregmax للتخزين المؤقت لبيانات تعريف الملف، على سبيل المثال acdirmax=60,acregmax=5.
الخطوة التالية
لمزيد من المعلومات حول كيفية تحميل مشاركة ملف SMB على Linux، راجع: