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.
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 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.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.
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: