Udostępnij za pośrednictwem


Instalowanie udziałów plików platformy Azure protokołu SMB na klientach z systemem Linux

Udziały plików platformy Azure można instalować w dystrybucjach systemu Linux przy użyciu klienta jądra protokołu SMB.

Zalecanym sposobem instalacji udziału plików platformy Azure w systemie Linux jest użycie protokołu SMB 3.1.1. Domyślnie usługa Azure Files wymaga szyfrowania podczas przesyłania, które jest obsługiwane przez protokół SMB 3.0+. Usługa Azure Files obsługuje również protokół SMB 2.1, który nie obsługuje szyfrowania podczas przesyłania, ale nie można zainstalować udziałów plików platformy Azure z użyciem protokołu SMB 2.1 z innego regionu platformy Azure lub środowiska lokalnego ze względów bezpieczeństwa. Jeśli Twoja aplikacja nie wymaga użycia protokołu SMB 2.1, należy użyć protokołu SMB 3.1.1. Obsługa protokołu SMB 2.1 została dodana do jądra systemu Linux w wersji 3.7, więc jeśli używasz wersji jądra systemu Linux po wersji 3.7, powinna obsługiwać protokół SMB 2.1.

Dystrybucja Protokół SMB 3.1.1 (zalecane) SMB 3.0
Wersja jądra systemu Linux
  • Obsługa podstawowej wersji 3.1.1: 4.17
  • Instalacja domyślna: 5.0
  • Szyfrowanie AES-128-GCM: 5.3
  • Szyfrowanie AES-256-GCM: 5.10
  • Obsługa wersji Podstawowa 3.0: 3.12
  • Szyfrowanie AES-128-CCM: 4.11
Ubuntu Szyfrowanie AES-128-GCM: 18.04.5 LTS+ Szyfrowanie AES-128-CCM: 16.04.4 LTS+
Red Hat Enterprise Linux (RHEL)
  • Podstawowe: 8.0+
  • Instalacja domyślna: 8.2+
  • Szyfrowanie AES-128-GCM: 8.2+
7.5+
Debian Podstawowe: 10+ Szyfrowanie AES-128-CCM: 10+
SUSE Linux Enterprise Server Szyfrowanie AES-128-GCM: 15 SP2+ Szyfrowanie AES-128-CCM: 12 SP2+

Jeśli Twojej dystrybucji systemu Linux nie ma w powyższej tabeli, możesz sprawdzić wersję jądra systemu Linux za pomocą polecenia uname:

uname -r

Uwaga

Wszystkie skrypty instalowania w tym artykule zainstalują udziały plików SMB przy użyciu domyślnych uprawnień do plików i folderów systemu Linux 0755. Oznacza to odczyt, zapis i wykonanie dla właściciela pliku/katalogu, odczyt i wykonanie dla użytkowników w grupie właścicieli oraz odczyt i wykonanie dla innych użytkowników. W zależności od zasad zabezpieczeń organizacji możesz ustawić alternatywne uid/gid lub dir_mode uprawnienia file_mode w opcjach instalacji. Aby uzyskać więcej informacji na temat ustawiania uprawnień, zobacz Notacja liczbowa w systemie UNIX.

Dotyczy

Typ udziału plików SMB NFS
Udziały plików w warstwie Standardowa (GPv2), LRS/ZRS Tak Nie
Udziały plików w warstwie Standardowa (GPv2), GRS/GZRS Tak Nie
Udziały plików w warstwie Premium (FileStorage), LRS/ZRS Tak Nie

Wymagania wstępne

  • Upewnij się, że pakiet cifs-utils jest zainstalowany. Zainstaluj pakiet cifs-utils przy użyciu menedżera pakietów w wybranej dystrybucji systemu Linux.

W systemach Ubuntu i Debian użyj apt menedżera pakietów:

sudo apt update
sudo apt install cifs-utils

W innych dystrybucjach użyj odpowiedniego menedżera pakietów lub skompiluj ze źródła.

  • Najnowsza wersja interfejsu wiersza polecenia platformy Azure. Aby uzyskać więcej informacji na temat sposobu instalowania interfejsu wiersza polecenia platformy Azure, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure i wybieranie systemu operacyjnego. Jeśli wolisz używać modułu Azure PowerShell w programie PowerShell 6 lub nowszym, możesz; jednak instrukcje zawarte w tym artykule dotyczą interfejsu wiersza polecenia platformy Azure.

  • Upewnij się, że port 445 jest otwarty: protokół SMB komunikuje się za pośrednictwem portu TCP 445 — upewnij się, że zapora lub usługodawca nie blokuje portu TCP 445 z komputera klienckiego. Zastąp <your-resource-group> element , a <your-storage-account> następnie uruchom następujący skrypt:

    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
    

    Jeśli połączenie zakończyło się pomyślnie, powinien zostać wyświetlony komunikat podobny do następujących danych wyjściowych:

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

    Jeśli nie możesz otworzyć portu 445 w sieci firmowej lub nie możesz tego zrobić przez usługodawcę sieci VPN, możesz użyć połączenia sieci VPN lub usługi ExpressRoute, aby obejść port 445. Aby uzyskać więcej informacji, zobacz Zagadnienia dotyczące sieci dla bezpośredniego dostępu do udziału plików platformy Azure.

Instalowanie udziału plików platformy Azure na żądanie przy użyciu instalacji

Podczas instalowania udziału plików w systemie operacyjnym Linux zdalny udział plików jest reprezentowany jako folder w lokalnym systemie plików. Udziały plików można zainstalować w dowolnym miejscu w systemie. Poniższy przykład instaluje się pod ścieżką /media . Możesz zmienić tę ścieżkę na preferowaną, modyfikując zmienną $MNT_ROOT .

Zastąp <resource-group-name>wartości , <storage-account-name>i <file-share-name> odpowiednimi informacjami dotyczącymi środowiska:

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

Następnie zainicjuj plik poświadczeń, uruchamiając następujący skrypt.

# 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

Teraz możesz zainstalować udział plików przy użyciu polecenia przy użyciu mount pliku poświadczeń. W poniższym przykładzie $SMB_PATH polecenie jest wypełniane przy użyciu w pełni kwalifikowanej nazwy domeny punktu końcowego pliku konta magazynu.

Uwaga

Począwszy od jądra systemu Linux w wersji 5.0, protokół SMB 3.1.1 jest domyślnym protokołem wynegocjowanym. Jeśli używasz wersji jądra systemu Linux starszej niż 5.0, określ vers=3.1.1 ją na liście opcji instalacji.

# 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

W razie potrzeby można również zainstalować ten sam udział plików platformy Azure w wielu punktach instalacji. Gdy skończysz korzystać z udziału plików platformy Azure, użyj polecenia sudo umount $mntPath , aby odinstalować udział.

Automatyczne instalowanie udziałów plików

Podczas instalowania udziału plików w systemie operacyjnym Linux zdalny udział plików jest reprezentowany jako folder w lokalnym systemie plików. Udziały plików można zainstalować w dowolnym miejscu w systemie. Poniższy przykład instaluje się pod ścieżką /media . Możesz zmienić tę ścieżkę na preferowaną, modyfikując zmienną $MNT_ROOT .

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

Aby zainstalować udział plików platformy Azure w systemie Linux, użyj nazwy konta magazynu jako nazwy użytkownika udziału plików i klucza konta magazynu jako hasła. Ponieważ poświadczenia konta magazynu mogą ulec zmianie w czasie, należy przechowywać poświadczenia dla konta magazynu oddzielnie od konfiguracji instalacji.

W poniższym przykładzie pokazano, jak utworzyć plik do przechowywania poświadczeń. Pamiętaj, aby zastąpić <resource-group-name> element i <storage-account-name> odpowiednimi informacjami dla danego środowiska.

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

Aby automatycznie zainstalować udział plików, możesz wybrać opcję użycia instalacji statycznej za pośrednictwem /etc/fstab narzędzia lub instalacji dynamicznej autofs za pośrednictwem narzędzia.

Instalacja statyczna z /etc/fstab

Korzystając z wcześniejszego środowiska, utwórz folder dla konta magazynu/udziału plików w folderze instalacji. Zastąp <file-share-name> ciąg odpowiednią nazwą udziału plików platformy Azure.

FILE_SHARE_NAME="<file-share-name>"

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

Na koniec utwórz rekord w /etc/fstab pliku dla udziału plików platformy Azure. W poniższym poleceniu są używane domyślne uprawnienia do plików i folderów systemu Linux 0755, co oznacza odczyt, zapis i wykonywanie dla właściciela (na podstawie właściciela pliku/katalogu systemu Linux), odczytywanie i wykonywanie dla użytkowników w grupie właścicieli oraz odczytywanie i wykonywanie dla innych osób w systemie. Możesz chcieć ustawić alternatywne uid i gid lub dir_mode i file_mode uprawnienia podczas instalacji zgodnie z potrzebami. Aby uzyskać więcej informacji na temat ustawiania uprawnień, zobacz Notacja liczbowa w systemie UNIX.

Napiwek

Jeśli chcesz, aby kontenery platformy Docker z aplikacjami platformy .NET Core mogły zapisywać w udziale plików platformy Azure, uwzględnij nobrl w opcjach instalacji protokołu SMB, aby uniknąć wysyłania żądań blokady zakresu bajtów do serwera.

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

Uwaga

Począwszy od jądra systemu Linux w wersji 5.0, protokół SMB 3.1.1 jest domyślnym protokołem wynegocjowanym. Można określić alternatywne wersje protokołu przy użyciu vers opcji instalacji (wersje protokołów to 3.1.1, 3.0i 2.1).

Dynamiczne instalowanie za pomocą autofs

Aby dynamicznie zainstalować udział plików za pomocą autofs narzędzia, zainstaluj go przy użyciu menedżera pakietów w wybranej dystrybucji systemu Linux.

W dystrybucjach Ubuntu i Debian użyj apt menedżera pakietów:

sudo apt update
sudo apt install autofs

Następnie zaktualizuj autofs pliki konfiguracji.

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

Ostatnim krokiem jest ponowne uruchomienie autofs usługi.

sudo systemctl restart autofs

Następne kroki

Poniższe linki umożliwiają uzyskanie dodatkowych informacji na temat usługi Azure Files: