Bagikan melalui


Memasang berbagi file SMB Azure di klien Linux

Berbagi file Azure dapat dipasang dalam distribusi Linux menggunakan klien kernel SMB.

Berlaku untuk

Jenis berbagi File SMB NFS
Berbagi file standar (GPv2), LRS/ZRS Ya Tidak
Berbagi file standar (GPv2), GRS/GZRS Ya Tidak
Berbagi file premium (FileStorage), LRS/ZRS Ya Tidak

Protokol

Cara yang direkomendasikan untuk memasang berbagi file Azure di Linux menggunakan SMB 3.1.1. Secara default, Azure Files memerlukan enkripsi saat transit, yang didukung oleh SMB 3.0+. Azure Files juga mendukung SMB 2.1, yang tidak mendukung enkripsi saat transit, tetapi Anda tidak dapat memasang berbagi file Azure dengan SMB 2.1 dari wilayah Azure lain atau lokal karena alasan keamanan. Kecuali aplikasi Anda secara khusus memerlukan SMB 2.1, gunakan SMB 3.1.1. Dukungan SMB 2.1 ditambahkan ke kernel Linux versi 3.7, jadi jika Anda menggunakan versi kernel Linux setelah 3.7, itu harus mendukung SMB 2.1.

Distribusi SMB 3.1.1 (Disarankan) SMB: 3.0
Versi kernel Linux
  • Dukungan dasar 3.1.1: 4.17
  • Pemasangan default: 5.0
  • Enkripsi AES-128-GCM: 5.3
  • Enkripsi AES-256-GCM: 5.10
  • Dukungan dasar 3.0: 3.12
  • Enkripsi AES-128-CCM: 4.11
Ubuntu Enkripsi AES-128-GCM: 18.04.5 LTS+ Enkripsi AES-128-CCM: 16.04.4 LTS+
Red Hat Enterprise Linux (RHEL)
  • Dasar: 8.0+
  • Pemasangan default: 8.2+
  • Enkripsi AES-128-GCM: 8.2+
7.5+
Debian Dasar: 10+ Enkripsi AES-128-CCM: 10+
SUSE Linux Enterprise Server Enkripsi AES-128-GCM: 15 SP2+ Enkripsi AES-128-CCM: 12 SP2+

Jika distribusi Linux Anda tidak tercantum dalam tabel di atas, Anda dapat memeriksa versi kernel Linux dengan perintah uname:

uname -r

Prasyarat

  • Pastikan paket cifs-utils diinstal. Instal versi terbaru paket cifs-utils menggunakan manajer paket pada distribusi Linux pilihan Anda.

Di Ubuntu dan Debian, gunakan apt manajer paket:

sudo apt update
sudo apt install cifs-utils

Pada distribusi lain, gunakan manajer paket yang sesuai atau kompilasi dari sumber.

  • Versi terbaru dari Azure Command Line Interface (CLI). Untuk informasi selengkapnya tentang cara memasang Azure CLI, lihat Memasang Azure CLI dan memilih sistem operasi Anda. Jika Anda lebih suka menggunakan modul Azure PowerShell di PowerShell 6+, Anda dapat; namun, instruksi dalam artikel ini adalah untuk Azure CLI.

  • Pastikan port 445 terbuka: SMB berkomunikasi melalui port TCP 445 - pastikan firewall atau ISP Anda tidak memblokir port TCP 445 dari komputer klien. Ganti lalu <your-storage-account> jalankan <your-resource-group> skrip berikut:

    RESOURCE_GROUP_NAME="<your-resource-group>"
    STORAGE_ACCOUNT_NAME="<your-storage-account>"
    
    # This command assumes you have logged in with az login
    HTTP_ENDPOINT=$(az storage account show \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $STORAGE_ACCOUNT_NAME \
        --query "primaryEndpoints.file" --output tsv | tr -d '"')
    SMBPATH=$(echo $HTTP_ENDPOINT | cut -c7-${#HTTP_ENDPOINT})
    FILE_HOST=$(echo $SMBPATH | tr -d "/")
    
    nc -zvw3 $FILE_HOST 445
    

    Jika koneksi berhasil, Anda akan melihat sesuatu yang mirip dengan output berikut:

    Connection to <your-storage-account> 445 port [tcp/microsoft-ds] succeeded!
    

    Jika Anda tidak dapat membuka port 445 di jaringan perusahaan Anda atau diblokir untuk melakukannya oleh ISP, Anda dapat menggunakan koneksi VPN atau ExpressRoute untuk mengatasi port 445. Untuk informasi selengkapnya, lihat Pertimbangan jaringan untuk akses berbagi file Azure langsung.

Izin

Semua skrip pemasangan dalam artikel ini akan memasang berbagi file menggunakan izin file dan folder Linux 0755 default. Ini berarti membaca, menulis, dan menjalankan untuk pemilik file/direktori, membaca dan menjalankan untuk pengguna di grup pemilik, dan membaca dan menjalankan untuk pengguna lain. Bergantung pada kebijakan keamanan organisasi, Anda mungkin ingin mengatur izin alternatif uid/gid atau dir_mode dan file_mode di opsi pemasangan.

Untuk informasi selengkapnya tentang cara mengatur izin, lihat Notasi simbolis Unix. Lihat opsi pemasangan untuk daftar opsi pemasangan.

Pasang berbagi file Azure sesuai permintaan pemasangan

Saat Anda memasang berbagi file di OS Linux, berbagi file jarak jauh Anda direpresentasikan sebagai folder di sistem file lokal Anda. Anda dapat memasang berbagi file ke mana saja pada sistem Anda. Contoh berikut dipasang pada jalur /media. Anda dapat mengubah jalur ini ke jalur pilihan yang Anda inginkan dengan memodifikasi variabel $MNT_ROOT.

Ganti <resource-group-name>, <storage-account-name>, dan <file-share-name> dengan informasi yang sesuai untuk lingkungan Anda:

RESOURCE_GROUP_NAME="<resource-group-name>"
STORAGE_ACCOUNT_NAME="<storage-account-name>"
FILE_SHARE_NAME="<file-share-name>"

MNT_ROOT="/media"
MNT_PATH="$MNT_ROOT/$STORAGE_ACCOUNT_NAME/$FILE_SHARE_NAME"

sudo mkdir -p $MNT_PATH

Selanjutnya, inisialisasi file kredensial dengan menjalankan skrip berikut.

# Create a folder to store the credentials for this storage account and
# any other that you might set up.
CREDENTIAL_ROOT="/etc/smbcredentials"
sudo mkdir -p "/etc/smbcredentials"

# Get the storage account key for the indicated storage account.
# You must be logged in with az login and your user identity must have
# permissions to list the storage account keys for this command to work.
STORAGE_ACCOUNT_KEY=$(az storage account keys list \
    --resource-group $RESOURCE_GROUP_NAME \
    --account-name $STORAGE_ACCOUNT_NAME \
    --query "[0].value" --output tsv | tr -d '"')

# Create the credential file for this individual storage account
SMB_CREDENTIAL_FILE="$CREDENTIAL_ROOT/$STORAGE_ACCOUNT_NAME.cred"
if [ ! -f $SMB_CREDENTIAL_FILE ]; then
    echo "username=$STORAGE_ACCOUNT_NAME" | sudo tee $SMB_CREDENTIAL_FILE > /dev/null
    echo "password=$STORAGE_ACCOUNT_KEY" | sudo tee -a $SMB_CREDENTIAL_FILE > /dev/null
else
    echo "The credential file $SMB_CREDENTIAL_FILE already exists, and was not modified."
fi

# Change permissions on the credential file so only root can read or modify the password file.
sudo chmod 600 $SMB_CREDENTIAL_FILE

Sekarang Anda dapat memasang berbagi file dengan mount perintah menggunakan file kredensial. Dalam contoh berikut, $SMB_PATH perintah diisi menggunakan nama domain yang sepenuhnya memenuhi syarat untuk titik akhir file akun penyimpanan. Lihat opsi pemasangan untuk daftar opsi pemasangan SMB.

Catatan

Mulai dari kernel Linux versi 5.0, SMB 3.1.1 adalah protokol negosiasi default. Jika Anda menggunakan versi kernel Linux yang lebih lama dari 5.0, tentukan vers=3.1.1 dalam daftar opsi pemasangan.

# This command assumes you have logged in with az login
HTTP_ENDPOINT=$(az storage account show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $STORAGE_ACCOUNT_NAME \
    --query "primaryEndpoints.file" --output tsv | tr -d '"')
SMB_PATH=$(echo $HTTP_ENDPOINT | cut -c7-${#HTTP_ENDPOINT})$FILE_SHARE_NAME

STORAGE_ACCOUNT_KEY=$(az storage account keys list \
    --resource-group $RESOURCE_GROUP_NAME \
    --account-name $STORAGE_ACCOUNT_NAME \
    --query "[0].value" --output tsv | tr -d '"')

sudo mount -t cifs $SMB_PATH $MNT_PATH -o credentials=$SMB_CREDENTIAL_FILE,serverino,nosharesock,actimeo=30,mfsymlinks

Anda juga dapat memasang berbagi file Azure yang sama ke beberapa titik pemasangan jika diinginkan.

Setelah selesai menggunakan berbagi file Azure, gunakan sudo umount $mntPath untuk melepas berbagi.

Memasang berbagi file secara otomatis

Saat Anda memasang berbagi file di OS Linux, berbagi file jarak jauh Anda direpresentasikan sebagai folder di sistem file lokal Anda. Anda dapat memasang berbagi file ke mana saja pada sistem Anda. Contoh berikut dipasang pada jalur /media. Anda dapat mengubah jalur ini ke jalur pilihan yang Anda inginkan dengan memodifikasi variabel $MNT_ROOT.

MNT_ROOT="/media"
sudo mkdir -p $MNT_ROOT

Untuk memasang berbagi file Azure di Linux, gunakan nama akun penyimpanan sebagai nama pengguna berbagi file, dan kunci akun penyimpanan sebagai sandi. Karena kredensial akun penyimpanan mungkin berubah dari waktu ke waktu, Anda harus menyimpan kredensial untuk akun penyimpanan secara terpisah dari konfigurasi pemasangan.

Contoh berikut menunjukkan cara membuat file untuk menyimpan info masuk. Jangan lupa untuk mengganti <resource-group-name> dan <storage-account-name> dengan informasi yang sesuai untuk lingkungan Anda.

RESOURCE_GROUP_NAME="<resource-group-name>"
STORAGE_ACCOUNT_NAME="<storage-account-name>"

# Create a folder to store the credentials for this storage account and
# any other that you might set up.
CREDENTIAL_ROOT="/etc/smbcredentials"
sudo mkdir -p "/etc/smbcredentials"

# Get the storage account key for the indicated storage account.
# You must be logged in with az login and your user identity must have
# permissions to list the storage account keys for this command to work.
STORAGE_ACCOUNT_KEY=$(az storage account keys list \
    --resource-group $RESOURCE_GROUP_NAME \
    --account-name $STORAGE_ACCOUNT_NAME \
    --query "[0].value" --output tsv | tr -d '"')

# Create the credential file for this individual storage account
SMB_CREDENTIAL_FILE="$CREDENTIAL_ROOT/$STORAGE_ACCOUNT_NAME.cred"
if [ ! -f $SMB_CREDENTIAL_FILE ]; then
    echo "username=$STORAGE_ACCOUNT_NAME" | sudo tee $SMB_CREDENTIAL_FILE > /dev/null
    echo "password=$STORAGE_ACCOUNT_KEY" | sudo tee -a $SMB_CREDENTIAL_FILE > /dev/null
else
    echo "The credential file $SMB_CREDENTIAL_FILE already exists, and was not modified."
fi

# Change permissions on the credential file so only root can read or modify the password file.
sudo chmod 600 $SMB_CREDENTIAL_FILE

Untuk memasang berbagi file secara otomatis, Anda memiliki pilihan antara menggunakan pemasangan statis melalui utilitas /etc/fstab atau menggunakan pemasangan dinamis melalui utilitas autofs.

Pemasangan statis dengan /etc/fstab

Buat folder untuk akun penyimpanan/berbagi file di bawah folder pemasangan Anda dengan menggunakan lingkungan sebelumnya. Ganti <file-share-name> dengan nama yang sesuai dari berbagi file Azure Anda.

FILE_SHARE_NAME="<file-share-name>"

MNT_PATH="$MNT_ROOT/$STORAGE_ACCOUNT_NAME/$FILE_SHARE_NAME"
sudo mkdir -p $MNT_PATH

Terakhir, buat rekaman dalam file /etc/fstab untuk berbagi file Azure Anda. Dalam contoh di bawah ini, file default Linux 0755 dan izin folder digunakan, yang berarti membaca, menulis, dan menjalankan untuk pemilik (berdasarkan file/direktori pemilik Linux), membaca dan menjalankan untuk pengguna dalam grup pemilik, serta membaca dan menjalankan untuk orang lain di sistem. Anda mungkin ingin mengatur izin alternatif uid dan gid atau dir_mode dan pada file_mode pemasangan sesuai keinginan. Untuk informasi selengkapnya tentang cara mengatur izin, lihat notasi numerik UNIX. Lihat opsi pemasangan untuk daftar opsi pemasangan SMB.

Tip

Jika Anda ingin kontainer Docker yang menjalankan aplikasi .NET Core dapat menulis ke berbagi file Azure, sertakan nobrl dalam opsi pemasangan SMB untuk menghindari pengiriman permintaan kunci rentang byte ke server.

HTTP_ENDPOINT=$(az storage account show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $STORAGE_ACCOUNT_NAME \
    --query "primaryEndpoints.file" --output tsv | tr -d '"')
SMB_PATH=$(echo $HTTP_ENDPOINT | cut -c7-${#HTTP_ENDPOINT})$FILE_SHARE_NAME

if [ -z "$(grep $SMB_PATH\ $MNT_PATH /etc/fstab)" ]; then
    echo "$SMB_PATH $MNT_PATH cifs _netdev,nofail,credentials=$SMB_CREDENTIAL_FILE,serverino,nosharesock,actimeo=30,mfsymlinks" | sudo tee -a /etc/fstab > /dev/null
else
    echo "/etc/fstab was not modified to avoid conflicting entries as this Azure file share was already present. You might want to double check /etc/fstab to ensure the configuration is as desired."
fi

sudo mount -a

Catatan

Mulai dari kernel Linux versi 5.0, SMB 3.1.1 adalah protokol negosiasi default. Anda dapat menentukan versi protokol alternatif menggunakan opsi pemasangan vers (versi protokol adalah 3.1.1, 3.0, dan 2.1).

Pemasangan dinamis dengan autof

Untuk memasang berbagi file secara dinamis dengan utilitas autofs, instal berbagi file menggunakan manajer paket pada distribusi Linux pilihan Anda.

Pada distribusi Ubuntu dan Debian, gunakan apt manajer paket:

sudo apt update
sudo apt install autofs

Selanjutnya, update file konfigurasi autofs. Lihat opsi pemasangan untuk daftar opsi pemasangan SMB.

FILE_SHARE_NAME="<file-share-name>"

HTTP_ENDPOINT=$(az storage account show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $STORAGE_ACCOUNT_NAME \
    --query "primaryEndpoints.file" --output tsv | tr -d '"')
SMB_PATH=$(echo $HTTP_ENDPOINT | cut -c7-$(expr length $HTTP_ENDPOINT))$FILE_SHARE_NAME

echo "$FILE_SHARE_NAME -fstype=cifs,credentials=$SMB_CREDENTIAL_FILE,serverino,nosharesock,actimeo=30,mfsymlinks :$SMB_PATH" > /etc/auto.fileshares

echo "/fileshares /etc/auto.fileshares --timeout=60" > /etc/auto.master

Langkah terakhir adalah memulai ulang layanan autofs.

sudo systemctl restart autofs

Opsi pemasangan

Anda dapat menggunakan opsi pemasangan berikut saat memasang berbagi file SMB Azure di Linux.

Opsi pemasangan Nilai yang disarankan Deskripsi
username= Nama akun penyimpanan Wajib untuk autentikasi NTLMv2.
password= Kunci utama akun penyimpanan Wajib untuk autentikasi NTLMv2.
password2= Kunci sekunder akun penyimpanan Direkomendasikan jika rotasi kunci tanpa waktu henti diinginkan.
mfsymlinks n/a Disarankan. Memaksa pemasangan untuk mendukung tautan simbolis, memungkinkan aplikasi seperti git untuk mengkloning repos dengan symlink.
actimeo= 30-60 Disarankan. Waktu (dalam detik) klien CIFS menyimpan atribut file atau direktori sebelum meminta informasi atribut dari server. Menggunakan nilai yang lebih rendah dari 30 detik dapat menyebabkan penurunan performa karena cache atribut untuk file dan direktori kedaluwarsa terlalu cepat. Sebaiknya atur actimeo antara 30 dan 60 detik.
nosharesock n/a Opsional. Memaksa klien untuk selalu membuat koneksi baru ke server meskipun memiliki koneksi yang ada ke pemasangan SMB. Ini dapat meningkatkan performa, karena setiap titik pemasangan akan menggunakan soket TCP yang berbeda. Dalam beberapa kasus, nosharesock dapat menurunkan performa karena tidak menyimpan cache file yang sama saat dibuka dari dua pemasangan dari klien yang sama.
max_channels= 4 Disarankan saat menggunakan SMB Multichannel. Menentukan jumlah maksimum saluran (koneksi jaringan) ke berbagi file. Jika Anda menggunakan SMB Multichannel dan jumlah saluran melebihi empat, ini akan mengakibatkan performa yang buruk.
remount n/a Melepas berbagi file dan mengubah opsi pemasangan jika ditentukan. Gunakan dengan password2 opsi jika Anda ingin menentukan kata sandi alternatif untuk memperbaiki kata sandi kedaluwarsa setelah pemasangan asli.
nobrl n/a Direkomendasikan dalam skenario klien tunggal saat kunci penasihat diperlukan. Azure Files tidak mendukung kunci saran, dan pengaturan ini mencegah pengiriman permintaan kunci rentang byte ke server.
snapshot= waktu Pasang rekam jepret tertentu dari berbagi file. Waktu harus berupa bilangan bulat positif yang mengidentifikasi rekam jepret yang diminta (dalam unit 100 nanodetik yang telah berlalu sejak 1 Januari 1601, atau atau dapat ditentukan dalam format GMT misalnya @GMT-2024.03.27-20.52.19).
closetimeo= 5 Mengonfigurasi batas waktu tutup yang ditangguhkan (menangani cache) dalam hitungan detik, atau menonaktifkannya dengan mengatur ke 0. Defaultnya adalah 5 detik.
nostrictsync n/a Jangan minta server untuk memerah pada fsync(). Beberapa server melakukan penulisan yang tidak di-buffer secara default, dalam hal ini pembilasan berlebihan. Opsi ini dapat meningkatkan performa untuk beban kerja di mana klien melakukan banyak kombinasi tulis + fsync kecil dan di mana latensi jaringan jauh lebih tinggi daripada latensi server.
multiuser n/a Memetakan akses pengguna ke kredensial individual saat mengakses server. Secara default, pemasangan CIFS hanya menggunakan satu set kredensial pengguna (info masuk pemasangan) saat mengakses berbagi. Dengan opsi ini, klien akan membuat sesi baru dengan server menggunakan kredensial pengguna setiap kali pengguna baru mengakses pemasangan. Akses lebih lanjut oleh pengguna tersebut juga akan menggunakan kredensial tersebut. Karena kernel tidak dapat meminta kata sandi, pemasangan multipengguna terbatas pada pemasangan menggunakan sec= opsi yang tidak memerlukan kata sandi.
cifsacl n/a Opsi ini digunakan untuk memetakan ACL CIFS/NTFS ke/dari bit izin Linux, memetakan SID ke/dari UID dan GID, dan mendapatkan dan mengatur Deskriptor Keamanan. Hanya didukung untuk autentikasi NTLMv2.
idsfromsid,modefromsid n/a Disarankan ketika klien perlu melakukan otorisasi yang diberlakukan klien. Mengaktifkan izin gaya Unix. Hanya berfungsi ketika UID/GID seragam di semua klien. Hanya didukung untuk autentikasi NTLMv2.
sec= krb5 Diperlukan untuk autentikasi Kerberos. Untuk mengaktifkan mode keamanan Kerberos, atur sec=krb5. Anda harus menghilangkan nama pengguna dan kata sandi saat menggunakan opsi ini. Klien Linux harus bergabung dengan domain. Lihat Mengaktifkan autentikasi Direktori Aktif melalui SMB untuk klien Linux.
uid= 0 Opsional. Mengatur uid yang akan memiliki semua file atau direktori pada sistem file yang dipasang ketika server tidak memberikan informasi kepemilikan. Ini dapat ditentukan sebagai nama pengguna atau uid numerik. Ketika tidak ditentukan, defaultnya adalah 0.
gid= 0 Opsional. Mengatur gid yang akan memiliki semua file atau direktori pada sistem file yang dipasang ketika server tidak memberikan informasi kepemilikan. Ini dapat ditentukan sebagai nama grup atau gid numerik. Ketika tidak ditentukan, defaultnya adalah 0.
file_mode= n/a Opsional. Jika server tidak mendukung ekstensi CIFS Unix, ini akan mengambil alih mode file default.
dir_mode= n/a Opsional. Jika server tidak mendukung ekstensi CIFS Unix, ini akan mengambil alih mode default untuk direktori.
handletimeout= n/a Opsional. Waktu (dalam milidetik) di mana server harus mencadangkan handel file setelah failover menunggu klien tersambung kembali.

Langkah berikutnya

Untuk informasi selengkapnya tentang menggunakan berbagi file SMB Azure dengan Linux, lihat: