背景
WindowsやNASの共有ドライブをLinuxからmountするために使う/usr/sbin/mount.cifs
にどういうオプションを与えると自分が設定している環境でベターなのかよくわからない。その理由は
- NASなどで対応しているCIFSプロトコルバージョンが異なる
- Linux側で対応しているプロトコルバージョンやデフォルトで使われるバージョンが異なる。Linux カーネル 4.12まではプロトコル1.0で接続しようとしているがそれ以降は違うなど
mount
コマンドの -o
オプションに与えるオプションの決め方について良いと思われるものを以下で書く。/etc/fstab
に与えるオプションにも当てはまる。Linuxカーネルのプロトコル対応状況はここに詳しい
プロトコルバージョンの決め方
古いプロトコルバージョンは安全性に問題がある上に遅いので、なるべく新しいプロトコルバージョンで接続することが望ましい。したがって mount.cifs
が理解するバージョンを大きい順にmount.cifs -o vers=番号
という形式で試して一番高いバージョンを用いる。
- 3.1.1
- このプロトコルバージョンはLinux 4.17以降でしか対応していない
- 3.02
- 3.0
- 3.0以上のプロトコルバージョンとLinuxカーネルバージョン4.4以上ならより信頼性が高い`persistenthandles` (`mount.cifs` のオプション)に対応している。またより高速なアクセスが出来るSMB Direct (RDMA)にプロトコルが対応しているから`rdma`を`mount.cifs`に与えて動作するか試してみる。
- 2.1
- このバージョンを使える場合および前述の`persistenthandles`が使えない場合、信頼性を高めるため `resilienthandles` を`mount.cifs` に与えてみる。
- 2.0
- プロトコルバージョン2.0以上で動かないと遅い
- 1.0
- プロトコルバージョン1.0しか使えないならこれを使うしかない
その他のCIFSオプション
- guest
- パスワードを聞かれなくなる(ゲストログインする)
- credentials=ファイル名
- 起動時に自動マウントする場合などにコマンドオプションにパスワードを書くことも対話的にパスワードを与えることも出来ないので「ファイル名」にmanページに指定された形式でパスワードなどを書いておく
- iocharset=utf8
- 手元のLinuxの漢字ファイルネームを保存している漢字コードを指定する
- sfu,mfsymlinks
- シンボリックリンクの扱いがよくなる
- cifsacl,idsfromsid
- これらのオプションを指定すると動作がよりunixっぽくなる
NFSなどとも共通のmountオプション
- hardまたはsoft
- hardなら操作がタイムアウトしたときに成功するまで再試行するのでアプリケーションがハングアップすることがあるが、softならエラーをアプリケーションプログラムに返す
- intrまたはnointr
- intrだとシグナルによるシステムコールの中断を認めるがnointrなら認めない
- noexec, nosuid, nodev
- リモートファイルシステム上のファイルの実行を認めるか、SUIDビットを認識するか、デバイス特殊ファイルを元認めるかのオプション。よくわからなければセキュリティ上は全部指定しておくほうがよい
/etc/fstab
にだけ指定するオプション(CIFS以外と共通)と注意事項
- x-systemd.automount
- そのディレクトリをアクセスしたときにsystemdが自動的にマウントしてくれる
- x-systemd.idle-timeout=10m
- そのディレクトリを10分間アクセスしなかったときにsystemdが自動的にアンマウントしてくれる
- _netdev
- 起動時にネットワークの設定が終わったあとにマウントされるべきことを示すオプション。CIFSやNFSなどに必ず指定するべき
- user
- これをfstabに書いておけば一般ユーザーがマウント出来る
- noauto
- 起動時にはマウントしない
- nofail
- systemdが理解するオプションでマウント失敗しても起動を続ける
- x-systemd.mount-timeout=何秒
- 起動時のmountコマンド終了まで待つ秒数