Mengaktifkan autentikasi Direktori Aktif melalui SMB untuk klien Linux yang mengakses Azure Files
Untuk informasi selengkapnya tentang opsi dan pertimbangan yang didukung, lihat Gambaran Umum opsi autentikasi berbasis identitas Azure Files untuk akses SMB.
Azure Files mendukung autentikasi berbasis identitas melalui Server Message Block (SMB) untuk komputer virtual (VM) Linux menggunakan protokol autentikasi Kerberos melalui metode berikut:
- Windows Active Directory Domain Services (AD DS) lokal
- Microsoft Entra Domain Services
Untuk menggunakan opsi pertama (AD DS), Anda harus menyinkronkan AD DS anda ke MICROSOFT Entra ID menggunakan Microsoft Entra Koneksi.
Catatan
Artikel ini menggunakan Ubuntu untuk langkah-langkah contoh. Konfigurasi serupa akan berfungsi untuk mesin RHEL dan SLES, memungkinkan Anda memasang berbagi file Azure menggunakan Direktori Aktif.
Berlaku untuk
Jenis berbagi File | SMB | NFS |
---|---|---|
Berbagi file standar (GPv2), LRS/ZRS | ||
Berbagi file standar (GPv2), GRS/GZRS | ||
Berbagi file premium (FileStorage), LRS/ZRS |
Batasan klien Linux SMB
Anda tidak dapat menggunakan autentikasi berbasis identitas untuk memasang berbagi Azure File pada klien Linux pada waktu boot menggunakan fstab
entri karena klien tidak bisa mendapatkan tiket Kerberos cukup awal untuk dipasang pada waktu boot. Namun, Anda dapat menggunakan fstab
entri dan menentukan noauto
opsi . Ini tidak akan memasang berbagi pada waktu boot, tetapi akan memungkinkan pengguna untuk memasang berbagi file dengan nyaman setelah mereka masuk menggunakan perintah pemasangan sederhana tanpa semua parameter. Anda juga dapat menggunakan autofs
untuk memasang berbagi saat mengakses.
Prasyarat
Sebelum Anda mengaktifkan autentikasi AD melalui SMB untuk berbagi file Azure, pastikan Anda telah menyelesaikan prasyarat berikut.
- VM Linux (Ubuntu 18.04+ atau RHEL atau SLES VM yang setara) yang berjalan di Azure. VM harus memiliki setidaknya satu antarmuka jaringan di VNET yang berisi Microsoft Entra Domain Services, atau VM Linux lokal dengan AD DS yang disinkronkan ke ID Microsoft Entra.
- Pengguna root atau kredensial pengguna ke akun pengguna lokal yang memiliki hak sudo penuh (untuk panduan ini, localadmin).
- VM Linux tidak boleh bergabung dengan domain AD apa pun. Jika sudah menjadi bagian dari domain, domain tersebut harus terlebih dahulu meninggalkan domain tersebut sebelum dapat bergabung dengan domain ini.
- Penyewa Microsoft Entra dikonfigurasi sepenuhnya, dengan pengguna domain sudah disiapkan.
Menginstal paket samba tidak benar-benar diperlukan, tetapi memberi Anda beberapa alat yang berguna dan membawa paket lain secara otomatis, seperti samba-common
dan smbclient
. Jalankan perintah berikut untuk menginstalnya. Jika Anda dimintai nilai input apa pun selama penginstalan, biarkan kosong.
sudo apt update -y
sudo apt install samba winbind libpam-winbind libnss-winbind krb5-config krb5-user keyutils cifs-utils
Alat ini wbinfo
adalah bagian dari samba suite. Ini dapat berguna untuk tujuan autentikasi dan penelusuran kesalahan, seperti memeriksa apakah pengendali domain dapat dijangkau, memeriksa domain apa yang digabungkan dengan komputer, dan menemukan informasi tentang pengguna.
Pastikan host Linux menjaga waktu tetap sinkron dengan server domain. Lihat dokumentasi untuk distribusi Linux Anda. Untuk beberapa distro, Anda dapat melakukan ini menggunakan systemd-timesyncd. Edit /etc/systemd/timesyncd.conf
dengan editor teks favorit Anda untuk menyertakan yang berikut ini:
[Time]
NTP=onpremaadint.com
FallbackNTP=ntp.ubuntu.com
Kemudian mulai ulang layanan:
sudo systemctl restart systemd-timesyncd.service
Mengaktifkan autentikasi AD Kerberos
Ikuti langkah-langkah ini untuk mengaktifkan autentikasi AD Kerberos. Dokumentasi Samba ini mungkin berguna sebagai referensi.
Pastikan server domain dapat dijangkau dan dapat ditemukan
- Pastikan bahwa server DNS yang disediakan berisi alamat IP server domain.
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
Jika perintah berfungsi, lewati langkah-langkah berikut dan lanjutkan ke bagian berikutnya.
Jika tidak berhasil, pastikan alamat IP server domain melakukan ping.
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
Jika ping tidak berfungsi, kembali ke prasyarat, dan pastikan VM Anda berada di VNET yang memiliki akses ke penyewa Microsoft Entra.
Jika alamat IP melakukan pinging tetapi server DNS tidak ditemukan secara otomatis, Anda bisa menambahkan server DNS secara manual. Edit
/etc/netplan/50-cloud-init.yaml
dengan editor teks favorit Anda.
# 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
Kemudian terapkan perubahan:
sudo netplan --debug apply
- Winbind mengasumsikan bahwa server DHCP selalu memperbarui catatan DNS domain. Namun, ini tidak berlaku untuk Azure DHCP. Untuk menyiapkan klien untuk membuat pembaruan DDNS, gunakan panduan ini untuk membuat skrip jaringan. Berikut adalah contoh skrip yang tinggal di
/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
Koneksi ke Microsoft Entra Domain Services dan pastikan layanan dapat ditemukan
- Pastikan Anda dapat melakukan ping pada server domain dengan nama domain.
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
- Pastikan Anda dapat menemukan layanan Microsoft Entra di jaringan.
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.
Menyiapkan nama host dan nama domain yang sepenuhnya memenuhi syarat (FQDN)
- Menggunakan editor teks Anda, perbarui
/etc/hosts
file dengan FQDN akhir (setelah bergabung dengan domain) dan alias untuk host. Alamat IP tidak masalah untuk saat ini karena baris ini terutama akan digunakan untuk menerjemahkan nama host pendek ke FQDN. Untuk detail selengkapnya, lihat Menyiapkan Samba sebagai Anggota Domain.
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"
- Sekarang, nama host Anda harus diselesaikan. Anda dapat mengabaikan alamat IP yang diselesaikannya untuk saat ini. Nama host pendek harus diselesaikan ke FQDN.
getent hosts contosovm
127.0.0.1 contosovm.contosodomain.contoso.com contosovm
dnsdomainname
contosodomain.contoso.com
hostname -f
contosovm.contosodomain.contoso.com
Catatan
Beberapa distro mengharuskan Anda menjalankan hostnamectl
perintah agar nama host -f diperbarui:
hostnamectl set-hostname contosovm.contosodomain.contoso.com
Menyiapkan krb5.conf
- Konfigurasikan
/etc/krb5.conf
sehingga pusat distribusi kunci Kerberos (KDC) dengan server domain dapat dihubungi untuk autentikasi. Untuk informasi selengkapnya, lihat Dokumentasi MIT Kerberos. Berikut adalah file sampel/etc/krb5.conf
.
[libdefaults]
default_realm = CONTOSODOMAIN.CONTOSO.COM
dns_lookup_realm = false
dns_lookup_kdc = true
Menyiapkan smb.conf
- Identifikasi jalur ke
smb.conf
.
sudo smbd -b | grep "CONFIGFILE"
CONFIGFILE: /etc/samba/smb.conf
- Ubah konfigurasi SMB untuk bertindak sebagai anggota domain. Untuk informasi selengkapnya, lihat Menyiapkan samba sebagai anggota domain. Berikut adalah file sampel
smb.conf
.
Catatan
Contoh ini untuk Microsoft Entra Domain Services, yang sebaiknya backend = rid
diatur saat mengonfigurasi idmap. Pengguna AD DS lokal mungkin lebih suka memilih backend idmap yang berbeda.
[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
- Paksa winbind untuk memuat ulang file konfigurasi yang diubah.
sudo smbcontrol all reload-config
Bergabung dengan domain
net ads join
Gunakan perintah untuk bergabung dengan host ke domain Microsoft Entra Domain Services. Jika perintah melemparkan kesalahan, lihat Pemecahan masalah anggota domain samba untuk mengatasi masalah tersebut.
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'
- Pastikan bahwa catatan DNS ada untuk host ini di server domain.
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
Jika pengguna akan secara aktif masuk ke komputer klien atau VM dan mengakses berbagi file Azure, Anda perlu menyiapkan nsswitch.conf dan mengonfigurasi PAM untuk winbind. Jika akses akan dibatasi pada aplikasi yang diwakili oleh akun pengguna atau akun komputer yang memerlukan autentikasi Kerberos untuk mengakses berbagi file, maka Anda dapat melewati langkah-langkah ini.
Menyiapkan nsswitch.conf
- Sekarang setelah host bergabung ke domain, Anda perlu menempatkan pustaka winbind di tempat yang perlu dicari saat mencari pengguna dan grup. Lakukan ini dengan memperbarui entri passwd dan grup di
nsswitch.conf
. Gunakan editor teks Anda untuk mengedit/etc/nsswitch.conf
dan menambahkan entri berikut:
passwd: compat systemd winbind
group: compat systemd winbind
- Aktifkan layanan winbind untuk memulai secara otomatis pada boot ulang.
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
- Kemudian, mulai ulang layanan.
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
- Pastikan bahwa pengguna dan grup domain ditemukan.
getent passwd contososmbadmin
contososmbadmin:*:12604:10513::/home/contososmbadmin:/bin/bash
getent group 'domain users'
domain users:x:10513:
Jika hal di atas tidak berfungsi, periksa apakah pengendali domain dapat dijangkau menggunakan alat wbinfo:
wbinfo --ping-dc
Mengonfigurasi PAM untuk winbind
- Anda perlu menempatkan winbind di tumpukan autentikasi sehingga pengguna domain diautentikasi melalui winbind dengan mengonfigurasi PAM (Pluggable Authentication Module) untuk winbind. Perintah kedua memastikan bahwa homedir dibuat untuk pengguna domain saat pertama kali masuk ke sistem ini.
sudo pam-auth-update --enable winbind
sudo pam-auth-update --enable mkhomedir
- Pastikan konfigurasi autentikasi PAM memiliki argumen berikut di
/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
- Anda sekarang dapat masuk ke sistem ini sebagai pengguna domain, baik melalui ssh, su, atau cara autentikasi lainnya.
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)
Memverifikasi konfigurasi
Untuk memverifikasi bahwa komputer klien bergabung ke domain, cari FQDN klien pada pengendali domain dan temukan entri DNS yang tercantum untuk klien tertentu ini. Dalam banyak kasus, <dnsserver>
sama dengan nama domain tempat klien bergabung.
nslookup <clientname> <dnsserver>
Selanjutnya, gunakan klist
perintah untuk melihat tiket di cache Kerberos. Harus ada entri yang dimulai dengan yang terlihat mirip dengan krbtgt
:
krbtgt/CONTOSODOMAIN.CONTOSO.COM@CONTOSODOMAIN.CONTOSO.COM
Jika Anda tidak mengonfigurasi PAM untuk winbind, klist
mungkin tidak menampilkan entri tiket. Dalam hal ini, Anda dapat mengautentikasi pengguna secara manual untuk mendapatkan tiket:
wbinfo -K contososmbadmin
Anda juga dapat menjalankan perintah sebagai bagian dari skrip:
wbinfo -K 'contososmbadmin%SUPERSECRETPASSWORD'
Memasang berbagi file
Setelah mengaktifkan autentikasi Kerberos AD (atau ID Microsoft Entra) dan bergabung dengan domain VM Linux, Anda dapat memasang berbagi file.
Untuk instruksi pemasangan terperinci, lihat Memasang berbagi file Azure sesuai permintaan dengan pemasangan.
Gunakan opsi pemasangan tambahan berikut dengan semua model kontrol akses untuk mengaktifkan keamanan Kerberos: sec=krb5
Catatan
Fitur ini hanya mendukung model kontrol akses yang diberlakukan server menggunakan ACL NT tanpa bit mode. Alat Linux yang memperbarui ACL NT minimal, jadi perbarui ACL melalui Windows. Kontrol akses yang diberlakukan klien (modefromsid,idsfromsid
) dan model kontrol akses yang diterjemahkan klien (cifsacl
) saat ini tidak didukung.
Opsi pemasangan lainnya
Pengguna tunggal versus pemasangan multi-pengguna
Dalam kasus penggunaan pemasangan pengguna tunggal, titik pemasangan diakses oleh satu pengguna domain AD dan tidak dibagikan dengan pengguna domain lain. Setiap akses file terjadi dalam konteks pengguna yang kredensial krb5-nya digunakan untuk memasang berbagi file. Setiap pengguna di sistem lokal yang mengakses titik pemasangan akan meniru pengguna tersebut.
Dalam kasus penggunaan pemasangan multi-pengguna, masih ada satu titik pemasangan, tetapi beberapa pengguna AD dapat mengakses titik pemasangan yang sama. Dalam skenario di mana beberapa pengguna pada klien yang sama akan mengakses berbagi yang sama, dan sistem dikonfigurasi untuk Kerberos dan dipasang dengan sec=krb5
, pertimbangkan untuk menggunakan multiuser
opsi pemasangan.
Izin file
Izin file penting, terutama jika klien Linux dan Windows akan mengakses berbagi file. Untuk mengonversi izin file ke DACL pada file, gunakan opsi pemasangan default seperti file_mode=<>,dir_mode=<>. Izin file yang ditentukan sebagai file_mode dan dir_mode hanya diberlakukan dalam klien. Server memberlakukan kontrol akses berdasarkan deskriptor keamanan file atau direktori.
Kepemilikan file
Kepemilikan file penting, terutama jika klien Linux dan Windows akan mengakses berbagi file. Pilih salah satu opsi pemasangan berikut untuk mengonversi UID/GID kepemilikan file ke SID pemilik/grup pada DACL file:
- Gunakan default seperti uid=<>,gid=<>
- Mengonfigurasi pemetaan UID/GID melalui RFC2307 dan Direktori Aktif (nss_winbind atau nss_sssd)
Koherensi cache atribut file
Performa penting, bahkan jika atribut file tidak selalu akurat. Nilai default untuk actimeo adalah 1 (detik), yang berarti bahwa atribut file diambil lagi dari server jika atribut yang di-cache berusia lebih dari 1 detik. Meningkatkan nilai menjadi 60 berarti atribut di-cache setidaknya selama 1 menit. Untuk sebagian besar kasus penggunaan, sebaiknya gunakan nilai 30 untuk opsi ini (actimeo=30).
Untuk kernel yang lebih baru, pertimbangkan untuk mengatur fitur actimeo secara lebih terperinci. Anda dapat menggunakan acdirmax untuk penembolokan revalidasi entri direktori dan acregmax untuk penembolokan metadata file, misalnya acdirmax=60,acregmax=5.
Langkah berikutnya
Untuk informasi selengkapnya tentang cara memasang berbagi file SMB di Linux, lihat: