Memasang berbagi file SMB Azure di Linux

Perhatian

Artikel ini mereferensikan CentOS, distribusi Linux yang mendekati status End Of Life (EOL). Harap pertimbangkan penggunaan dan rencanakan yang sesuai. Untuk informasi selengkapnya, lihat panduan Akhir Masa Pakai CentOS. Azure Files adalah sistem file cloud Microsoft yang mudah digunakan. Berbagi file Azure dapat dipasang dalam distribusi Linux menggunakan klien kernel SMB.

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.

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

Catatan

Dukungan SMB 2.1 ditambahkan ke kernel Linux versi 3.7. Jika Anda menggunakan versi kernel Linux setelah 3.7, itu harus mendukung SMB 2.1.

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

Prasyarat

  • Pastikan paket cifs-utils diinstal. Paket cifs-utils dapat diinstal 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.

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, pasang berbagi file menggunakan perintah mount. Dalam contoh berikut, perintah $SMB_PATH diisi menggunakan nama domain yang sepenuhnya memenuhi syarat untuk titik akhir file akun penyimpanan dan $STORAGE_ACCOUNT_KEY diisi dengan kunci akun penyimpanan.

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 username=$STORAGE_ACCOUNT_NAME,password=$STORAGE_ACCOUNT_KEY,serverino,nosharesock,actimeo=30,mfsymlinks

Anda dapat menggunakan uid/gid atau dir_mode dan file_mode di opsi pemasangan untuk perintah mount guna mengatur izin. Untuk informasi selengkapnya tentang cara mengatur izin, lihat notasi numerik UNIX.

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 dapat 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 file_mode pada pemasangan yang diinginkan. Untuk informasi selengkapnya tentang cara mengatur izin, lihat notasi numerik UNIX di Wikipedia.

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

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 :$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

Memasang rekam jepret berbagi file

Jika Anda ingin memasang rekam jepret tertentu dari berbagi file Azure SMB, Anda harus menyediakan snapshot opsi sebagai bagian mount dari perintah, di mana snapshot adalah waktu rekam jepret tertentu dibuat dalam format seperti @GMT-2023.01.05-00.08.20. Opsi snapshot ini telah didukung di kernel Linux sejak versi 4.19.

Setelah Anda membuat rekam jepret berbagi file, ikuti instruksi berikut untuk memasangnya.

  1. Di portal Azure, navigasikan ke akun penyimpanan yang berisi berbagi file yang ingin Anda pasang rekam jepretnya.

  2. Pilih Berbagi file penyimpanan data > dan pilih berbagi file.

  3. Pilih Rekam Jepret Operasi > dan catat nama rekam jepret yang ingin Anda pasang. Nama rekam jepret akan menjadi tanda waktu GMT, seperti pada cuplikan layar di bawah ini.

    Cuplikan layar memperlihatkan cara menemukan nama rekam jepret berbagi file dan tanda waktu di portal Azure.

  4. Konversi tanda waktu ke format yang diharapkan oleh mount perintah, yaitu @GMT-year.month.day-hour.minutes.seconds. Dalam contoh ini, Anda akan mengonversi 2023-01-05T00:08:20.0000000Z ke @GMT-2023.01.05-00.08.20.

  5. Jalankan mount perintah menggunakan waktu GMT untuk menentukan snapshot nilai. Pastikan untuk mengganti <storage-account-name>, <file-share-name>, dan tanda waktu GMT dengan nilai Anda. File .cred berisi kredensial yang akan digunakan untuk memasang berbagi (lihat Memasang berbagi file secara otomatis).

    sudo mount -t cifs //<storage-account-name>.file.core.windows.net/<file-share-name> /media/<file-share-name>/snapshot1 -o credentials=/etc/smbcredentials/snapshottestlinux.cred,snapshot=@GMT-2023.01.05-00.08.20
    
  6. Jika Anda dapat menelusuri rekam jepret di bawah jalur /media/<file-share-name>/snapshot1, maka pemasangan berhasil.

Jika pemasangan gagal, lihat Memecahkan masalah konektivitas dan akses (SMB) Azure Files.

Langkah berikutnya

Lihat tautan ini untuk informasi selengkapnya tentang Azure Files: