Amazon Linux 2023からSMBファイルサーバーへSMBでアクセスする

Amazon Linux 2023からSMBファイルサーバーへSMBでアクセスする

Linuxでも簡単にSMBファイルサーバーにSMBでマウントすることは可能
Clock Icon2025.02.26

LinuxからSMBファイルサーバーへアクセスしたい

こんにちは、のんピ(@non____97)です。

皆さんはLinuxからSMBファイルサーバーへアクセスしたいなと思ったことはありますか? 私はあります。

Linuxでネットワーク上のファイルサーバーをマウントする際に一般的に使用されるのはNFSです。

ただし、ファイルサーバーがSMBしか会話できないこともあるでしょう。

そんな時はLinuxがSMBも会話できるようになることで対応可能です。

実際の設定方法を以降紹介します。

検証環境

検証環境は以下のとおりです。

Amazon Linux 2023からSMBファイルサーバーへSMBでアクセスする検証環境構成図.png

SMBクライアントとしてAmazon Linux 2023を用意して、SMBでAmazon FSX for NetApp ONTAPのSMBサーバーへ接続します。

認証方式はKerberos認証ではなく、NTLM認証を使用します。

必要なパッケージのインストール

LinuxがSMBファイル共有をマウントするために必要なパッケージをインストールします。

インストールするパッケージはcifs-utilsです。よくsamba-clientもインストールしている情報を見ますが、単純にSMBでマウントするだけならsamba-clientは不要です。

$ rpm -qa | grep -e cifs -e smb

$ sudo dnf install cifs-utils
Last metadata expiration check: 0:02:54 ago on Tue Feb 25 08:42:59 2025.
Dependencies resolved.
================================================================================================
Package                  Architecture Version                      Repository        Size
================================================================================================
Installing:
cifs-utils              x86_64      6.15-1.amzn2023.0.2         amazonlinux      95 k

Installing dependencies:
avahi-libs              x86_64      0.8-14.amzn2023.0.12        amazonlinux      68 k
libicu                  x86_64      67.1-7.amzn2023.0.3         amazonlinux      9.6 M
libwbclient             x86_64      2:4.17.12-1.amzn2023.0.1    amazonlinux      47 k
samba-client-libs       x86_64      2:4.17.12-1.amzn2023.0.1    amazonlinux      5.0 M
samba-common            noarch      2:4.17.12-1.amzn2023.0.1    amazonlinux      153 k
samba-common-libs       x86_64      2:4.17.12-1.amzn2023.0.1    amazonlinux      106 k

Installing weak dependencies:
cifs-utils-info         x86_64      6.15-1.amzn2023.0.2         amazonlinux      20 k

Transaction Summary
================================================================================================
Install  8 Packages

Total download size: 15 M
Installed size: 53 M
Is this ok [y/N]: y
Downloading Packages:
(1/8): avahi-libs-0.8-14.amzn2023.0.12.x86_64.rpm                    1.1 MB/s |  68 kB     00:00
(2/8): cifs-utils-info-6.15-1.amzn2023.0.2.x86_64.rpm                297 kB/s |  20 kB     00:00
(3/8): cifs-utils-6.15-1.amzn2023.0.2.x86_64.rpm                     1.3 MB/s |  95 kB     00:00
(4/8): libwbclient-4.17.12-1.amzn2023.0.1.x86_64.rpm                 2.5 MB/s |  47 kB     00:00
(5/8): samba-common-4.17.12-1.amzn2023.0.1.noarch.rpm                5.1 MB/s | 153 kB     00:00
(6/8): samba-client-libs-4.17.12-1.amzn2023.0.1.x86_64.rpm            60 MB/s | 5.0 MB     00:00
(7/8): samba-common-libs-4.17.12-1.amzn2023.0.1.x86_64.rpm           2.7 MB/s | 106 kB     00:00
(8/8): libicu-67.1-7.amzn2023.0.3.x86_64.rpm                          63 MB/s | 9.6 MB     00:00
-----------------------------------------------------------------------------------------------------
Total                                                                 53 MB/s |  15 MB     00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
.
.
(中略)
.
.
Installed:
  avahi-libs-0.8-14.amzn2023.0.12.x86_64             cifs-utils-6.15-1.amzn2023.0.2.x86_64         cifs-utils-info-6.15-1.amzn2023.0.2.x86_64         libicu-67.1-7.amzn2023.0.3.x86_64  libwbclient-2:4.17.12-1.amzn2023.0.1.x86_64
  samba-client-libs-2:4.17.12-1.amzn2023.0.1.x86_64  samba-common-2:4.17.12-1.amzn2023.0.1.noarch  samba-common-libs-2:4.17.12-1.amzn2023.0.1.x86_64

Complete!

cifssmbsambaを含むパッケージのインストールがされていることを確認します。

$ rpm -qa | grep -e cifs -e smb -e samba
samba-common-4.17.12-1.amzn2023.0.1.noarch
samba-common-libs-4.17.12-1.amzn2023.0.1.x86_64
samba-client-libs-4.17.12-1.amzn2023.0.1.x86_64
cifs-utils-info-6.15-1.amzn2023.0.2.x86_64
cifs-utils-6.15-1.amzn2023.0.2.x86_64

SMB 3.0でマウント

SMB 3.0でマウントします。

$ sudo mkdir -p /mnt/fsxn/smb

$ sudo mount \
  '//SMB-SERVER.corp.non-97.net/previous-version-test-share' \
  /mnt/fsxn/smb \
  -t cifs \
  -o username=test-user01,domain=corp.non-97.net,vers=3.0,rw,file_mode=0777,dir_mode=0777
mount error: could not resolve address for SMB-SERVER.corp.non-97.net: Unknown error

はい、接続先のSMBサーバーが名前解決できないようです。

参照するDNSサーバーとしてSMBサーバーがドメイン参加しているAD DCのIPアドレスを指定してあげます。

Amazon Linux 2023で option setsで設定したDNSサーバー以外のDNSサーバーを指定する方法は以下記事で紹介しています。

https://dev.classmethod.jp/articles/amazon-linux-2023-static-dns/

こちらの記事で紹介しているように設定してあげます。

$ sudo vi /etc/systemd/resolved.conf

$ sudo systemctl restart systemd-resolved.service

$ tail /etc/resolv.conf
# Third party programs should typically not access this file directly, but only
# through the symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a
# different way, replace this symlink by a static file or a different symlink.
#
# See man:systemd-resolved.service(8) for details about the supported modes of
# operation for /etc/resolv.conf.

nameserver 10.0.0.139
nameserver 10.0.0.2
search corp.non-97.net ec2.internal

$ dig SMB-SERVER.corp.non-97.net +short
10.0.8.246

名前解決できるようになりました。

SMBでマウントします。

$ sudo mount \
  '//SMB-SERVER.corp.non-97.net/previous-version-test-share' \
  /mnt/fsxn/smb \
  -t cifs \
  -o username=test-user01,domain=corp.non-97.net,vers=3.0,rw,file_mode=0777,dir_mode=0777
Password for test-user01@//SMB-SERVER.corp.non-97.net/previous-version-test-share:

$ mount | grep cifs
//SMB-SERVER.corp.non-97.net/previous-version-test-share on /mnt/fsxn/smb type cifs (rw,relatime,vers=3.0,cache=strict,username=test-user01,domain=corp.non-97.net,uid=0,noforceuid,gid=0,noforcegid,addr=10.0.8.246,file_mode=0777,dir_mode=0777,soft,nounix,serverino,mapposix,rsize=1048576,wsize=1048576,bsize=1048576,echo_interval=60,actimeo=1,closetimeo=1)

はい、マウントできました。

マウントポイントの参照も問題なくできます。

$ ls -l /mnt/fsxn/smb
total 282896
-rwxrwxrwx. 1 root root   262144 Feb 11 09:01  ASCII_256KiB.txt
-rwxrwxrwx. 1 root root   262144 Feb 11 09:01  ASCII_256KiB_copy.txt
-rwxrwxrwx. 1 root root   524288 Feb 20 04:38 'ASCII_512KiB - Copy (2).txt'
-rwxrwxrwx. 1 root root   524288 Feb 20 04:48 'ASCII_512KiB - Copy (3).txt'
-rwxrwxrwx. 1 root root   524288 Feb 20 03:44 'ASCII_512KiB - Copy.txt'
-rwxrwxrwx. 1 root root   524288 Feb 20 03:44  ASCII_512KiB.txt
-rwxrwxrwx. 1 root root   524288 Feb 20 03:44  ASCII_512KiB_copy.txt
-rwxrwxrwx. 1 root root   524288 Feb 20 03:44  ASCII_512KiB_copy2.txt
-rwxrwxrwx. 1 root root 67108864 Feb 20 05:25 'ASCII_64MiB - Copy (2).txt'
-rwxrwxrwx. 1 root root 67108864 Feb 20 05:20 'ASCII_64MiB - Copy.txt'
-rwxrwxrwx. 1 root root 67108864 Feb 11 08:39  ASCII_64MiB.txt
-rwxrwxrwx. 1 root root 67108864 Feb 11 08:39  ASCII_64MiB_copy.txt
-rwxrwxrwx. 1 root root  4194304 Feb 11 07:05  ASCI_4MiB.txt
-rwxrwxrwx. 1 root root 13134832 Jun 10  2024  AWS-Architecture-Icons-Deck_For-Light-BG_06072024.pptx
drwxrwxrwx. 2 root root        0 Feb 20 04:36 'New folder'
-rwxrwxrwx. 1 root root    65536 Feb 11 13:07  fio_randwrite_4KiB_block_64KiB_4jobs.0.0
-rwxrwxrwx. 1 root root    65536 Feb 11 13:07  fio_randwrite_4KiB_block_64KiB_4jobs.1.0
-rwxrwxrwx. 1 root root    61440 Feb 11 13:07  fio_randwrite_4KiB_block_64KiB_4jobs.2.0
-rwxrwxrwx. 1 root root    57344 Feb 11 13:07  fio_randwrite_4KiB_block_64KiB_4jobs.3.0

$ head /mnt/fsxn/smb/ASCII_256KiB.txt
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

SMB 3.1.1でマウント

SMB 3.1.1でマウントします。

$ sudo umount /mnt/fsxn/smb

$ sudo mount \
  '//SMB-SERVER.corp.non-97.net/previous-version-test-share' \
  /mnt/fsxn/smb \
  -t cifs \
  -o username=test-user01,domain=corp.non-97.net,rw,file_mode=0777,dir_mode=0777
Password for test-user01@//SMB-SERVER.corp.non-97.net/previous-version-test-share:

$ mount | grep cifs
//SMB-SERVER.corp.non-97.net/previous-version-test-share on /mnt/fsxn/smb type cifs (rw,relatime,vers=3.1.1,cache=strict,username=test-user01,domain=corp.non-97.net,uid=0,noforceuid,gid=0,noforcegid,addr=10.0.8.246,file_mode=0777,dir_mode=0777,soft,nounix,serverino,mapposix,rsize=1048576,wsize=1048576,bsize=1048576,echo_interval=60,actimeo=1,closetimeo=1)

マウントオプションで明示的に指定しなければ、SMB 3.1.1でマウントされるようです。

SMBのセッションをONTAP CLIで確認します。

::> cifs session show -fields auth-mechanism, connected-time, protocol-version, smb-encryption-status
node                      vserver session-id           connection-id auth-mechanism connected-time protocol-version smb-encryption-status
------------------------- ------- -------------------- ------------- -------------- -------------- ---------------- ---------------------
FsxId0e64a4f5386f74c87-01 svm     12524229088740638755 338489517     NTLMv2         1m 47s         SMB3_1           unencrypted

確かにSMB 3.1系でマウントしていることが分かります。

SMB暗号化の強制化ありでマウント

SMB暗号化の強制化ありでマウントしてみます。

SMBサーバーで暗号化を強制化します。

::> cifs security modify -vserver svm -is-smb-encryption-required true

再度セッションを貼り直すためにアンマウントしてから再度マウントします。

$ sudo umount /mnt/fsxn/smb

$ sudo mount \
  '//SMB-SERVER.corp.non-97.net/previous-version-test-share' \
  /mnt/fsxn/smb \
  -t cifs \
  -o username=test-user01,domain=corp.non-97.net,rw,file_mode=0777,dir_mode=0777 \
  -v
Password for test-user01@//SMB-SERVER.corp.non-97.net/previous-version-test-share:
mount.cifs kernel mount options: ip=10.0.8.246,unc=\\SMB-SERVER.corp.non-97.net\previous-version-test-share,file_mode=0777,dir_mode=0777,user=test-user01,domain=corp.non-97.net,pass=********

$ mount | grep cifs
//SMB-SERVER.corp.non-97.net/previous-version-test-share on /mnt/fsxn/smb type cifs (rw,relatime,vers=3.1.1,cache=strict,username=test-user01,domain=corp.non-97.net,uid=0,noforceuid,gid=0,noforcegid,addr=10.0.8.246,file_mode=0777,dir_mode=0777,soft,nounix,serverino,mapposix,rsize=1048576,wsize=1048576,bsize=1048576,echo_interval=60,actimeo=1,closetimeo=1)

はい、正常にマウントできました。

ONTAP CLIでセッションを確認します。

::> cifs session show -fields auth-mechanism, connected-time, protocol-version, smb-encryption-status
node                      vserver session-id           connection-id auth-mechanism connected-time protocol-version smb-encryption-status
------------------------- ------- -------------------- ------------- -------------- -------------- ---------------- ---------------------
FsxId0e64a4f5386f74c87-01 svm     12524229088740638756 338489518     NTLMv2         1m 27s         SMB3_1           encrypted

encryptedと暗号化されていることが分かりますね。

もちろん、この状態でもマウントポイント配下のファイルの読み書きは可能です。

$ ls -l /mnt/fsxn/smb
total 282896
-rwxrwxrwx. 1 root root   262144 Feb 11 09:01  ASCII_256KiB.txt
-rwxrwxrwx. 1 root root   262144 Feb 11 09:01  ASCII_256KiB_copy.txt
-rwxrwxrwx. 1 root root   524288 Feb 20 04:38 'ASCII_512KiB - Copy (2).txt'
-rwxrwxrwx. 1 root root   524288 Feb 20 04:48 'ASCII_512KiB - Copy (3).txt'
-rwxrwxrwx. 1 root root   524288 Feb 20 03:44 'ASCII_512KiB - Copy.txt'
-rwxrwxrwx. 1 root root   524288 Feb 20 03:44  ASCII_512KiB.txt
-rwxrwxrwx. 1 root root   524288 Feb 20 03:44  ASCII_512KiB_copy.txt
-rwxrwxrwx. 1 root root   524288 Feb 20 03:44  ASCII_512KiB_copy2.txt
-rwxrwxrwx. 1 root root 67108864 Feb 20 05:25 'ASCII_64MiB - Copy (2).txt'
-rwxrwxrwx. 1 root root 67108864 Feb 20 05:20 'ASCII_64MiB - Copy.txt'
-rwxrwxrwx. 1 root root 67108864 Feb 11 08:39  ASCII_64MiB.txt
-rwxrwxrwx. 1 root root 67108864 Feb 11 08:39  ASCII_64MiB_copy.txt
-rwxrwxrwx. 1 root root  4194304 Feb 11 07:05  ASCI_4MiB.txt
-rwxrwxrwx. 1 root root 13134832 Jun 10  2024  AWS-Architecture-Icons-Deck_For-Light-BG_06072024.pptx
drwxrwxrwx. 2 root root        0 Feb 20 04:36 'New folder'
-rwxrwxrwx. 1 root root    65536 Feb 11 13:07  fio_randwrite_4KiB_block_64KiB_4jobs.0.0
-rwxrwxrwx. 1 root root    65536 Feb 11 13:07  fio_randwrite_4KiB_block_64KiB_4jobs.1.0
-rwxrwxrwx. 1 root root    61440 Feb 11 13:07  fio_randwrite_4KiB_block_64KiB_4jobs.2.0
-rwxrwxrwx. 1 root root    57344 Feb 11 13:07  fio_randwrite_4KiB_block_64KiB_4jobs.3.0

$ head /mnt/fsxn/smb/ASCII_256KiB_copy.txt
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

$ echo test > /mnt/fsxn/smb/test.txt

$ ls -l /mnt/fsxn/smb/test.txt
-rwxrwxrwx. 1 root root 5 Feb 25 09:18 /mnt/fsxn/smb/test.txt

$ cat /mnt/fsxn/smb/test.txt
test

sambaclientによるSMBファイル共有一覧の確認

SMBファイル共有一覧を参照する場合sambaclientを使用したくなります。

正常に動作するか実際に試しましょう。

$ which smbclient
which: no smbclient in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin)


$ sudo dnf install samba-client
Last metadata expiration check: 0:38:28 ago on Tue Feb 25 08:42:59 2025.
Dependencies resolved.
================================================================================================
Package           Architecture Version                    Repository      Size
================================================================================================
Installing:
samba-client      x86_64      2:4.17.12-1.amzn2023.0.1  amazonlinux    673 k

Installing dependencies:
libsmbclient      x86_64      2:4.17.12-1.amzn2023.0.1  amazonlinux    80 k

Transaction Summary
================================================================================================
Install  2 Packages

Total download size: 752 k
Installed size: 2.6 M
Is this ok [y/N]: y
Downloading Packages:
(1/2): libsmbclient-4.17.12-1.amzn2023.0.1.x86_64.rpm           1.0 MB/s |  80 kB     00:00
(2/2): samba-client-4.17.12-1.amzn2023.0.1.x86_64.rpm           6.8 MB/s | 673 kB     00:00
------------------------------------------------------------------------------------------------
Total                                                           4.5 MB/s | 752 kB     00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
.
.
(中略)
.
.
Installed:
  libsmbclient-2:4.17.12-1.amzn2023.0.1.x86_64     samba-client-2:4.17.12-1.amzn2023.0.1.x86_64

Complete!

$ which smbclient
/usr/bin/smbclient

smbclientが使用できるようになりましたね。

SMBファイル共有一覧を確認してみます。

$ smbclient -L //SMB-SERVER.corp.non-97.net -U test-user01@corp.non-97.net
Password for [test-user01@corp.non-97.net]:

 Sharename       Type      Comment
 ---------       ----      -------
 システム連携 Disk
 以前のバージョン Disk
 vol_test1       Disk
 vol_ntfs_dst    Disk
 share_qtree_dir Disk
 share_qtree     Disk
 share-test      Disk
 share           Disk
 previous-version-test-share Disk
 New folder      Disk
 ipc$            IPC
 FSxN日本語共有 Disk
 FSxN 日本語共有 Disk
 FSxN vol_ntfs   Disk
 c$              Disk
SMB1 disabled -- no workgroup available

はい、問題なく表示できました。

CIFSのカーネルモジュールのパラメーター確認

SMB1 disabledと表示されているのが気になったので、CIFSのカーネルモジュールのパラメーターを確認します。

$ ls -l /sys/module/cifs/
total 0
-r--r--r--. 1 root root 4096 Feb 25 09:30 coresize
drwxr-xr-x. 2 root root    0 Feb 25 09:30 holders
-r--r--r--. 1 root root 4096 Feb 25 09:30 initsize
-r--r--r--. 1 root root 4096 Feb 25 09:30 initstate
drwxr-xr-x. 2 root root    0 Feb 25 09:30 notes
drwxr-xr-x. 2 root root    0 Feb 25 09:29 parameters
-r--r--r--. 1 root root 4096 Feb 25 09:30 refcnt
drwxr-xr-x. 2 root root    0 Feb 25 09:30 sections
-r--r--r--. 1 root root 4096 Feb 25 09:30 srcversion
-r--r--r--. 1 root root 4096 Feb 25 09:30 taint
--w-------. 1 root root 4096 Feb 25 09:00 uevent
-r--r--r--. 1 root root 4096 Feb 25 09:30 version

$ ls -l /sys/module/cifs/parameters/
total 0
-r--r--r--. 1 root root 4096 Feb 25 09:29 CIFSMaxBufSize
-r--r--r--. 1 root root 4096 Feb 25 09:29 cifs_max_pending
-r--r--r--. 1 root root 4096 Feb 25 09:29 cifs_min_rcv
-r--r--r--. 1 root root 4096 Feb 25 09:29 cifs_min_small
-rw-r--r--. 1 root root 4096 Feb 25 09:29 disable_legacy_dialects
-rw-r--r--. 1 root root 4096 Feb 25 09:29 enable_gcm_256
-rw-r--r--. 1 root root 4096 Feb 25 09:29 enable_negotiate_signing
-rw-r--r--. 1 root root 4096 Feb 25 09:29 enable_oplocks
-rw-r--r--. 1 root root 4096 Feb 25 09:29 require_gcm_256
-rw-r--r--. 1 root root 4096 Feb 25 09:29 slow_rsp_threshold

/sys/module/cifs/parameters/配下に各種パラメーターが設定されているようです。

全ファイルを確認します。

$ for param in /sys/module/cifs/parameters/*; do
    echo -n "$(basename $param): "
    cat $param
done
CIFSMaxBufSize: 16384
cifs_max_pending: 32767
cifs_min_rcv: 4
cifs_min_small: 30
disable_legacy_dialects: N
enable_gcm_256: Y
enable_negotiate_signing: N
enable_oplocks: Y
require_gcm_256: N
slow_rsp_threshold: 1

各設定ごとに一つ設定値が指定されていることが分かります。

なお、modinfoからでも各種パラメーターを確認することは可能です。

$ modinfo cifs
filename:       /lib/modules/6.1.112-124.190.amzn2023.x86_64/kernel/fs/smb/client/cifs.ko
softdep:        gcm
softdep:        ccm
softdep:        aead2
softdep:        sha512
softdep:        sha256
softdep:        cmac
softdep:        aes
softdep:        nls
softdep:        md5
softdep:        hmac
softdep:        ecb
version:        2.40
description:    VFS to access SMB3 servers e.g. Samba, Macs, Azure and Windows (and also older servers complying with the SNIA CIFS Specification)
license:        GPL
author:         Steve French
alias:          smb3
alias:          fs-smb3
alias:          fs-cifs
srcversion:     8FB16B989D3F0408E2CC79A
depends:        cifs_md4,dns_resolver,cifs_arc4
retpoline:      Y
intree:         Y
name:           cifs
vermagic:       6.1.112-124.190.amzn2023.x86_64 SMP preempt mod_unload modversions
sig_id:         PKCS#7
signer:         Amazon Linux Kernel Signing Key
sig_key:        21:49:20:72:20:B0:6F:FB:9B:FB:64:2B:50:2D:BB:D7:24:B5:E4:F9
sig_hashalgo:   sha256
signature:      8B:96:E2:70:03:E3:F1:65:82:0D:7D:F2:08:10:66:8F:FB:38:89:1D:
  AA:2D:05:5B:09:94:A8:AB:39:19:50:D0:8B:36:7E:20:5B:12:15:1A:
  AF:2B:9B:96:D0:ED:6A:1B:72:DA:48:2A:A5:82:26:8A:6F:E2:B2:60:
  68:C2:A3:76:FF:B2:9F:BD:4E:AA:F8:85:0B:26:FB:4E:30:6A:83:50:
  AF:E6:CC:E1:69:5E:9A:77:C1:F8:E6:90:C0:F8:29:0C:F0:22:9C:C1:
  A9:1D:D3:D6:32:4B:95:D8:4B:B0:B5:06:2F:1D:BA:65:4B:45:93:05:
  E9:11:45:42:BD:1B:2A:00:A5:D1:71:84:A5:14:A7:29:00:A8:19:D8:
  17:E5:A7:B7:48:20:69:A5:6A:E7:7F:72:6A:9C:83:E4:AB:E7:BF:EA:
  9C:B1:60:D2:DF:18:67:61:82:18:B5:E1:1F:6D:4A:63:C7:1E:2B:79:
  FD:9E:DF:D1:44:63:70:F8:8B:E8:0B:30:23:49:65:B4:A7:11:B4:E9:
  CD:57:39:41:E7:E1:F2:D1:BE:B9:4F:91:24:8B:1B:6F:4A:D9:A0:3E:
  58:38:44:AE:3A:8A:71:39:F6:19:31:CC:11:3D:95:39:76:22:B8:E1:
  A3:E7:4F:6F:4C:87:73:87:B0:EC:72:7F:49:37:12:80:8A:B0:3E:24:
  95:BE:29:EC:68:95:D4:CC:7C:E4:33:A1:D0:34:64:C1:AE:5D:FC:D1:
  DA:F4:AA:E0:F3:9A:D2:10:01:3E:5B:C7:16:C8:9A:EF:3B:AA:C0:F1:
  DC:6A:45:4A:CE:CB:BD:C7:58:85:76:69:D4:F0:97:72:BC:D4:2D:45:
  71:A9:C1:E5:82:77:4F:98:B6:F6:F6:15:23:9D:71:B8:69:A5:22:26:
  85:31:25:02:F0:76:23:9D:2F:43:5A:BD:BF:1C:B4:E6:69:15:7A:C5:
  FF:1C:29:E8:91:C5:81:65:CC:60:B7:F2:D3:A3:FB:B7:DA:73:BD:DA:
  46:FE:69:F0:A0:07:34:F9:7D:CE:E5:B5:85:49:52:DE:BD:99:7C:3D:
  62:87:87:46:49:51:CC:65:B6:26:95:03:C9:AD:4B:E2:AC:29:7A:5C:
  D9:4E:D6:54:95:01:D0:4F:01:E8:04:43:03:57:67:19:7F:4F:DE:8E:
  9C:2C:AD:B5:9C:5F:16:3D:90:8F:B2:59:04:27:A0:5D:C9:11:F8:D5:
  BE:A4:A0:CA:1F:5B:27:93:30:CB:B0:93:87:92:64:EE:4A:55:91:46:
  D6:E2:AF:7A:6C:A5:9F:EA:59:69:F6:39:2C:D4:AB:D0:8A:C6:70:7A:
  8F:9C:76:F4:39:CD:69:2A:C5:32:12:01
parm:           CIFSMaxBufSize:Network buffer size (not including header) for CIFS requests. Default: 16384 Range: 8192 to 130048 (uint)
parm:           cifs_min_rcv:Network buffers in pool. Default: 4 Range: 1 to 64 (uint)
parm:           cifs_min_small:Small network buffers in pool. Default: 30 Range: 2 to 256 (uint)
parm:           cifs_max_pending:Simultaneous requests to server for CIFS/SMB1 dialect (N/A for SMB3) Default: 32767 Range: 2 to 32767. (uint)
parm:           slow_rsp_threshold:Amount of time (in seconds) to wait before logging that a response is delayed. Default: 1 (if set to 0 disables msg). (uint)
parm:           enable_oplocks:Enable or disable oplocks. Default: y/Y/1 (bool)
parm:           enable_gcm_256:Enable requesting strongest (256 bit) GCM encryption. Default: y/Y/0 (bool)
parm:           require_gcm_256:Require strongest (256 bit) GCM encryption. Default: n/N/0 (bool)
parm:           enable_negotiate_signing:Enable negotiating packet signing algorithm with server. Default: n/N/0 (bool)
parm:           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)

$ sudo modinfo -p cifs
CIFSMaxBufSize:Network buffer size (not including header) for CIFS requests. Default: 16384 Range: 8192 to 130048 (uint)
cifs_min_rcv:Network buffers in pool. Default: 4 Range: 1 to 64 (uint)
cifs_min_small:Small network buffers in pool. Default: 30 Range: 2 to 256 (uint)
cifs_max_pending:Simultaneous requests to server for CIFS/SMB1 dialect (N/A for SMB3) Default: 32767 Range: 2 to 32767. (uint)
slow_rsp_threshold:Amount of time (in seconds) to wait before logging that a response is delayed. Default: 1 (if set to 0 disables msg). (uint)
enable_oplocks:Enable or disable oplocks. Default: y/Y/1 (bool)
enable_gcm_256:Enable requesting strongest (256 bit) GCM encryption. Default: y/Y/0 (bool)
require_gcm_256:Require strongest (256 bit) GCM encryption. Default: n/N/0 (bool)
enable_negotiate_signing:Enable negotiating packet signing algorithm with server. Default: n/N/0 (bool)
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)

OS起動時の自動マウント

OS起動時に自動でマウントするように設定してみましょう。

以下Red Hat公式ドキュメントを見ながら設定します。

https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/7/html/storage_administration_guide/mounting_an_smb_share#authenticating_to_an_smb_share_using_a_credentials_file

まず、SMBアクセス時に発生するNTLM認証で使用するユーザー名やパスワード、ドメイン情報を記録したファイルを作成します。

$ sudo vi /root/smb.cred

$ ls -l /root/smb.cred
ls: cannot access '/root/smb.cred': Permission denied

$ sudo ls -l /root/smb.cred
-rw-r--r--. 1 root root 75 Feb 25 09:43 /root/smb.cred

$ sudo chmod 600 /root/smb.cred

$ sudo ls -l /root/smb.cred
-rw-------. 1 root root 75 Feb 25 09:43 /root/smb.cred

フォーマットは以下のとおりです。

username=user_name
password=password
domain=domain_name

/etc/fstabにSMBマウントの行を追加します。

$ sudo vi /etc/fstab

$ cat /etc/fstab
#
UUID=4852a7fc-c9bb-4adb-868c-1d581e504784     /           xfs    defaults,noatime  1   1
UUID=8521-A91D        /boot/efi       vfat    defaults,noatime,uid=0,gid=0,umask=0077,shortname=winnt,x-systemd.automount 0 2
//SMB-SERVER.corp.non-97.net/previous-version-test-share  /mnt/fsxn/smb  cifs  credentials=/root/smb.cred  0 0

一度アンマウントして、mount -aで再マウントします。

$ sudo umount /mnt/fsxn/smb

$ mount | grep cifs

$ sudo mount -a
$ mount | grep cifs
//SMB-SERVER.corp.non-97.net/previous-version-test-share on /mnt/fsxn/smb type cifs (rw,relatime,vers=3.1.1,cache=strict,username=test-user01,domain=corp.non-97.net,uid=0,noforceuid,gid=0,noforcegid,addr=10.0.8.246,file_mode=0755,dir_mode=0755,soft,nounix,serverino,mapposix,rsize=1048576,wsize=1048576,bsize=1048576,echo_interval=60,actimeo=1,closetimeo=1)

はい、マウントされてました。/etc/fstabが正常に動作していそうです。

実際にOSを再起動して、正常にマウントされるか確認します。

$ sudo systemctl reboot

Exiting session with sessionId: botocore-session-1740473076-unbp6l7q3vktxnb77behi32nsq.

# 再起動完了後

$ mount | grep cifs
//SMB-SERVER.corp.non-97.net/previous-version-test-share on /mnt/fsxn/smb type cifs (rw,relatime,vers=3.1.1,cache=strict,username=test-user01,domain=corp.non-97.net,uid=0,noforceuid,gid=0,noforcegid,addr=10.0.8.246,file_mode=0755,dir_mode=0755,soft,nounix,serverino,mapposix,rsize=1048576,wsize=1048576,bsize=1048576,echo_interval=60,actimeo=1,closetimeo=1)

$ df -hT -t cifs
Filesystem                                               Type  Size  Used Avail Use% Mounted on
//SMB-SERVER.corp.non-97.net/previous-version-test-share cifs   31G   69M   31G   1% /mnt/fsxn/smb

$ sudo journalctl -b -u remote-fs.target
Feb 25 09:47:51 localhost systemd[1]: Reached target remote-fs.target - Remote File Systems.
Feb 25 09:47:52 localhost systemd[1]: Stopped target remote-fs.target - Remote File Systems.
Feb 25 09:48:00 ip-10-0-0-182.ec2.internal systemd[1]: Reached target remote-fs.target - Remote File Systems.

$ sudo dmesg | grep -i cifs
[    9.581472] Key type cifs.spnego registered
[    9.581876] Key type cifs.idmap registered
[    9.583229] CIFS: No dialect specified on mount. Default has changed to a more secure dialect, SMB2.1 or later (e.g. SMB3.1.1), from CIFS (SMB1). To use the less secure SMB1 dialect to access old servers which do not support SMB3.1.1 (or even SMB3 or SMB2.1) specify vers=1.0 on mount.
[    9.585901] CIFS: Attempting to mount \\SMB-SERVER.corp.non-97.net\previous-version-test-share

$ ls -l /mnt/fsxn/smb | head
total 282897
-rwxr-xr-x. 1 root root   262144 Feb 11 09:01 ASCII_256KiB.txt
-rwxr-xr-x. 1 root root   262144 Feb 11 09:01 ASCII_256KiB_copy.txt
-rwxr-xr-x. 1 root root   524288 Feb 20 04:38 ASCII_512KiB - Copy (2).txt
-rwxr-xr-x. 1 root root   524288 Feb 20 04:48 ASCII_512KiB - Copy (3).txt
-rwxr-xr-x. 1 root root   524288 Feb 20 03:44 ASCII_512KiB - Copy.txt
-rwxr-xr-x. 1 root root   524288 Feb 20 03:44 ASCII_512KiB.txt
-rwxr-xr-x. 1 root root   524288 Feb 20 03:44 ASCII_512KiB_copy.txt
-rwxr-xr-x. 1 root root   524288 Feb 20 03:44 ASCII_512KiB_copy2.txt
-rwxr-xr-x. 1 root root 67108864 Feb 20 05:25 ASCII_64MiB - Copy (2).txt

はい、確かに起動時にSMBでマウントしているようですね。

オプションで_netdevを付与していなかったので、何かしらエラーが出るのかなと思ったのですが、特にエラーも出ていないです。

実際に運用で使用する場合は_netdevを付与しておくと安心でしょう。

実際に試します。

$ sudo vi /etc/fstab

$ cat /etc/fstab
#
UUID=4852a7fc-c9bb-4adb-868c-1d581e504784     /           xfs    defaults,noatime  1   1
UUID=8521-A91D        /boot/efi       vfat    defaults,noatime,uid=0,gid=0,umask=0077,shortname=winnt,x-systemd.automount 0 2
//SMB-SERVER.corp.non-97.net/previous-version-test-share  /mnt/fsxn/smb  cifs  credentials=/root/smb.cred,_netdev,vers=3.1.1,sec=ntlmsspi,seal  0 0

$ sudo systemctl reboot

man mount.cifsを眺めるとsecsealと認証や暗号化時のオプションもあったので明示的にしています。

       sec=arg
              Security mode. Allowed values are:

              • none - attempt to connection as a null user (no name)

              • krb5 - Use Kerberos version 5 authentication

              • krb5i - Use Kerberos authentication and forcibly enable packet signing

              • ntlm - Use NTLM password hashing

              • ntlmi - Use NTLM password hashing and force packet signing

              • ntlmv2 - Use NTLMv2 password hashing

              • ntlmv2i - Use NTLMv2 password hashing and force packet signing

              • ntlmssp - Use NTLMv2 password hashing encapsulated in Raw NTLMSSP message

              • ntlmsspi - Use NTLMv2 password hashing encapsulated in Raw NTLMSSP message, and force packet signing

              The default in mainline kernel versions prior to v3.8 was sec=ntlm. In v3.8, the default was changed to sec=ntlmssp.

              If the server requires signing during protocol negotiation, then it may be enabled automatically. Packet signing may also be enabled automatically if it's enabled in /proc/fs/cifs/SecurityFlags.

       seal   Request encryption at the SMB layer. The encryption algorithm used is AES-128-CCM. Requires SMB3 or above (see vers).

OS再起動後指定したマウントオプションで正常にマウントおよび、読み書きできることを確認します。

$ mount | grep cifs
//SMB-SERVER.corp.non-97.net/previous-version-test-share on /mnt/fsxn/smb type cifs (rw,relatime,vers=3.1.1,sec=ntlmsspi,cache=strict,username=test-user01,domain=corp.non-97.net,uid=0,noforceuid,gid=0,noforcegid,addr=10.0.8.246,file_mode=0755,dir_mode=0755,seal,soft,nounix,serverino,mapposix,rsize=1048576,wsize=1048576,bsize=1048576,echo_interval=60,actimeo=1,closetimeo=1,_netdev)

$ sudo journalctl -b -u remote-fs.target
Feb 26 07:05:48 localhost systemd[1]: Reached target remote-fs.target - Remote File Systems.
Feb 26 07:05:48 localhost systemd[1]: Stopped target remote-fs.target - Remote File Systems.
Feb 26 07:05:56 ip-10-0-0-182.ec2.internal systemd[1]: Reached target remote-fs.target - Remote File Systems.

$ sudo dmesg | grep -i cifs
[    9.029997] Key type cifs.spnego registered
[    9.030508] Key type cifs.idmap registered
[    9.032001] CIFS: Attempting to mount \\SMB-SERVER.corp.non-97.net\previous-version-test-share

$ ls -l /mnt/fsxn/smb | head
total 282897
-rwxr-xr-x. 1 root root   262144 Feb 11 09:01 ASCII_256KiB.txt
-rwxr-xr-x. 1 root root   262144 Feb 11 09:01 ASCII_256KiB_copy.txt
-rwxr-xr-x. 1 root root   524288 Feb 20 04:38 ASCII_512KiB - Copy (2).txt
-rwxr-xr-x. 1 root root   524288 Feb 20 04:48 ASCII_512KiB - Copy (3).txt
-rwxr-xr-x. 1 root root   524288 Feb 20 03:44 ASCII_512KiB - Copy.txt
-rwxr-xr-x. 1 root root   524288 Feb 20 03:44 ASCII_512KiB.txt
-rwxr-xr-x. 1 root root   524288 Feb 20 03:44 ASCII_512KiB_copy.txt
-rwxr-xr-x. 1 root root   524288 Feb 20 03:44 ASCII_512KiB_copy2.txt
-rwxr-xr-x. 1 root root 67108864 Feb 20 05:25 ASCII_64MiB - Copy (2).txt


$ echo test2 > /mnt/fsxn/smb/test2.txt
sh: /mnt/fsxn/smb/test2.txt: Permission denied

$ echo test2 | sudo tee -a /mnt/fsxn/smb/test2.txt >/dev/null

$ ls -l /mnt/fsxn/smb/test2.txt
-rwxr-xr-x. 1 root root 6 Feb 26 07:07 /mnt/fsxn/smb/test2.txt

$ cat /mnt/fsxn/smb/test2.txt
test2

はい、マウントおよび読み書きできることが分かりました。

この時のSMBのセッションは以下のとおりです。

::> cifs session show -instance

Vserver: svm

                            Node: FsxId0e64a4f5386f74c87-01
                      Session ID: 12524229088740638762
                   Connection ID: 338489525
    Incoming Data LIF IP Address: 10.0.8.246
          Workstation IP Address: 10.0.0.182
        Authentication Mechanism: NTLMv2
           User Authenticated as: domain-user
                    Windows User: CORP\test-user01
                       UNIX User: root
                     Open Shares: 2
                      Open Files: 0
                      Open Other: 0
                  Connected Time: 2m 13s
                       Idle Time: 29s
                Protocol Version: SMB3_1
          Continuously Available: No
               Is Session Signed: false
                    NetBIOS Name: -
           SMB Encryption Status: encrypted
               Large MTU Enabled: true
                Connection Count: 1
                   Active Shares: ipc$,
                                  previous-version-test-share

Linuxでも簡単にSMBファイルサーバーをSMBでマウントすることは可能

Amazon Linux 2023からSMBファイルサーバーへSMBでアクセスしてみました。

NTLM認証の場合、単純に接続するだけなら手順としてはそこまで難しくないと思います。もし、正常に接続できない場合は以下ドキュメントを見ると良いでしょう。

https://access.redhat.com/ja/solutions/1447443

なお、接続は簡単ですが、file_modedir_modersizemultiuserなど実際に本番運用するとなると、考慮が必要なオプションも多くあります。自身の環境に合わせて設定しましょう。

また、そもそもクライアントがNFSしか会話できない場合は以下記事で紹介しているようにネームマッピングすることで対応可能です。

https://dev.classmethod.jp/articles/configured-amazon-fsx-for-netapp-ontap-to-enable-multi-protocol-access-to-the-same-file/

この記事が誰かの助けになれば幸いです。

以上、クラウド事業本部 コンサルティング部の のんピ(@non____97)でした!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.