Share via


SMB Azure-bestandsshares koppelen op Linux-clients

Azure-bestands shares kunnen worden bevestigd in Linux-distributies met behulp van de SMB-kernelclient.

De aanbevolen manier om een Azure-bestandsshare te maken in Linux is met behulp van SMB 3.1.1. Standaard is Azure Files versleuteling in transit vereist, wat wordt ondersteund door SMB 3.0+. Azure Files ondersteunt ook SMB 2.1, dat geen ondersteuning biedt voor versleuteling tijdens overdracht, maar u kunt Azure-bestandsshares niet koppelen met SMB 2.1 vanuit een andere Azure-regio of on-premises om veiligheidsredenen. Gebruik SMB 3.1.1, tenzij uw toepassing specifiek SMB 2.1 vereist. SMB 2.1-ondersteuning is toegevoegd aan Linux-kernelversie 3.7, dus als u een versie van de Linux-kernel na 3.7 gebruikt, moet deze ondersteuning bieden voor SMB 2.1.

Distributie SMB 3.1.1 (aanbevolen) SMB 3.0
Linux-kernelversie
  • Basic 3.1.1-ondersteuning: 4.17
  • Standaardkoppeling: 5.0
  • AES-128-GCM-versleuteling: 5.3
  • AES-256-GCM-versleuteling: 5.10
  • Basic 3.0-ondersteuning: 3.12
  • AES-128-CCM-versleuteling: 4.11
Ubuntu AES-128-GCM-versleuteling: 18.04.5 LTS+ AES-128-CCM-versleuteling: 16.04.4 LTS+
Red Hat Enterprise Linux (RHEL)
  • Basis: 8.0+
  • Standaard mount: 8.2+
  • AES-128-GCM-versleuteling: 8.2+
7.5+
Debian Basis: 10+ AES-128-CCM-versleuteling: 10+
SUSE Linux Enterprise Server AES-128-GCM-versleuteling: 15 SP2+ AES-128-CCM-versleuteling: 12 SP2+

Als uw Linux-distributie niet wordt vermeld in de bovenstaande tabel, kunt u de Linux-kernelversie controleren met de opdracht uname:

uname -r

Notitie

Alle koppelingsscripts in dit artikel koppelen SMB-bestandsshares met behulp van de standaardmachtigingen voor 0755 Linux-bestanden en -mappen. Dit betekent lezen, schrijven en uitvoeren voor de eigenaar van het bestand/de map, lezen en uitvoeren voor gebruikers in de eigenaarsgroep en lezen en uitvoeren voor andere gebruikers. Afhankelijk van het beveiligingsbeleid van uw organisatie, kunt u alternatieve uid/gid of dir_mode machtigingen file_mode instellen in de koppelingsopties. Zie unix-numerieke notatie voor meer informatie over het instellen van machtigingen.

Van toepassing op

Bestands sharetype SMB NFS
Standaardbestandsshares (GPv2), LRS/ZRS Ja Nee
Standaardbestandsshares (GPv2), GRS/GZRS Ja Nee
Premium bestandsshares (FileStorage), LRS/ZRS Ja Nee

Vereisten

  • Zorg ervoor dat het cifs-utils-pakket is geïnstalleerd. Installeer het cifs-utils-pakket met behulp van pakketbeheer in de Linux-distributie van uw keuze.

Gebruik op Ubuntu en Debian de apt pakketbeheerder:

sudo apt update
sudo apt install cifs-utils

Gebruik in andere distributies het juiste pakketbeheer of compileer vanuit de bron.

  • De meest recente versie van de Azure-opdrachtregelinterface (CLI). Zie De Azure CLI installeren en uw besturingssysteem selecteren voor meer informatie over het installeren van de Azure CLI. Als u liever de Azure PowerShell-module in PowerShell 6+ gebruikt, kunt u; De instructies in dit artikel zijn echter voor de Azure CLI.

  • Zorg ervoor dat poort 445 open is: SMB communiceert via TCP-poort 445. Zorg ervoor dat uw firewall of internetprovider TCP-poort 445 niet blokkeert vanaf de clientcomputer. Vervang <your-resource-group> en <your-storage-account> voer het volgende script uit:

    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
    

    Als de verbinding is geslaagd, ziet u iets vergelijkbaars met de volgende uitvoer:

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

    Als u poort 445 niet kunt openen op uw bedrijfsnetwerk of als u dit niet kunt doen door een internetprovider, kunt u een VPN-verbinding of ExpressRoute gebruiken om poort 445 te omzeilen. Zie Netwerkoverwegingen voor directe toegang tot Azure-bestandsshares voor meer informatie.

De Azure-bestandsshare op aanvraag koppelen met koppelen

Wanneer u een bestandsshare koppelt aan een Linux-besturingssysteem, wordt uw externe bestandsshare weergegeven als een map in uw lokale bestandssysteem. U kunt bestandsshares overal op uw systeem koppelen. In het volgende voorbeeld wordt onder het /media pad een koppeling weergegeven. U kunt dit wijzigen in het gewenste pad door de $MNT_ROOT variabele te wijzigen.

Vervang <resource-group-name>, <storage-account-name>en <file-share-name> door de juiste informatie voor uw omgeving:

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

Initialiseer vervolgens het referentiebestand door het volgende script uit te voeren.

# 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

U kunt de bestandsshare nu koppelen met behulp van de mount opdracht met behulp van het referentiebestand. In het volgende voorbeeld wordt de $SMB_PATH opdracht ingevuld met behulp van de volledig gekwalificeerde domeinnaam voor het bestandseindpunt van het opslagaccount.

Notitie

Vanaf Linux-kernelversie 5.0 is SMB 3.1.1 het standaard onderhandelde protocol. Als u een versie van de Linux-kernel gebruikt die ouder is dan 5.0, geeft u vers=3.1.1 op in de lijst met koppelopties.

# 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

U kunt desgewenst ook dezelfde Azure-bestandsshare koppelen aan meerdere koppelpunten. Wanneer u klaar bent met het gebruik van de Azure-bestandsshare, kunt sudo umount $mntPath u de share ontkoppelen.

Bestandsshares automatisch koppelen

Wanneer u een bestandsshare koppelt aan een Linux-besturingssysteem, wordt uw externe bestandsshare weergegeven als een map in uw lokale bestandssysteem. U kunt bestandsshares overal op uw systeem koppelen. In het volgende voorbeeld wordt onder het /media pad een koppeling weergegeven. U kunt dit wijzigen in het gewenste pad door de $MNT_ROOT variabele te wijzigen.

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

Als u een Azure-bestandsshare wilt koppelen in Linux, gebruikt u de naam van het opslagaccount als de gebruikersnaam van de bestandsshare en de sleutel van het opslagaccount als wachtwoord. Omdat de referenties van het opslagaccount na verloop van tijd kunnen worden gewijzigd, moet u de referenties voor het opslagaccount afzonderlijk van de koppelingsconfiguratie opslaan.

In het volgende voorbeeld ziet u hoe u een bestand maakt om de referenties op te slaan. Vergeet niet om de juiste informatie voor uw omgeving te vervangen <resource-group-name> en <storage-account-name> door te geven.

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

Als u automatisch een bestandsshare wilt koppelen, kunt u kiezen tussen het gebruik van een statische koppeling via het /etc/fstab hulpprogramma of het gebruik van een dynamische koppeling via het autofs hulpprogramma.

Statische koppeling met /etc/fstab

Maak met behulp van de eerdere omgeving een map voor uw opslagaccount/bestandsshare onder de koppelingsmap. Vervang door <file-share-name> de juiste naam van uw Azure-bestandsshare.

FILE_SHARE_NAME="<file-share-name>"

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

Maak ten slotte een record in het /etc/fstab bestand voor uw Azure-bestandsshare. In de onderstaande opdracht worden de standaardmachtigingen voor 0755 Linux-bestanden en -mappen gebruikt. Dit betekent lezen, schrijven en uitvoeren voor de eigenaar (op basis van de Linux-eigenaar van het bestand/de map), lezen en uitvoeren voor gebruikers in de eigenaarsgroep en lezen en uitvoeren voor anderen op het systeem. U kunt desgewenst alternatieve uid en gid of of dir_mode machtigingen file_mode voor koppelen instellen. Zie unix-numerieke notatie voor meer informatie over het instellen van machtigingen.

Tip

Als u wilt dat Docker-containers met .NET Core-toepassingen kunnen schrijven naar de Azure-bestandsshare, neemt u nobrl op in de SMB-koppelingsopties om te voorkomen dat aanvragen voor bytebereikvergrendeling naar de server worden verzonden.

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

Notitie

Vanaf Linux-kernelversie 5.0 is SMB 3.1.1 het standaard onderhandelde protocol. U kunt alternatieve protocolversies opgeven met behulp van de vers koppelingsoptie (protocolversies zijn 3.1.1, 3.0en 2.1).

Dynamisch koppelen met autofs

Als u een bestandsshare dynamisch wilt koppelen met het autofs hulpprogramma, installeert u deze met behulp van pakketbeheer op de Linux-distributie van uw keuze.

Gebruik op Ubuntu- en Debian-distributies de apt pakketbeheerder:

sudo apt update
sudo apt install autofs

Werk vervolgens de autofs configuratiebestanden bij.

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

De laatste stap is het opnieuw starten van de autofs service.

sudo systemctl restart autofs

Volgende stappen

Raadpleeg de volgende koppelingen voor meer informatie over Azure Files: