Delen 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. Zie koppelingsopties voor een lijst met koppelopties.

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 de nieuwste versie van 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 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. Zie koppelingsopties voor een lijst met SMB-koppelingsopties.

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. Zie koppelingsopties voor een lijst met SMB-koppelingsopties.

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. Zie koppelingsopties voor een lijst met SMB-koppelingsopties.

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

Koppelingsopties

U kunt de volgende koppelingsopties gebruiken bij het koppelen van SMB Azure-bestandsshares in Linux.

Koppelingsoptie Aanbevolen waarde Beschrijving
username= Naam van het opslagaccount Verplicht voor NTLMv2-verificatie.
password= Primaire sleutel van opslagaccount Verplicht voor NTLMv2-verificatie.
password2= Secundaire sleutel van opslagaccount Aanbevolen in het geval dat sleutelrotatie zonder downtime wenselijk is.
mfsymlinks n.v.t. Aanbevolen. Dwingt de koppeling af om symbolische koppelingen te ondersteunen, zodat toepassingen zoals Git opslagplaatsen kunnen klonen met symlinks.
actimeo= 30-60 Aanbevolen. actimeo Als u alle acregmin, acregmaxen acdirmindezelfde waarde opgeeft, wordt acdirmax ingesteld. Het gebruik van een waarde lager dan 30 seconden kan leiden tot prestatievermindering omdat kenmerkcaches voor bestanden en mappen te snel verlopen. U wordt aangeraden tussen 30 en 60 seconden in te stellen actimeo .
nosharesock n.v.t. Optioneel. Hiermee dwingt u af dat de client altijd een nieuwe verbinding maakt met de server, zelfs als deze een bestaande verbinding met de SMB-koppeling heeft. Dit kan de prestaties verbeteren, omdat elk koppelpunt een andere TCP-socket gebruikt. In sommige gevallen nosharesock kunnen de prestaties afnemen omdat hetzelfde bestand niet in de cache wordt opgeslagen wanneer het wordt geopend vanaf twee koppelingen van dezelfde client.
max_channels= 4 Aanbevolen bij het gebruik van SMB meerdere kanalen. Hiermee geeft u het maximum aantal kanalen (netwerkverbindingen) met de bestandsshare op. Als u SMB meerdere kanalen gebruikt en het aantal kanalen groter is dan vier, leidt dit tot slechte prestaties.
remount n.v.t. Koppelt de bestandsshare opnieuw en wijzigt de koppelingsopties indien opgegeven. Gebruik deze password2 optie in gevallen waarin u een alternatief wachtwoord wilt opgeven om een verlopen wachtwoord te herstellen na de oorspronkelijke koppeling.
nobrl n.v.t. Aanbevolen in scenario's met één client wanneer adviesvergrendelingen vereist zijn. Azure Files biedt geen ondersteuning voor adviesvergrendelingen en deze instelling voorkomt het verzenden van bytebereikvergrendelingsaanvragen naar de server.
snapshot= tijd Koppel een specifieke momentopname van de bestandsshare. De tijd moet een positief geheel getal zijn dat de aangevraagde momentopname aangeeft (in eenheden van 100 nanoseconden die zijn verstreken sinds 1 januari 1601, of als alternatief kan deze worden opgegeven in de GMT-indeling, bijvoorbeeld @GMT-2024.03.27-20.52.19).
closetimeo= 5 Hiermee configureert u de time-out voor afsluiten (handle cache) in seconden of schakelt u deze uit door deze in te stellen op 0. De standaardwaarde is 5 seconden.
nostrictsync n.v.t. Vraag de server niet om fsync() leeg te maken. Sommige servers voeren standaard niet-gebufferde schrijfbewerkingen uit, in dat geval is leegmaken redundant. Deze optie kan de prestaties verbeteren voor workloads waarbij een client veel kleine schrijf- en fsync-combinaties uitvoert en waarbij de netwerklatentie veel hoger is dan de serverlatentie.
multiuser n.v.t. Gebruikers toegang tot afzonderlijke referenties toewijzen bij toegang tot de server. CIFS-koppelingen gebruiken standaard slechts één set gebruikersreferenties (de koppelingsreferenties) bij het openen van een share. Met deze optie maakt de client in plaats daarvan een nieuwe sessie met de server met behulp van de referenties van de gebruiker wanneer een nieuwe gebruiker toegang heeft tot de koppeling. Voor verdere toegang door die gebruiker worden deze referenties ook gebruikt. Omdat de kernel niet om wachtwoorden kan vragen, zijn koppels voor meerdere gebruikers beperkt tot koppelingen met behulp van sec= opties waarvoor geen wachtwoorden zijn vereist.
cifsacl n.v.t. Deze optie wordt gebruikt om CIFS/NTFS-ACL's toe te wijzen aan/van Linux-machtigings bits, SID's toewijzen aan/van UID's en GID's, en beveiligingsdescriptors ophalen en instellen. Alleen ondersteund voor NTLMv2-verificatie.
idsfromsid,modefromsid n.v.t. Aanbevolen wanneer de client een door de client afgedwongen autorisatie moet uitvoeren. Hiermee schakelt u machtigingen voor Unix-stijl in. Werkt alleen wanneer UID's/GID's uniform zijn voor alle clients. Alleen ondersteund voor NTLMv2-verificatie.
sec= krb5 Vereist voor Kerberos-verificatie. Als u de Kerberos-beveiligingsmodus wilt inschakelen, stelt u deze in sec=krb5. Als u deze optie gebruikt, moet u de gebruikersnaam en het wachtwoord weglaten. De Linux-client moet lid zijn van een domein. Zie Active Directory-verificatie inschakelen via SMB voor Linux-clients.
uid= 0 Optioneel. Hiermee stelt u de uid in die eigenaar is van alle bestanden of mappen in het gekoppelde bestandssysteem wanneer de server geen eigendomsgegevens verstrekt. Het kan worden opgegeven als een gebruikersnaam of een numerieke uid. Als dit niet is opgegeven, is de standaardwaarde 0.
gid= 0 Optioneel. Hiermee stelt u de gid in die eigenaar is van alle bestanden of mappen in het gekoppelde bestandssysteem wanneer de server geen eigendomsgegevens verstrekt. Deze kan worden opgegeven als een groepsnaam of een numerieke gid. Als dit niet is opgegeven, is de standaardwaarde 0.
file_mode= n.v.t. Optioneel. Als de server geen ondersteuning biedt voor de CIFS Unix-extensies, wordt de standaardbestandsmodus overschreven.
dir_mode= n.v.t. Optioneel. Als de server geen ondersteuning biedt voor de CIFS Unix-extensies, wordt hiermee de standaardmodus voor mappen overschreven.
handletimeout= n.v.t. Optioneel. De tijd (in milliseconden) waarvoor de server de bestandsgreep moet reserveren na een failover die wacht totdat de client opnieuw verbinding maakt.

Volgende stappen

Zie voor meer informatie over het gebruik van SMB Azure-bestandsshares met Linux: