Freigeben über


Einbinden von Azure-SMB-Dateifreigaben auf Linux-Clients

Azure-Dateifreigaben können mithilfe des SMB-Kernelclients in Linux-Distributionen eingebunden werden.

Es wird empfohlen, zum Einbinden einer Azure-Dateifreigabe unter Linux SMB 3.1.1 zu verwenden. Standardmäßig müssen Daten bei Azure Files während der Übertragung verschlüsselt werden. Dies wird nur von SMB 3.0+ unterstützt. Azure Files unterstützt auch die Version 2.1 von SMB, bei der allerdings keine Verschlüsselung während der Übertragung möglich ist. Deshalb können Sie mit SMB 2.1 aus Sicherheitsgründen keine Azure-Dateifreigaben aus einer anderen Region oder lokal einbinden. Verwenden Sie SMB 3.1.1, sofern Ihre Anwendung nicht ausdrücklich SMB 2.1 erfordert. SMB 2.1-Unterstützung wurde zur Linux-Kernelversion 3.7 hinzugefügt. Wenn Sie also eine höhere Version des Linux-Kernels als 3.7 verwenden, sollte sie SMB 2.1 unterstützen.

Distribution SMB 3.1.1 (Empfohlen) SMB 3.0
Linux-Kernelversion
  • Basic 3.1.1-Unterstützung: 4.17
  • Standard-Bereitstellung: 5.0
  • AES-128-GCM-Verschlüsselung: 5.3
  • AES-256-GCM-Verschlüsselung: 5.10
  • Basic 3.0-Unterstützung: 3.12
  • AES-128-CCM-Verschlüsselung: 4.11
Ubuntu AES-128-GCM-Verschlüsselung: 18.04.5 LTS+ AES-128-CCM-Verschlüsselung: 16.04.4 LTS+
Red Hat Enterprise Linux (RHEL)
  • Basic: 8.0+
  • Standard-Bereitstellung: 8.2+
  • AES-128-GCM-Verschlüsselung: 8.2+
7.5 und höher
Debian Basic: 10+ AES-128-CCM-Verschlüsselung: 10+
SUSE Linux Enterprise Server AES-128-GCM-Verschlüsselung: 15 SP2+ AES-128-CCM-Verschlüsselung: 12 SP2+

Wenn Ihre Linux-Distribution in der vorstehenden Tabelle nicht aufgeführt ist, können Sie die Linux-Kernelversion mit dem Befehl uname überprüfen:

uname -r

Hinweis

Alle Bereitstellungsskripts in diesem Artikel stellen SMB-Dateifreigaben mit den Linux-Standarddatei- und Ordnerberechtigungen 0755 bereit. Dies bedeutet: Lesen, Schreiben und Ausführen für den Datei-/Verzeichnisbesitzer, Lesen und Ausführen für Benutzer in der Besitzergruppe und Lesen und Ausführen für andere Benutzer. Je nach den Sicherheitsrichtlinien Ihrer Organisation sollten Sie möglicherweise alternative Berechtigungen uid/gid oder dir_mode und file_mode in den Bereitstellungsoptionen festlegen. Weitere Informationen zum Festlegen von Berechtigungen finden Sie unter UNIX numeric notation (Numerische UNIX-Notation).

Gilt für:

Dateifreigabetyp SMB NFS
Standard-Dateifreigaben (GPv2), LRS/ZRS Ja Nein
Standard-Dateifreigaben (GPv2), GRS/GZRS Ja Nein
Premium-Dateifreigaben (FileStorage), LRS/ZRS Ja Nein

Voraussetzungen

  • Vergewissern Sie sich, dass das cifs-utils-Paket installiert ist. Installieren Sie das Paket „cifs-utils“ mithilfe des Paket-Managers für die Linux-Distribution Ihrer Wahl.

Verwenden Sie unter Ubuntu und Debian den Paket-Manager apt:

sudo apt update
sudo apt install cifs-utils

Verwenden Sie bei anderen Distributionen den entsprechenden Paket-Manager, oder kompilieren Sie den Quellcode.

  • Die neueste Version der Azure-Befehlszeilenschnittstelle (CLI). Informationen zum Installieren der Azure CLI finden Sie unter Installieren der Azure CLI im Abschnitt zu Ihrem Betriebssystem. Wenn Sie lieber das Azure PowerShell-Modul in PowerShell 6 und höher verwenden möchten, können Sie dies tun. Allerdings beziehen sich die Anleitungen in diesem Artikel auf die Azure CLI.

  • Prüfen Sie, ob Port 445 geöffnet ist: SMB kommuniziert über den TCP-Port 445. Vergewissern Sie sich, dass der TCP-Port 445 des Clientcomputers nicht durch die Firewall oder den ISP blockiert wird. Ersetzen Sie <your-resource-group> und <your-storage-account>, und führen Sie dann das folgende Skript aus:

    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
    

    Wenn erfolgreich eine Verbindung hergestellt werden konnte, wird in etwa die folgende Ausgabe angezeigt:

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

    Wenn Sie Port 445 in Ihrem Unternehmensnetzwerk nicht öffnen können oder der Internetdienstanbieter dies nicht zulässt, können Sie eine VPN-Verbindung oder ExpressRoute verwenden, um Port 445 zu umgehen. Weitere Informationen finden Sie unter Überlegungen zum Netzwerk für den direkten Zugriff auf Azure-Dateifreigaben.

Bedarfsgesteuertes Einbinden der Azure-Dateifreigabe mit „Einbinden“

Wenn Sie eine Dateifreigabe unter einem Linux-Betriebssystem einbinden, wird Ihre Remotedateifreigabe in Ihrem lokalen Dateisystem als Ordner dargestellt. Sie können Dateifreigaben an einem beliebigen Ort in Ihrem System einbinden. Im folgenden Beispiel wird die Dateifreigabe unter dem Pfad /media eingebunden. Dies können Sie in Ihren bevorzugten Pfad ändern, indem Sie die Variable $MNT_ROOT ändern.

Ersetzen Sie <resource-group-name>, <storage-account-name> und <file-share-name> durch die entsprechenden Informationen für Ihre Umgebung:

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

Initialisieren Sie als Nächstes die Anmeldeinformationsdatei, indem Sie das folgende Skript ausführen.

# 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

Jetzt können Sie die Dateifreigabe mithilfe des Befehls mount unter Verwendung der Anmeldeinformationsdatei bereitstellen. Im folgenden Beispiel wird der Befehl $SMB_PATH mit dem vollqualifizierten Domänennamen für den Dateiendpunkt des Speicherkontos ausgefüllt.

Hinweis

Ab der Linux-Kernelversion 5.0 ist SMB 3.1.1 das ausgehandelte Standardprotokoll. Wenn Sie eine Version des Linux-Kernels verwenden, die älter als 5.0 ist, geben Sie in der Liste der Bereitstellungsoptionen vers=3.1.1 an.

# 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

Falls gewünscht, können Sie dieselbe Azure-Dateifreigabe auch in mehrere Bereitstellungspunkte einbinden. Wenn Sie die Azure-Dateifreigabe nicht mehr benötigen, heben Sie deren Einbindung mit sudo umount $mntPath auf.

Automatisches Einbinden von Dateifreigaben

Wenn Sie eine Dateifreigabe unter einem Linux-Betriebssystem einbinden, wird Ihre Remotedateifreigabe in Ihrem lokalen Dateisystem als Ordner dargestellt. Sie können Dateifreigaben an einem beliebigen Ort in Ihrem System einbinden. Im folgenden Beispiel wird die Dateifreigabe unter dem Pfad /media eingebunden. Dies können Sie in Ihren bevorzugten Pfad ändern, indem Sie die Variable $MNT_ROOT ändern.

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

Verwenden Sie zum Einbinden einer Azure-Dateifreigabe unter Linux den Speicherkontonamen als Benutzernamen der Dateifreigabe und den Speicherkontoschlüssel als Kennwort. Weil die Anmeldeinformationen für das Speicherkonto im Laufe der Zeit geändert werden können, sollten Sie diese getrennt von der Einbindungskonfiguration speichern.

Im folgenden Beispiel wird gezeigt, wie Sie eine Datei zum Speichern der Anmeldeinformationen erstellen können. Ersetzen Sie <resource-group-name> und <storage-account-name> durch die entsprechenden Angaben für Ihre Umgebung.

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

Zum automatischen Einbinden einer Dateifreigabe haben Sie die Wahl zwischen einem statischen Einbinden über das Hilfsprogramm /etc/fstab oder einem dynamischen Einbinden über das Hilfsprogramm autofs.

Statisches Einbinden mit „/etc/fstab“

Erstellen Sie in der früheren Umgebung unter Ihrem Bereitstellungsordner einen Ordner für Ihr Speicherkonto bzw. Ihre Dateifreigabe. Ersetzen Sie <file-share-name> durch den entsprechenden Namen Ihrer Azure-Dateifreigabe.

FILE_SHARE_NAME="<file-share-name>"

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

Erstellen Sie abschließend einen Datensatz in der Datei /etc/fstab für Ihre Azure-Dateifreigabe. Im nachstehenden Befehl werden Linux-Datei- und -Ordnerberechtigungen mit dem Standardwert „0755“ verwendet. Dadurch erhalten Besitzer Lese-, Schreib- und Ausführungsberechtigungen (basierend auf dem Linux-Besitzer der Datei bzw. des Verzeichnisses). Benutzer in Besitzergruppen erhalten Lese- und Ausführungsberechtigungen und alle anderen Benutzer des Systems Lese- und Ausführungsberechtigungen. Möglicherweise empfiehlt es sich, für die Einbindung alternative uid- und gid- oder dir_mode- und file_mode-Berechtigungen nach Wunsch festzulegen. Weitere Informationen zum Festlegen von Berechtigungen finden Sie unter UNIX numeric notation (Numerische UNIX-Notation).

Tipp

Wenn Docker-Container, die .NET Core-Anwendungen ausführen, in der Lage sein sollen, in die Azure-Dateifreigabe zu schreiben, nehmen Sie nobrl in die SMB-Bereitstellungsoptionen auf, um zu verhindern, dass Anforderungen für Bytebereichssperrungen an den Server gesendet werden.

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

Hinweis

Ab der Linux-Kernelversion 5.0 ist SMB 3.1.1 das ausgehandelte Standardprotokoll. Sie können alternative Protokollversionen mithilfe der Bereitstellungsoption vers angeben (Protokollversionen sind 3.1.1, 3.0 und 2.1).

Dynamisches Einbinden mit „autofs“

Wenn Sie eine Dateifreigabe mit dem Hilfsprogramm autofs dynamisch einbinden möchten, installieren Sie sie mithilfe des Paket-Managers in der Linux-Distribution Ihrer Wahl.

Verwenden Sie bei Ubuntu- und Debian-Distributionen den Paket-Manager apt:

sudo apt update
sudo apt install autofs

Aktualisieren Sie als Nächstes die Konfigurationsdateien 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

Der letzte Schritt ist ein Neustart des Diensts autofs.

sudo systemctl restart autofs

Nächste Schritte

Weitere Informationen zu Azure Files finden Sie unter diesen Links: