CIFS 経由で NAS に接続する

no extension

Ubuntu から自宅の簡易 NAS に接続することを考える。

相手の NAS には Samba サーバとして接続できることは分かっているので,こちらは対応するクライアント・ツールを用意すればいいわけだ。

というわけで今回は CIFS (Common Internet File System) クライアントを使って接続を試みる。

CIFS クライアントの導入

Ubuntu であれば APT (Advanced Package Tool) で導入できる。

$ sudo apt install cifs-utils smbclient

念のため動作確認しておこう。

$ mount.cifs -V
mount.cifs version: 6.11

バージョンは 6.11 か(2021-11-06 Ubuntu 21.10 にて)。

事前準備(2019-04-03 追記)

実際に作業に入る前にいくつか事前設定をしておく。

ホスト名の解決

IP アドレス指定のままでもいいのだが,もし LAN 内で NAS の名前解決が出来ないなら /etc/hosts ファイルで名前を定義しておくといいだろう。

10.0.0.100  nas01

Samba グループを作成する

共有ディレクトリをマウントできるグループを作成する。

$ sudo groupadd samba

さらに

$ sudo visudo

sudo 用の設定ファイルを開き以下の行を追加する。

%samba  ALL=(ALL) /bin/mount,/bin/umount,/sbin/mount.cifs,/sbin/umount.cifs

これで samba グループに追加したユーザは自身のホーム・ディレクトリ以下に NAS の共有ディレクトリをマウントできる。 さっそく追加しておこう。

$ sudo adduser username samba

これで準備完了。

一時的な接続

まずマウント先のディレクトリを作成する(ディレクトリの場所や名前は他と被らなければなんでもいい)。

$ mkdir ~/nas

この ~/nas ディレクトリに対して以下のコマンドを実行する。

sudo mount -t cifs //nas01/shared ~/nas -o username=sambauser,noexec,nosuid,nodev
[sudo] username のパスワード: 
Password for sambauser@//nas01/shared:  ********

これで ~/nas ディレクトリに対して共有ディレクトリ //nas01/shared を一時的にマウントできる。 マウント時に指定できる主なパラメータ(値がある場合は param=value 形式で指定)は以下の通り1

パラメータ名 既定値 内容
username root 接続先のユーザ名
password 接続先ユーザのパスワード。指定しない場合は接続時に訊いてくる
domain 接続先のドメイン名(必要な場合)
workgroup 接続先のワークグループ名(必要な場合)
credentials 接続情報が書かれたファイル(詳しくは後述する)
uid root 共有ディレクトリ・ファイルの(見かけの)オーナー名
gid root 共有ディレクトリ・ファイルの(見かけの)グループ名
file_mode 0755 共有ファイルの(見かけの)ファイルモード
dir_mode 0755 共有ディレクトリの(見かけの)ディレクトリモード
vers 3.0 SMB プロトコル・バージョン(1.0/2.0/3.0/3.1.1
sec ntlmssp セキュリティ・モード (none/krb5/krb5i/ntlm/ntlmi/ntlmv2/ntlmv2i/ntlmssp/ntlmsspi)
noexec 共有ディレクトリ上のファイルの実行をさせない
nosuid 共有ディレクトリ・ファイルの SUID ビットを認識しない
nodev 共有ディレクトリ上のデバイスファイルを作用させない
ro 読み込み専用でマウントする
rw 読み書き可でマウントする

コマンドラインでマウントする際は絶対に password オプションを付けないこと(履歴に残っちゃうからね)。 あるいは以下の内容の接続情報ファイル ~/.nascred を作って(ファイル名は適当)

username=sambauser
password=password_string
domain=domainname

ファイルモードを 0400 に設定して他ユーザから見られないようにし

$ sudo chamod 0400 ~/.nascred

credentials オプションで指定してマウントする。

sudo mount -t cifs //nas01/shared ~/nas -o credentials=~/.nascred,noexec,nosuid,nodev

他ユーザから見えなくてもパスワードを平文で保存するのはちょっと… という人は password の指定行を外してしまえばコマンド実行時にパスワードを訊いてくる。

マウントを解除するには

$ sudo umount ~/nas

で OK。

【2021-11-06 追記】 ドメインではなくワークグループを構成している NAS の場合は

username=sambauser
password=password_string
workgroup=WORKGROUP

などとワークグループ名を指定する。

/etc/fstab を使って起動時にマウントする

/etc/fstab ファイルに以下の行を追加することで起動時に共有ファイルをマウントできる。

# <file system> <mount point>      <type> <options>                                                 <dump> <pass>
//nas01/shared  /home/username/nas cifs   _netdev,credentials=/home/username/.nascred,noexec,nosuid 0      0

ちなみに _netdev はネットワークの設定が終わったあとにマウントするよう指示するオプションである(先頭のアンダーバーを忘れずに)。

起動時のマウントではないが以下の2つのオプションを追加する手もある。

パラメータ名 内容
noauto 起動時にはマウントを行わない
user 一般ユーザもマウントできる
# <file system> <mount point>      <type> <options>                                                     <dump> <pass>
//nas01/shared  /home/username/nas cifs   noauto,user,credentials=/home/username/.nascred,noexec,nosuid 0      0

これなら管理者モードでなくともログイン後に任意のタイミングで

$ mount ~/nas

という感じにコマンドラインを少し簡略化してマウントできる(umount も同様)。

よし。 これで次に進める。 次は GnuPG かな。

ブックマーク

参考図書

photo
【改訂新版】サーバ構築の実例がわかるSamba[実践]入門
髙橋基信 (著)
技術評論社 2016-03-04 (Release 2016-03-04)
Kindle版
B01CXL8NL6 (ASIN)

Samba4/Windows10 対応。昔に比べたら Samba もずいぶん変わったんだねぇ。

reviewed by Spiegel on 2019-03-31 (powered by PA-APIv5)


  1. オプションの詳細は man mount.cifs でマニュアルを参照するとよい。 ↩︎