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 Yes, this article applies to standard SMB Azure file shares LRS/ZRS. No, this article doesn't apply to NFS Azure file shares.
Berbagi file standar (GPv2), GRS/GZRS Yes, this article applies to standard SMB Azure file shares GRS/GZRS. No this article doesn't apply to NFS Azure file shares.
Berbagi file premium (FileStorage), LRS/ZRS Yes, this article applies to premium SMB Azure file shares. No, this article doesn't apply to premium NFS Azure file shares.

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

  1. 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 
  1. Jika perintah berfungsi, lewati langkah-langkah berikut dan lanjutkan ke bagian berikutnya.

  2. 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
  1. Jika ping tidak berfungsi, kembali ke prasyarat, dan pastikan VM Anda berada di VNET yang memiliki akses ke penyewa Microsoft Entra.

  2. 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 
  1. 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

  1. 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 
  1. 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)

  1. 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" 
  1. 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

  1. 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

  1. Identifikasi jalur ke smb.conf.
sudo smbd -b | grep "CONFIGFILE"
   CONFIGFILE: /etc/samba/smb.conf
  1. 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 
  1. Paksa winbind untuk memuat ulang file konfigurasi yang diubah.
sudo smbcontrol all reload-config

Bergabung dengan domain

  1. 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' 
  1. 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

  1. 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
  1. 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
  1. 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 
  1. 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

  1. 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 
  1. 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 
  1. 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: