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 |
|
|
Ubuntu | Szyfrowanie AES-128-GCM: 18.04.5 LTS+ | Szyfrowanie AES-128-CCM: 16.04.4 LTS+ |
Red Hat Enterprise Linux (RHEL) |
|
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 | ||
Udziały plików w warstwie Standardowa (GPv2), GRS/GZRS | ||
Udziały plików w warstwie Premium (FileStorage), LRS/ZRS |
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.0
i 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: