Montera SMB Azure-filresurser på Linux-klienter
Azure-filresurser kan monteras i Linux-distributioner med hjälp av SMB-kernelklienten.
Det rekommenderade sättet att montera en Azure-filresurs i Linux är med SMB 3.1.1. Som standard kräver Azure Files kryptering under överföring, vilket stöds i SMB 3.0+. Azure Files stöder även SMB 2.1, som inte stöder kryptering under överföring, men du kan inte montera Azure-filresurser med SMB 2.1 från en annan Azure-region eller lokalt av säkerhetsskäl. Använd SMB 3.1.1 om inte appen särskilt behöver SMB 2.1. SMB 2.1-stöd lades till i Linux kernel version 3.7, så om du använder en version av Linux-kerneln efter 3.7 bör den ha stöd för SMB 2.1.
Distribution | SMB 3.1.1 (rekommenderas) | SMB 3.0 |
---|---|---|
Linux-kernelversion |
|
|
Ubuntu | Kryptering med AES-128-GCM: 18.04.5 LTS+ | Kryptering med AES-128-CCM: 16.04.4 LTS+ |
Red Hat Enterprise Linux (RHEL) |
|
7.5+ |
Debian | Grundläggande: 10+ | Kryptering med AES-128-CCM: 10+ |
SUSE Linux Enterprise Server | Kryptering med AES-128-GCM: 15 SP2+ | Kryptering med AES-128-CCM: 12 SP2+ |
Om din Linux-distribution inte visas i tabellen ovan kan du kontrollera din Linux-kernelversion med kommandot uname
:
uname -r
Kommentar
Alla monteringsskript i den här artikeln monterar SMB-filresurser med standardbehörigheterna 0755 Linux-fil och -mappar. Det innebär att läsa, skriva och köra för fil-/katalogägaren, läsa och köra för användare i ägargruppen och läsa och köra för andra användare. Beroende på organisationens säkerhetsprinciper kanske du vill ange alternativa uid
/gid
eller dir_mode
och file_mode
behörigheter i monteringsalternativen. Mer information om hur du anger behörigheter finns i UNIX numerisk notation.
Gäller för
Typ av filresurs | SMB | NFS |
---|---|---|
Standardfilresurser (GPv2), LRS/ZRS | ||
Standardfilresurser (GPv2), GRS/GZRS | ||
Premiumfilresurser (FileStorage), LRS/ZRS |
Förutsättningar
- Kontrollera att cifs-utils-paketet är installerat. Installera cifs-utils-paketet med hjälp av pakethanteraren på valfri Linux-distribution.
På Ubuntu och Debian använder du apt
pakethanteraren:
sudo apt update
sudo apt install cifs-utils
På andra distributioner använder du lämplig pakethanterare eller kompilerar från källan.
Den senaste versionen av Azures kommandoradsgränssnitt (CLI). Mer information om hur du installerar Azure CLI finns i Installera Azure CLI och välj ditt operativsystem. Om du föredrar att använda Azure PowerShell-modulen i PowerShell 6+, kan du; Instruktionerna i den här artikeln gäller dock för Azure CLI.
Kontrollera att port 445 är öppen: SMB kommunicerar via TCP-port 445 – kontrollera att brandväggen eller ISP inte blockerar TCP-port 445 från klientdatorn. Ersätt
<your-resource-group>
och<your-storage-account>
kör sedan följande skript: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
Om anslutningen lyckades bör du se något som liknar följande utdata:
Connection to <your-storage-account> 445 port [tcp/microsoft-ds] succeeded!
Om du inte kan öppna port 445 i företagets nätverk eller blockeras från att göra det av en Internetleverantör kan du använda en VPN-anslutning eller ExpressRoute för att arbeta runt port 445. Mer information finns i Nätverksöverväganden för direktåtkomst till Azure-filresurser.
Montera Azure-filresursen på begäran med montering
När du monterar en filresurs på ett Linux-operativsystem representeras fjärrfilresursen som en mapp i det lokala filsystemet. Du kan montera filresurser var som helst i systemet. Följande exempel monteras under /media
sökvägen. Du kan ändra detta till önskad sökväg genom att ändra variabeln $MNT_ROOT
.
Ersätt <resource-group-name>
, <storage-account-name>
och <file-share-name>
med lämplig information för din miljö:
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
Initiera sedan autentiseringsfilen genom att köra följande skript.
# 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
Nu kan du montera filresursen mount
med kommandot med hjälp av autentiseringsfilen. I följande exempel $SMB_PATH
fylls kommandot i med det fullständigt kvalificerade domännamnet för lagringskontots filslutpunkt.
Kommentar
Från och med Linux kernel version 5.0 är SMB 3.1.1 standardprotokollet som förhandlats. Om du använder en version av Linux-kerneln som är äldre än 5.0 anger du vers=3.1.1
i listan med monteringsalternativ.
# 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
Du kan också montera samma Azure-filresurs på flera monteringspunkter om du vill. När du är klar med att använda Azure-filresursen använder sudo umount $mntPath
du för att demontera resursen.
Montera filresurser automatiskt
När du monterar en filresurs på ett Linux-operativsystem representeras fjärrfilresursen som en mapp i det lokala filsystemet. Du kan montera filresurser var som helst i systemet. Följande exempel monteras under /media
sökvägen. Du kan ändra detta till önskad sökväg genom att ändra variabeln $MNT_ROOT
.
MNT_ROOT="/media"
sudo mkdir -p $MNT_ROOT
Om du vill montera en Azure-filresurs i Linux använder du lagringskontonamnet som användarnamn för filresursen och lagringskontonyckeln som lösenord. Eftersom autentiseringsuppgifterna för lagringskontot kan ändras med tiden bör du lagra autentiseringsuppgifterna för lagringskontot separat från monteringskonfigurationen.
I följande exempel visas hur du skapar en fil för att lagra autentiseringsuppgifterna. Kom ihåg att ersätta <resource-group-name>
och <storage-account-name>
med lämplig information för din miljö.
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
Om du vill montera en filresurs automatiskt kan du välja mellan att använda en statisk montering via /etc/fstab
verktyget eller att använda en dynamisk montering via autofs
verktyget.
Statisk montering med /etc/fstab
Använd den tidigare miljön och skapa en mapp för ditt lagringskonto/din filresurs under monteringsmappen. Ersätt <file-share-name>
med lämpligt namn på din Azure-filresurs.
FILE_SHARE_NAME="<file-share-name>"
MNT_PATH="$MNT_ROOT/$STORAGE_ACCOUNT_NAME/$FILE_SHARE_NAME"
sudo mkdir -p $MNT_PATH
Skapa slutligen en post i /etc/fstab
filen för din Azure-filresurs. I kommandot nedan används standardbehörigheterna för 0755 Linux-filer och -mappar, vilket innebär att läsa, skriva och köra för ägaren (baserat på fil-/katalog-Linux-ägaren), läsa och köra för användare i ägargruppen och läsa och köra för andra i systemet. Du kanske vill ange alternativa uid
och gid
eller dir_mode
och file_mode
behörigheter för montering efter behov. Mer information om hur du anger behörigheter finns i UNIX numerisk notation.
Dricks
Om du vill att Docker-containrar som kör .NET Core-program ska kunna skriva till Azure-filresursen ska du inkludera nobrl i SMB-monteringsalternativen för att undvika att skicka byteintervalllåsbegäranden till servern.
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
Kommentar
Från och med Linux kernel version 5.0 är SMB 3.1.1 standardprotokollet som förhandlats. Du kan ange alternativa protokollversioner med monteringsalternativet vers
(protokollversioner är 3.1.1
, 3.0
och 2.1
).
Montera dynamiskt med autofs
Om du vill montera en filresurs dynamiskt med autofs
verktyget installerar du den med hjälp av pakethanteraren på valfri Linux-distribution.
På Ubuntu- och Debiandistributioner använder du apt
pakethanteraren:
sudo apt update
sudo apt install autofs
Uppdatera sedan konfigurationsfilerna 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,serverino,nosharesock,actimeo=30,mfsymlinks :$SMB_PATH" > /etc/auto.fileshares
echo "/fileshares /etc/auto.fileshares --timeout=60" > /etc/auto.master
Det sista steget är att starta om autofs
tjänsten.
sudo systemctl restart autofs
Nästa steg
Mer information om Azure Files finns på följande länkar: