Подключение общих папок Azure SMB на клиентах Linux
Файловые ресурсы Azure можно подключить в дистрибутивах Linux с помощью SMB-клиента в ядре.
Рекомендуемый способ подключения общей папки Azure в Linux состоит в использовании SMB 3.1.1. По умолчанию для Файлов Azure требуется шифрование при передаче, поддерживаемое SMB 3.0+. Файлы Azure также поддерживает SMB 2.1, который не поддерживает шифрование при передаче, но вы не можете подключить общие папки Azure с SMB 2.1 из другого региона Azure или локальной среды по соображениям безопасности. Если приложению специально не требуется SMB 2.1, используйте SMB 3.1.1. Поддержка SMB 2.1 была добавлена в ядро Linux версии 3.7, поэтому если вы используете версию ядра Linux после 3.7, она должна поддерживать SMB 2.1.
Распределение | SMB 3.1.1 (рекомендуется) | SMB 3.0 |
---|---|---|
Версия ядра Linux |
|
|
Ubuntu | Шифрование AES 128 GCM: 18.04.5 LTS+ | Шифрование AES 128 CCM: 16.04.4 LTS+ |
Red Hat Enterprise Linux (RHEL) |
|
7.5 или выше |
Debian | Базовый: 10+ | Шифрование AES 128 CCM: 10+ |
SUSE Linux Enterprise Server | Шифрование AES 128 GCM: 15 SP2+ | Шифрование AES 128 CCM: 12 SP2+ |
Если ваш дистрибутив Linux отсутствует в таблицы выше, можно проверить версию ядра Linux с помощью команды uname
:
uname -r
Примечание.
Все сценарии подключения, приведенные в этой статье, подключают общие папки SMB с помощью разрешений на файлы и папки Linux по умолчанию 0755. Это означает, что чтение, запись и выполнение для владельца файла или каталога, чтение и выполнение для пользователей в группе владельцев, а также чтение и выполнение для других пользователей. В зависимости от политик безопасности организации может потребоваться задать альтернативные uid
/gid
или dir_mode
file_mode
разрешения в параметрах подключения. Дополнительные сведения о настройке разрешений см . в числовых нотациях UNIX. См . параметры подключения для списка параметров подключения.
Применяется к
Тип общей папки | SMB | NFS |
---|---|---|
Стандартные общие папки (GPv2), LRS/ZRS | ||
Стандартные общие папки (GPv2), GRS/GZRS | ||
Общие папки уровня "Премиум" (FileStorage), LRS/ZRS |
Необходимые компоненты
- Убедитесь, что установлен пакет cifs-utils. Установите последнюю версию пакета cifs-utils с помощью диспетчера пакетов в выбранном дистрибутиве Linux.
В Ubuntu и Debian используйте apt
диспетчер пакетов:
sudo apt update
sudo apt install cifs-utils
В других дистрибутивах используйте соответствующий диспетчер пакетов или выполните компиляцию из источника.
Самая последняя версия интерфейса командной строки (CLI) Azure. Дополнительные сведения об установке Azure CLI см. в статье Установка Azure CLI и выберите операционную систему. Если вы предпочитаете использовать модуль Azure PowerShell в PowerShell 6+, вы можете использовать его. Однако инструкции, описанные в этой статье, предназначены для Azure CLI.
Убедитесь, что порт 445 открыт: SMB взаимодействует через TCP-порт 445. Убедитесь, что брандмауэр или isP не блокирует TCP-порт 445 с клиентского компьютера. Замените
<your-resource-group>
и<your-storage-account>
запустите следующий скрипт: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
Если подключение было успешным, отобразятся следующие выходные данные.
Connection to <your-storage-account> 445 port [tcp/microsoft-ds] succeeded!
Если вы не можете открыть порт 445 в корпоративной сети или заблокировать это поставщиком услуг интернета вещей, вы можете использовать VPN-подключение или ExpressRoute для работы с портом 445. Дополнительные сведения см. в разделе Рекомендации по работе с сетями для прямого доступа к общей папке Azure.
Подключение файлового ресурса Azure по запросу с помощью
При подключении общей папки в ОС Linux удаленный файловый ресурс будет представлен в виде папки в локальной файловой системе. Общие файловые ресурсы можно подключить в любом месте системы. В следующем примере показано подключение по пути /media
. Вы можете изменить его на нужный путь, поменяв переменную $MNT_ROOT
.
Замените <resource-group-name>
, <storage-account-name>
и <file-share-name>
соответствующей информацией из своей среды:
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
Затем инициализировать файл учетных данных, выполнив следующий скрипт.
# 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
Теперь вы можете подключить общую папку с mount
помощью команды с помощью файла учетных данных. В следующем примере $SMB_PATH
команда заполняется полным доменным именем для конечной точки файла учетной записи хранения. См . параметры подключения для списка параметров подключения SMB.
Примечание.
Начиная с версии ядра Linux 5.0, SMB 3.1.1 является согласованным протоколом по умолчанию. Если вы используете версию ядра Linux старше 5.0, укажите vers=3.1.1
в списке параметров подключения.
# 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
При необходимости можно подключить одну и ту же общую папку Azure к нескольким точкам подключения.
Когда вы закончите использовать общую папку Azure, используйте sudo umount $mntPath
для отключения общей папки.
Автоматически подключать общие папки
При подключении общей папки в ОС Linux удаленный файловый ресурс будет представлен в виде папки в локальной файловой системе. Общие файловые ресурсы можно подключить в любом месте системы. В следующем примере показано подключение по пути /media
. Вы можете изменить его на нужный путь, поменяв переменную $MNT_ROOT
.
MNT_ROOT="/media"
sudo mkdir -p $MNT_ROOT
Чтобы подключить общую папку Azure в Linux, используйте имя учетной записи хранения в качестве имени пользователя общей папки и ключ учетной записи хранения в качестве пароля. Так как учетные данные учетной записи хранения могут меняться со временем, следует хранить учетные данные для учетной записи хранения отдельно от конфигурации подключения.
В следующем примере показано, как создать файл для хранения учетных данных. Не забудьте заменить <resource-group-name>
и <storage-account-name>
на соответствующую информацию из вашей среды.
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
Чтобы автоматически подключить общую папку, можно воспользоваться статическим подключением через служебную программу /etc/fstab
или использовать динамическое подключение через служебную программу autofs
.
Статическое подключение с помощью /etc/fstab
Используя более раннюю среду, создайте папку для учетной записи хранения или общей папки в папке подключения. Замените <file-share-name>
на соответствующее имя общей папки Azure.
FILE_SHARE_NAME="<file-share-name>"
MNT_PATH="$MNT_ROOT/$STORAGE_ACCOUNT_NAME/$FILE_SHARE_NAME"
sudo mkdir -p $MNT_PATH
Наконец, создайте запись в файле /etc/fstab
для общей папки Azure. В приведенной ниже команде по умолчанию использованы разрешения для файлов и папок Linux 0755, что означает права на чтение, запись и выполнение для владельца (имеется в виду владелец файла/каталога Linux), права на чтение и выполнение для пользователей в группе владельца, а также права на чтение и выполнение для прочих пользователей системы. Возможно, вы хотите задать альтернативные uid
и gid
разрешения file_mode
dir_mode
на подключение по мере необходимости. Дополнительные сведения о настройке разрешений см . в числовых нотациях UNIX. См . параметры подключения для списка параметров подключения SMB.
Совет
Если вы хотите, чтобы контейнеры Docker под управлением приложений .NET Core могли записывать данные в общую папку Azure, включите nobrl в параметры подключения SMB, чтобы избежать отправки запросов на блокировку диапазона байтов на сервер.
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
Примечание.
Начиная с версии ядра Linux 5.0, SMB 3.1.1 является согласованным протоколом по умолчанию. Можно указать альтернативные версии протокола с помощью параметра подключения vers
(версии протокола: 3.1.1
, 3.0
и 2.1
).
Динамическое подключение с помощью autofs
Чтобы динамически подключить общую папку через служебную программу autofs
, установите ее с помощью диспетчера пакетов в дистрибутиве Linux по своему усмотрению.
В дистрибутивах Ubuntu и Debian используйте apt
диспетчер пакетов:
sudo apt update
sudo apt install autofs
Затем обновите файлы конфигурации autofs
. См . параметры подключения для списка параметров подключения SMB.
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
Последним шагом является перезапуск службы autofs
.
sudo systemctl restart autofs
Параметры подключения
При подключении общих папок Azure в Linux можно использовать следующие параметры подключения.
Параметр подключения | Рекомендуемое значение | Description |
---|---|---|
username= |
Storage account name | Обязательно для проверки подлинности NTLMv2. |
password= |
Первичный ключ учетной записи хранения | Обязательно для проверки подлинности NTLMv2. |
password2= |
Дополнительный ключ учетной записи хранения | Рекомендуется в случае, если смена ключей без простоя является желательной. |
mfsymlinks |
Н/Д | Рекомендуется. Принудительное подключение поддерживает символьные ссылки, позволяя приложениям, таким как git клонировать репозитории с помощью символьных ссылок. |
actimeo= |
30-60 | Рекомендуется. Указание actimeo всех значений acregmin , acregmax acdirmin и одного и acdirmax того же значения. Использование значения ниже 30 секунд может привести к снижению производительности, так как кэши атрибутов для файлов и каталогов истекают слишком быстро. Рекомендуется задать actimeo от 30 до 60 секунд. |
nosharesock |
Н/Д | Необязательно. Заставляет клиента всегда создавать новое подключение к серверу, даже если у него есть существующее подключение к SMB. Это может повысить производительность, так как каждая точка подключения будет использовать другой сокет TCP. В некоторых случаях может снизить производительность из-за nosharesock отсутствия кэширования одного и того же файла при открытии из двух подключений из одного клиента. |
max_channels= |
4 | Рекомендуется использовать SMB Multichannel. Указывает максимальное количество каналов (сетевых подключений) к общей папке. Если вы используете SMB Multichannel и число каналов превышает четыре, это приведет к снижению производительности. |
remount |
Н/Д | При указании переключает общую папку и изменяет параметры подключения. Используйте этот password2 параметр в случаях, когда вы хотите указать альтернативный пароль для исправления истекшим сроком действия пароля после первоначального подключения. |
nobrl |
Н/Д | Рекомендуется в сценариях с одним клиентом, когда требуются блокировки рекомендаций. Файлы Azure не поддерживает блокировки рекомендаций, и этот параметр предотвращает отправку запросов на блокировку диапазона байтов на сервер. |
snapshot= |
Время | Подключите определенный моментальный снимок общей папки. Время должно быть положительным целым числом, определяющим запрошенный моментальный снимок (в 100-наносекундах единиц, прошедших с 1 января 1601 г., или же можно указать в формате GMT, например. @GMT-2024.03.27-20.52.19) |
closetimeo= |
5 | Настраивает отложенное время ожидания закрытия (обработчик кэша) в секундах или отключает его, установив значение 0. Значение по умолчанию — 5 секунд. |
nostrictsync |
Н/Д | Не запрашивайте у сервера очистку на fsync(). Некоторые серверы выполняют не буферизируемые записи по умолчанию, в этом случае очистка является избыточной. Этот параметр может повысить производительность рабочих нагрузок, в которых клиент выполняет много небольших сочетаний записи и fsync, а задержка в сети значительно выше, чем задержка сервера. |
multiuser |
Н/Д | Сопоставление доступа пользователей к отдельным учетным данным при доступе к серверу. По умолчанию ciFS подключает только один набор учетных данных пользователя (учетные данные подключения) при доступе к общей папке. С помощью этого параметра клиент создает новый сеанс с сервером с использованием учетных данных пользователя всякий раз, когда новый пользователь обращается к подключению. Дополнительные доступы этого пользователя также будут использовать эти учетные данные. Так как ядро не может запрашивать пароли, многопользовательские подключения ограничены подключениями с помощью sec= параметров, которые не требуют паролей. |
cifsacl |
Н/Д | Этот параметр используется для сопоставления списков управления доступом CIFS/NTFS с битами разрешений Linux, сопоставления идентификаторов SID и идентификаторов uiD и GID, а также получения и задания дескрипторов безопасности. Поддерживается только для проверки подлинности NTLMv2. |
idsfromsid,modefromsid |
Н/Д | Рекомендуется, когда клиенту необходимо выполнить авторизацию, применяемую клиентом. Включает разрешения в стиле Unix. Работает только в том случае, если идентификаторы пользовательского интерфейса или GID являются универсальными для всех клиентов. Поддерживается только для проверки подлинности NTLMv2. |
sec= |
krb5 | Требуется для проверки подлинности Kerberos. Чтобы включить режим безопасности Kerberos, установите флажок sec=krb5 . При использовании этого параметра необходимо не указывать имя пользователя и пароль. Клиент Linux должен быть присоединен к домену. См. раздел "Включить проверку подлинности Active Directory" по протоколу SMB для клиентов Linux. |
uid= |
0 | Необязательно. Задает пользовательский интерфейс, который будет принадлежать всем файлам или каталогам в подключенной файловой системе, если сервер не предоставляет сведения о владельце. Его можно указать как имя пользователя, так и числовой пользовательский интерфейс. Если значение не указано, значение по умолчанию равно 0. |
gid= |
0 | Необязательно. Задает gid, который будет принадлежать всем файлам или каталогам в подключенной файловой системе, если сервер не предоставляет сведения о собственности. Его можно указать как имя группы, так и числовой гид. Если значение не указано, значение по умолчанию равно 0. |
file_mode= |
Н/Д | Необязательно. Если сервер не поддерживает расширения CIFS Unix, это переопределяет режим файлов по умолчанию. |
dir_mode= |
Н/Д | Необязательно. Если сервер не поддерживает расширения CIFS Unix, это переопределяет режим по умолчанию для каталогов. |
handletimeout= |
Н/Д | Необязательно. Время (в миллисекундах), для которого сервер должен резервировать дескриптор файла после отработки отказа, ожидая повторного подключения клиента. |
Следующие шаги
Дополнительные сведения об использовании общих папок SMB Azure с Linux см. в следующей статье: