Linux で Azure Files を使用するUse Azure Files with Linux

Azure Files は、Microsoft の使いやすいクラウド ファイル システムです。Azure Files is Microsoft's easy to use cloud file system. Azure ファイル共有は、SMB カーネル クライアントを使用して Linux ディストリビューションにマウントできます。Azure file shares can be mounted in Linux distributions using the SMB kernel client. この記事では、Azure ファイル共有を mount コマンドを使用してオンデマンドでマウントするか、/etc/fstab にエントリを作成することで起動時にマウントするという 2 つの方法について説明します。This article shows two ways to mount an Azure file share: on-demand with the mount command and on-boot by creating an entry in /etc/fstab.

Linux で Azure ファイル共有をマウントするには、SMB 3.0 を使用することをお勧めします。The recommended way to mount an Azure file share on Linux is using SMB 3.0. 既定では、Azure Files は転送中の暗号化を必要としますが、これは SMB 3.0 でのみサポートされています。By default, Azure Files requires encryption in transit, which is only supported by SMB 3.0. Azure Files では SMB 2.1 (転送中の暗号化をサポートしていない) もサポートしていますが、セキュリティ上の理由から、別の Azure リージョンまたはオンプレミスから SMB 2.1 を使用して Azure ファイル共有をマウントすることはできません。Azure Files also supports SMB 2.1, which does not support encryption in transit, but you may not mount Azure file shares with SMB 2.1 from another Azure region or on-premises for security reasons. 最近リリースされた Linux ディストリビューションでは SMB 3.0 がサポートされているため、アプリケーションで特別に必要とされるのでない限り、SMB 2.1 を使用する理由はほとんどありません。Unless your application specifically requires SMB 2.1, there is little reason to use it since most popular, recently released Linux distributions support SMB 3.0:

SMB 2.1SMB 2.1
(同じ Azure リージョン内の VM 上のマウント)(Mounts on VMs within same Azure region)
SMB 3.0SMB 3.0
(オンプレミスおよびクロスリージョンからのマウント)(Mounts from on premises and cross-region)
UbuntuUbuntu 14.04+14.04+ 16.04+16.04+
Red Hat Enterprise Linux (RHEL)Red Hat Enterprise Linux (RHEL) 7+7+ 7.5+7.5+
CentOSCentOS 7+7+ 7.5+7.5+
DebianDebian 8+8+ 10+10+
openSUSEopenSUSE 13.2+13.2+ 42.3 以降42.3+
SUSE Linux Enterprise ServerSUSE Linux Enterprise Server 12 以降12+ 12 SP3+12 SP3+

上記の表に記載されていない Linux ディストリビューションを使用している場合は、Linux カーネル バージョンを確認することで、その Linux ディストリビューションで暗号化を使用した SMB 3.0 がサポートされているかどうかを確認できます。If you're using a Linux distribution not listed in the above table, you can check to see if your Linux distribution supports SMB 3.0 with encryption by checking the Linux kernel version. 暗号化を使用する SMB 3.0 が Linux カーネル バージョン 4.11 に追加されました。SMB 3.0 with encryption was added to Linux kernel version 4.11. uname コマンドにより、使用中の Linux カーネルのバージョンが返されます。The uname command will return the version of the Linux kernel in use:

uname -r

前提条件Prerequisites

  • cifs-utils パッケージがインストールされていることを確認します。Ensure the cifs-utils package is installed.
    cifs-utils パッケージは、選択した Linux ディストリビューションのパッケージ マネージャーを使用してインストールできます。The cifs-utils package can be installed using the package manager on the Linux distribution of your choice.

    UbuntuDebian ベースのディストリビューションでは、apt パッケージ マネージャーを使用します。On Ubuntu and Debian-based distributions, use the apt package manager:

    sudo apt update
    sudo apt install cifs-utils
    

    FedoraRed Hat Enterprise Linux 8+ 、および CentOS 8+ では、dnf パッケージ マネージャーを使用します。On Fedora, Red Hat Enterprise Linux 8+, and CentOS 8 +, use the dnf package manager:

    sudo dnf install cifs-utils
    

    以前のバージョンの Red Hat Enterprise LinuxCentOS では、yum パッケージ マネージャーを使用します。On older versions of Red Hat Enterprise Linux and CentOS, use the yum package manager:

    sudo yum install cifs-utils 
    

    openSUSE では、zypper パッケージ マネージャーを使用します。On openSUSE, use the zypper package manager:

    sudo zypper install cifs-utils
    

    他のディストリビューションでは、適切なパッケージ マネージャーを使用するか、ソースからコンパイルします。On other distributions, use the appropriate package manager or compile from source

  • Azure コマンド ライン インターフェイス (CLI) の最新バージョン。The most recent version of the Azure Command Line Interface (CLI). Azure CLI をインストールする方法の詳細については、Azure CLI のインストールに関するページを参照し、ご利用のオペレーティング システムを選択してください。For more information on how to install the Azure CLI, see Install the Azure CLI and select your operating system. PowerShell 6 以降で Azure PowerShell モジュールを使用することは可能ですが、以下の手順は Azure CLI 用に提供されています。If you prefer to use the Azure PowerShell module in PowerShell 6+, you may, however the instructions below are presented for the Azure CLI.

  • ポート 445 が開いていることを確認する: SMB は、TCP ポート 445 経由で通信します。ファイアウォールがクライアント マシンの TCP ポート 445 をブロックしていないことを確認してください。Ensure port 445 is open: SMB communicates over TCP port 445 - check to see if your firewall is not blocking TCP ports 445 from client machine. を置き換えますReplace and

    resourceGroupName="<your-resource-group>"
    storageAccountName="<your-storage-account>"
    
    # This command assumes you have logged in with az login
    httpEndpoint=$(az storage account show \
        --resource-group $resourceGroupName \
        --name $storageAccountName \
        --query "primaryEndpoints.file" | tr -d '"')
    smbPath=$(echo $httpEndpoint | cut -c7-$(expr length $httpEndpoint))
    fileHost=$(echo $smbPath | tr -d "/")
    
    nc -zvw3 $fileHost 445
    

    接続に成功した場合、次のような出力が表示されます。If the connection was successful, you should see something similar to the following output:

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

    企業ネットワーク上でポート 445 を開くことができない場合、または ISP によってブロックされている場合は、VPN 接続または ExpressRoute を使用してポート 445 を回避することができます。If you are unable to open up port 445 on your corporate network or are blocked from doing so by an ISP, you may use a VPN connection or ExpressRoute to work around port 445. 詳細については、直接の Azure ファイル共有アクセスのネットワークに関する考慮事項に関するページを参照してください。For more information, see Networking considerations for direct Azure file share access..

Azure ファイル共有のマウントMounting Azure file share

Linux ディストリビューションで Azure ファイル共有を使用するには、Azure ファイル共有のマウント ポイントとして機能するディレクトリを作成する必要があります。To use an Azure file share with your Linux distribution, you must create a directory to serve as the mount point for the Azure file share. マウント ポイントは Linux システム上のどこにでも作成できますが、一般的な規則では /mnt の下に作成します。A mount point can be created anywhere on your Linux system, but it's common convention to create this under /mnt. マウント ポイントの後、mount コマンドを使用して Azure ファイル共有にアクセスします。After the mount point, you use the mount command to access the Azure file share.

必要に応じて、同じ Azure ファイル共有を複数のマウント ポイントにマウントできます。You can mount the same Azure file share to multiple mount points if desired.

Azure ファイル共有を mount を使用してオンデマンドでマウントするMount the Azure file share on-demand with mount

  1. マウント ポイントのフォルダーを作成します<your-resource-group><your-storage-account><your-file-share> をお使いの環境に適した情報に置き換えます。Create a folder for the mount point: Replace <your-resource-group>, <your-storage-account>, and <your-file-share> with the appropriate information for your environment:

    resourceGroupName="<your-resource-group>"
    storageAccountName="<your-storage-account>"
    fileShareName="<your-file-share>"
    
    mntPath="/mnt/$storageAccountName/$fileShareName"
    
    sudo mkdir -p $mntPath
    
  2. mount コマンドを使用して Azure ファイル共有をマウントしますUse the mount command to mount the Azure file share. 次の例では、ローカルの Linux ファイルとフォルダーのアクセス許可の既定値は 0755 です。これは、所有者 (ファイル/ディレクトリの Linux 所有者に基づく) の読み取り、書き込み、および実行、所有者グループのユーザーの読み取りおよび実行、システム上の他のユーザーの読み取りおよび実行を意味します。In the example below, the local Linux file and folder permissions default 0755, which means read, write, and execute for the owner (based on the file/directory Linux owner), read and execute for users in owner group, and read and execute for others on the system. uid および gid マウント オプションを使用して、マウントのユーザー ID とグループ ID を設定できます。You can use the uid and gid mount options to set the user ID and group ID for the mount. また、dir_mode および file_mode を使用して、必要に応じてカスタム アクセス許可を設定することもできます。You can also use dir_mode and file_mode to set custom permissions as desired. アクセス許可を設定する方法の詳細については、Wikipedia の「UNIX numeric notation」 (UNIX の数値表記) を参照してください。For more information on how to set permissions, see UNIX numeric notation on Wikipedia.

    httpEndpoint=$(az storage account show \
        --resource-group $resourceGroupName \
        --name $storageAccountName \
        --query "primaryEndpoints.file" | tr -d '"')
    smbPath=$(echo $httpEndpoint | cut -c7-$(expr length $httpEndpoint))$fileShareName
    
    storageAccountKey=$(az storage account keys list \
        --resource-group $resourceGroupName \
        --account-name $storageAccountName \
        --query "[0].value" | tr -d '"')
    
    sudo mount -t cifs $smbPath $mntPath -o vers=3.0,username=$storageAccountName,password=$storageAccountKey,serverino
    

    注意

    上記の mount コマンドは、SMB 3.0 でマウントされます。The above mount command mounts with SMB 3.0. Linux ディストリビューションで暗号化を使用した SMB 3.0 をサポートしていない場合、または SMB 2.1 のみをサポートしている場合は、ストレージ アカウントと同じリージョン内の Azure VM からのみマウントできます。If your Linux distribution does not support SMB 3.0 with encryption or if it only supports SMB 2.1, you may only mount from an Azure VM within the same region as the storage account. 暗号化を使用した SMB 3.0 をサポートしていない Linux ディストリビューションで Azure ファイル共有をマウントするには、ストレージ アカウントの転送中の暗号化を無効にする必要があります。To mount your Azure file share on a Linux distribution that does not support SMB 3.0 with encryption, you will need to disable encryption in transit for the storage account.

Azure ファイル共有の使用を完了したら、sudo umount $mntPath を使用して共有を解除できます。When you are done using the Azure file share, you may use sudo umount $mntPath to unmount the share.

/etc/fstab を使って Azure ファイル共有の永続的なマウント ポイントを作成するCreate a persistent mount point for the Azure file share with /etc/fstab

  1. マウント ポイントのフォルダーを作成します。マウント ポイント用のフォルダーはファイル システム上のどこにでも作成できますが、一般的な規則では /mnt の下に作成します。Create a folder for the mount point: A folder for a mount point can be created anywhere on the file system, but it's common convention to create this under /mnt. たとえば、次のコマンドは新しいディレクトリを作成し、<your-resource-group><your-storage-account><your-file-share> をお使いの環境に適した情報に置き換えます。For example, the following command creates a new directory, replace <your-resource-group>, <your-storage-account>, and <your-file-share> with the appropriate information for your environment:

    resourceGroupName="<your-resource-group>"
    storageAccountName="<your-storage-account>"
    fileShareName="<your-file-share>"
    
    mntPath="/mnt/$storageAccountName/$fileShareName"
    
    sudo mkdir -p $mntPath
    
  2. 共有ファイル用のユーザー名 (ストレージ アカウント名) とパスワード (ストレージ アカウント キー) を格納する資格情報ファイルを作成します。Create a credential file to store the username (the storage account name) and password (the storage account key) for the file share.

    if [ ! -d "/etc/smbcredentials" ]; then
        sudo mkdir "/etc/smbcredentials"
    fi
    
    storageAccountKey=$(az storage account keys list \
        --resource-group $resourceGroupName \
        --account-name $storageAccountName \
        --query "[0].value" | tr -d '"')
    
    smbCredentialFile="/etc/smbcredentials/$storageAccountName.cred"
    if [ ! -f $smbCredentialFile ]; then
        echo "username=$storageAccountName" | sudo tee $smbCredentialFile > /dev/null
        echo "password=$storageAccountKey" | sudo tee -a $smbCredentialFile > /dev/null
    else 
        echo "The credential file $smbCredentialFile already exists, and was not modified."
    fi
    
  3. 資格情報ファイルのアクセス許可を変更して、ルートのみがパスワード ファイルの読み取りと変更を実行できるようにします。Change permissions on the credential file so only root can read or modify the password file. ストレージ アカウント キーは、本質的にはストレージ アカウント キーのスーパー管理者パスワードであるため、ルートのみがアクセスできるようにファイルのアクセス許可を設定して、特権の低いユーザーがストレージ アカウント キーを取得できないようにすることが重要です。Since the storage account key is essentially a super-administrator password for the storage account, setting the permissions on the file such that only root can access is important so that lower privilege users cannot retrieve the storage account key.

    sudo chmod 600 $smbCredentialFile
    
  4. 後続のコマンドを使用して、/etc/fstab に下記の行を追加します。次の例では、ローカルの Linux ファイルとフォルダーのアクセス許可の既定値は 0755 です。これは、所有者 (ファイル/ディレクトリの Linux 所有者に基づく) の読み取り、書き込み、および実行、所有者グループのユーザーの読み取りおよび実行、システム上の他のユーザーの読み取りおよび実行を意味します。Use the following command to append the following line to /etc/fstab: In the example below, the local Linux file and folder permissions default 0755, which means read, write, and execute for the owner (based on the file/directory Linux owner), read and execute for users in owner group, and read and execute for others on the system. uid および gid マウント オプションを使用して、マウントのユーザー ID とグループ ID を設定できます。You can use the uid and gid mount options to set the user ID and group ID for the mount. また、dir_mode および file_mode を使用して、必要に応じてカスタム アクセス許可を設定することもできます。You can also use dir_mode and file_mode to set custom permissions as desired. アクセス許可を設定する方法の詳細については、Wikipedia の「UNIX numeric notation」 (UNIX の数値表記) を参照してください。For more information on how to set permissions, see UNIX numeric notation on Wikipedia.

    httpEndpoint=$(az storage account show \
        --resource-group $resourceGroupName \
        --name $storageAccountName \
        --query "primaryEndpoints.file" | tr -d '"')
    smbPath=$(echo $httpEndpoint | cut -c7-$(expr length $httpEndpoint))$fileShareName
    
    if [ -z "$(grep $smbPath\ $mntPath /etc/fstab)" ]; then
        echo "$smbPath $mntPath cifs nofail,vers=3.0,credentials=$smbCredentialFile,serverino" | 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
    

    注意

    上記の mount コマンドは、SMB 3.0 でマウントされます。The above mount command mounts with SMB 3.0. Linux ディストリビューションで暗号化を使用した SMB 3.0 をサポートしていない場合、または SMB 2.1 のみをサポートしている場合は、ストレージ アカウントと同じリージョン内の Azure VM からのみマウントできます。If your Linux distribution does not support SMB 3.0 with encryption or if it only supports SMB 2.1, you may only mount from an Azure VM within the same region as the storage account. 暗号化を使用した SMB 3.0 をサポートしていない Linux ディストリビューションで Azure ファイル共有をマウントするには、ストレージ アカウントの転送中の暗号化を無効にする必要があります。To mount your Azure file share on a Linux distribution that does not support SMB 3.0 with encryption, you will need to disable encryption in transit for the storage account.

autofs を使用した Azure ファイル共有の自動マウントUsing autofs to automatically mount the Azure file share(s)

  1. autofs パッケージがインストールされていることを確認します。Ensure the autofs package is installed.

    autofs パッケージは、任意の Linux ディストリビューションのパッケージ マネージャーを使用してインストールできます。The autofs package can be installed using the package manager on the Linux distribution of your choice.

    UbuntuDebian ベースのディストリビューションでは、apt パッケージ マネージャーを使用します。On Ubuntu and Debian-based distributions, use the apt package manager:

    sudo apt update
    sudo apt install autofs
    

    FedoraRed Hat Enterprise Linux 8+ 、および CentOS 8+ では、dnf パッケージ マネージャーを使用します。On Fedora, Red Hat Enterprise Linux 8+, and CentOS 8 +, use the dnf package manager:

    sudo dnf install autofs
    

    以前のバージョンの Red Hat Enterprise LinuxCentOS では、yum パッケージ マネージャーを使用します。On older versions of Red Hat Enterprise Linux and CentOS, use the yum package manager:

    sudo yum install autofs 
    

    openSUSE では、zypper パッケージ マネージャーを使用します。On openSUSE, use the zypper package manager:

    sudo zypper install autofs
    
  2. 共有のマウント ポイントを作成します。Create a mount point for the share(s):

     sudo mkdir /fileshares
    
  3. 新しいカスタム autofs 構成ファイルを作成します。Crete a new custom autofs configuration file

    sudo vi /etc/auto.fileshares
    
  4. /etc/auto.fileshares に次のエントリを追加します。Add the following entries to /etc/auto.fileshares

    echo "$fileShareName -fstype=cifs,credentials=$smbCredentialFile :$smbPath"" > /etc/auto.fileshares
    
  5. /etc/auto.master に次のエントリを追加します。Add the following entry to /etc/auto.master

    /fileshares /etc/auto.fileshares --timeout=60
    
  6. autofs を再起動します。Restart autofs

    sudo systemctl restart autofs
    
  7. 共有のために指定されたフォルダーにアクセスします。Access the folder designated for the share

    cd /fileshares/$filesharename
    

Linux のセキュリティ保護Securing Linux

Linux で Azure ファイル共有をマウントするには、ポート 445 がアクセス可能な状態になっている必要があります。In order to mount an Azure file share on Linux, port 445 must be accessible. ポート 445 は、SMB 1 に固有のセキュリティ リスクから、多くの組織でブロックされています。Many organizations block port 445 because of the security risks inherent with SMB 1. SMB 1 は、数多くの Linux ディストリビューションに備わっているレガシ ファイル システム プロトコルで、CIFS (Common Internet File System) と呼ばれることもあります。SMB 1, also known as CIFS (Common Internet File System), is a legacy file system protocol included with many Linux distributions. SMB 1 は、旧式で効率が悪く、また何よりもセキュリティに不安があるプロトコルです。SMB 1 is an outdated, inefficient, and most importantly insecure protocol. さいわいなことに、Azure Files は SMB 1 をサポートしておらず、Linux カーネル バージョン 4.18 以降では、Linux で SMB 1 を無効にすることができます。The good news is that Azure Files does not support SMB 1, and starting with Linux kernel version 4.18, Linux makes it possible to disable SMB 1. 運用環境で SMB ファイル共有を使用する前に、Linux クライアント上で SMB 1 を無効にすることを常に強くお勧めしますWe always strongly recommend disabling the SMB 1 on your Linux clients before using SMB file shares in production.

Linux カーネル 4.18 以降、レガシへの対応のために cifs と呼ばれる SMB カーネル モジュールは、disable_legacy_dialects と呼ばれる新しいモジュール パラメーター (多くの場合、各種の外部ドキュメントでは parm と呼ばれます) を公開しています。Starting with Linux kernel 4.18, the SMB kernel module, called cifs for legacy reasons, exposes a new module parameter (often referred to as parm by various external documentations), called disable_legacy_dialects. Linux カーネル 4.18 で導入されましたが、一部のベンダーでは、サポート対象の旧カーネルにこの変更を移植しています。Although introduced in Linux kernel 4.18, some vendors have backported this change to older kernels that they support. 便宜のため、次の表では、よく知られた Linux ディストリビューションでこのモジュール パラメーターを使用できるかどうかについて詳しく示しています。For convenience, the following table details the availability of this module parameter on common Linux distributions.

DistributionDistribution SMB 1 を無効にできるCan disable SMB 1
Ubuntu 14.04-16.04Ubuntu 14.04-16.04 いいえNo
Ubuntu 18.04Ubuntu 18.04 はいYes
Ubuntu 19.04+Ubuntu 19.04+ はいYes
Debian 8-9Debian 8-9 いいえNo
Debian 10+Debian 10+ はいYes
Fedora 29+Fedora 29+ はいYes
CentOS 7CentOS 7 いいえNo
CentOS 8+CentOS 8+ はいYes
Red Hat Enterprise Linux 6.x-7.xRed Hat Enterprise Linux 6.x-7.x いいえNo
Red Hat Enterprise Linux 8+Red Hat Enterprise Linux 8+ はいYes
openSUSE Leap 15.0openSUSE Leap 15.0 いいえNo
openSUSE Leap 15.1+openSUSE Leap 15.1+ はいYes
openSUSE TumbleweedopenSUSE Tumbleweed はいYes
SUSE Linux Enterprise 11.x-12.xSUSE Linux Enterprise 11.x-12.x いいえNo
SUSE Linux Enterprise 15SUSE Linux Enterprise 15 いいえNo
SUSE Linux Enterprise 15.1SUSE Linux Enterprise 15.1 いいえNo

次のコマンドを使用して、Linux ディストリビューションで disable_legacy_dialects モジュール パラメーターがサポートされているかどうかを確認できます。You can check to see if your Linux distribution supports the disable_legacy_dialects module parameter via the following command.

sudo modinfo -p cifs | grep disable_legacy_dialects

このコマンドを実行すると、次のメッセージが出力されます。This command should output the following message:

disable_legacy_dialects: To improve security it may be helpful to restrict the ability to override the default dialects (SMB2.1, SMB3 and SMB3.02) on mount with old dialects (CIFS/SMB1 and SMB2) since vers=1.0 (CIFS/SMB1) and vers=2.0 are weaker and less secure. Default: n/N/0 (bool)

SMB 1 を無効にする前に、SMB モジュールがご利用のシステムに現在読み込まれていないことを確認する必要があります (これは、SMB 共有をマウントしている場合に自動的に発生します)。Before disabling SMB 1, you must check to make sure that the SMB module is not currently loaded on your system (this happens automatically if you have mounted an SMB share). これを行うには、次のコマンドを使用します。SMB が読み込まれていない場合は、何も出力されません。You can do this with the following command, which should output nothing if SMB is not loaded:

lsmod | grep cifs

モジュールをアンロードするには、最初にすべての SMB 共有のマウントを解除します (前述のように、umount コマンドを使用します)。To unload the module, first unmount all SMB shares (using the umount command as described above). 次のコマンドを使用して、システム上にマウントされているすべての SMB 共有を特定できます。You can identify all the mounted SMB shares on your system with the following command:

mount | grep cifs

すべての SMB ファイル共有のマウントを解除したら、モジュールをアンロードしても安全です。Once you have unmounted all SMB file shares, it's safe to unload the module. そのためには、 modprobe コマンドを使用します。You can do this with the modprobe command:

sudo modprobe -r cifs

modprobe コマンドを使用して、SMB 1 をアンロードしてモジュールを手動で読み込むことができます。You can manually load the module with SMB 1 unloaded using the modprobe command:

sudo modprobe cifs disable_legacy_dialects=Y

最後に、/sys/module/cifs/parameters の読み込み済みパラメーターを参照すると、パラメーターを使用して SMB モジュールが読み込まれていることを確認できます。Finally, you can check the SMB module has been loaded with the parameter by looking at the loaded parameters in /sys/module/cifs/parameters:

cat /sys/module/cifs/parameters/disable_legacy_dialects

Ubuntu および Debian ベースのディストリビューションで SMB 1 を永続的に無効にするには、設定を使用して /etc/modprobe.d/local.conf という新しいファイルを作成する必要があります (他のモジュールのカスタム オプションがまだない場合)。To persistently disable SMB 1 on Ubuntu and Debian-based distributions, you must create a new file (if you don't already have custom options for other modules) called /etc/modprobe.d/local.conf with the setting. これを行うには、次のコマンドを使います。You can do this with the following command:

echo "options cifs disable_legacy_dialects=Y" | sudo tee -a /etc/modprobe.d/local.conf > /dev/null

SMB モジュールを読み込むと、これが動作していることを確認できます。You can verify that this has worked by loading the SMB module:

sudo modprobe cifs
cat /sys/module/cifs/parameters/disable_legacy_dialects

次のステップNext steps

Azure Files の詳細については、次のリンクをご覧ください。See these links for more information about Azure Files: