Einbinden einer Azure-SMB-Dateifreigabe unter Linux

Achtung

Dieser Artikel bezieht sich auf CentOS, eine Linux-Distribution, die sich dem End-of-Life-Status (EOL) nähert. Sie sollten Ihre Nutzung entsprechend planen. Weitere Informationen finden Sie im CentOS End-of-Life-Leitfaden. Azure Files ist das benutzerfreundliche Clouddateisystem von Microsoft. 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.

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

Zur Linux-Kernelversion 3.7 wurde Unterstützung für SMB 2.1 hinzugefügt. Wenn Sie also eine Linux-Kernelversion ab 3.7 verwenden, sollte SMB 2.1 unterstützt werden.

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. Das Paket „cifs-utils“ kann mithilfe des Paket-Managers für die Linux-Distribution Ihrer Wahl installiert werden.

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

Binden Sie die Dateifreigabe als Nächstes mit dem Befehl mount ein. Im folgenden Beispiel wird der Befehl $SMB_PATH mit dem vollqualifizierten Domänennamen für den Dateiendpunkt des Speicherkontos aufgefüllt und $STORAGE_ACCOUNT_KEY mit dem Speicherkontoschlüssel.

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 username=$STORAGE_ACCOUNT_NAME,password=$STORAGE_ACCOUNT_KEY,serverino,nosharesock,actimeo=30,mfsymlinks

Zum Festlegen von Berechtigungen können Sie in den Einbindungsoptionen für den Befehl mountuid/gid oder dir_mode und file_mode verwenden. Weitere Informationen zum Festlegen von Berechtigungen finden Sie unter UNIX numeric notation (Numerische UNIX-Notation).

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 Bereitstellungskonfiguration 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 möchten Sie für die Einbindung alternative uid- und gid- oder dir_mode- und file_mode-Berechtigungen nach Wunsch festlegen. Weitere Informationen zum Festlegen von Berechtigungen finden Sie unter UNIX numeric notation (Numerische UNIX-Notation) auf Wikipedia.

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" | 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 may 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 :$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

Bereitstellen einer Momentaufnahme einer Dateifreigabe

Wenn Sie eine bestimmte Momentaufnahme einer SMB-Azure-Dateifreigabe bereitstellen möchten, müssen Sie die Option snapshot als Teil des Befehls mount angeben, wobei snapshot der Zeitpunkt ist, zu dem die jeweilige Momentaufnahme in einem Format wie @GMT-2023.01.05-00.08.20 erstellt wurde. Die Option snapshot wird in Linux-Kernelversionen ab 4.19 unterstützt.

Befolgen Sie nach dem Erstellen der Momentaufnahme der Dateifreigabe die folgenden Anweisungen, um sie einzubinden.

  1. Navigieren Sie im Azure-Portal zu dem Speicherkonto, das die Dateifreigabe enthält, von der Sie eine Momentaufnahme bereitstellen möchten.

  2. Wählen Sie Datenspeicher > Dateifreigaben aus, und wählen Sie dann die Dateifreigabe aus.

  3. Wählen Sie Vorgänge > Momentaufnahmen aus, und notieren Sie sich den Namen der Momentaufnahme, die Sie bereitstellen möchten. Bei dem Namen der Momentaufnahme handelt es sich um einen GMT-Zeitstempel wie beispielsweise im folgenden Screenshot.

    Screenshot: Navigation zum Anzeigen des Namens und Zeitstempels einer Momentaufnahme einer Dateifreigabe im Azure-Portal.

  4. Konvertieren Sie den Zeitstempel in das vom Befehl mount erwartete Format, das @GMT-year.month.day-hour.minutes.seconds lautet. In diesem Beispiel würden Sie 2023-01-05T00:08:20.0000000Z in @GMT-2023.01.05-00.08.20 konvertieren.

  5. Führen Sie den Befehl mount mit dem GMT-Zeitstempel aus, um den snapshot-Wert anzugeben. Ersetzen Sie dabei unbedingt <storage-account-name>, <file-share-name> und den GMT-Zeitstempel durch Ihre Werte. Die CRED-Datei enthält die zum Bereitstellen der Freigabe zu verwendenden Anmeldeinformationen (siehe Automatisches Einbinden von Dateifreigaben).

    sudo mount -t cifs //<storage-account-name>.file.core.windows.net/<file-share-name> /media/<file-share-name>/snapshot1 -o credentials=/etc/smbcredentials/snapshottestlinux.cred,snapshot=@GMT-2023.01.05-00.08.20
    
  6. Wenn Sie die Momentaufnahme unter dem Pfad /media/<file-share-name>/snapshot1 durchsuchen können, war die Bereitstellung erfolgreich.

Falls die Bereitstellung nicht funktioniert, finden Sie weitere Informationen unter Behandeln von Konnektivitäts- und Zugriffsproblemen in Azure Files (SMB).

Nächste Schritte

Weitere Informationen zu Azure Files finden Sie unter diesen Links: