CIFS 経由で NAS に接続する

no extension

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

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

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

CIFS クライアントの導入

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

$ sudo apt install cifs-utils
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
提案パッケージ:
  keyutils smbclient winbind
以下のパッケージが新たにインストールされます:
  cifs-utils
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
71.5 kB のアーカイブを取得する必要があります。
この操作後に追加で 231 kB のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com/ubuntu cosmic/main amd64 cifs-utils amd64 2:6.8-2 [71.5 kB]
71.5 kB を 1秒 で取得しました (104 kB/s)
以前に未選択のパッケージ cifs-utils を選択しています。
(データベースを読み込んでいます ... 現在 167532 個のファイルとディレクトリがインストールされています。)
.../cifs-utils_2%3a6.8-2_amd64.deb を展開する準備をしています ...
cifs-utils (2:6.8-2) を展開しています...
cifs-utils (2:6.8-2) を設定しています ...
update-alternatives: /etc/cifs-utils/idmap-plugin (idmap-plugin) を提供するために自動モードで /usr/lib/x86_64-linux-gnu/cifs-utils/idmapwb.so を使います
man-db (2.8.4-2) のトリガを処理しています ...

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

バージョンは 6.8 か。

事前準備(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 接続先のドメイン名またはワークグループ名(必要な場合のみ)
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。

/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)
eBooks Kindle版
ASIN: B01CXL8NL6

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

reviewed by Spiegel on 2019-03-31 (powered by amazon-item 0.2.1)


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