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 |
|
|
Ubuntu | AES-128-GCM-versleuteling: 18.04.5 LTS+ | AES-128-CCM-versleuteling: 16.04.4 LTS+ |
Red Hat Enterprise Linux (RHEL) |
|
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 | ![]() |
![]() |
Standaardbestandsshares (GPv2), GRS/GZRS | ![]() |
![]() |
Premium bestandsshares (FileStorage), LRS/ZRS | ![]() |
![]() |
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.0
en 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 , acregmax en acdirmin dezelfde 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: