autofs を使うと特定のディレクトリ以下にアクセスしたときに NFS や CD-ROM を自動マウントすることができます。
更に mount.cifs と組み合わせれば Windows の共有フォルダも自動マウントできます。
Ubuntu の autofs パッケージには auto.smb(シェル スクリプト) が含まれているので
これを利用すればいいのですが、この auto.smb は認証なしの共有フォルダにしか対応していません。
通常、共有フォルダはユーザー名/パスワードによるアクセス制限の設定をしますよね?
というわけで認証付きの共有フォルダをマウントできるように auto.smb を書き換えました。
以下にその手順を書きます。
パッケージのインストール
Windows 共有フォルダの自動マウントに必要なパッケージをインストールします。
apt install cifs-utils smbclient autofs
auto.master
auto.master にエントリを追加します。ここでは Windows 共有フォルダのマウントポイントを /smb にしました。
/smb /etc/auto.smb
認証ファイル
共有フォルダへのアクセスに必要なユーザー名, パスワード, ドメイン名をファイルに保存します。
パスは /etc/auto.credentials/<Windowsホスト名> にしました。
ディレクトリ名は何でも構いませんが、ファイル名は Windows ホスト名と一致させます。
注意点として "=" の前後にスペースを入れてはいけません。smbclient は問題ないのですが
mount.cifs がファイルの内容を解釈できなくなります。
また、このファイルには認証情報が含まれているので root 以外は読み書き不可にしましょう。
username=ユーザー名
password=パスワード
domain=ドメイン名
認証ファイルを使って Windows ホストにアクセスできることを確認します。
smbclient -L winsvr -A /etc/auto.credentials/winsvr
auto.smb
Windows ホスト名に対応する認証ファイルがあれば mount.cifs と smbclient にオプションを
追加するように /etc/auto.smb を書き換えます。
auto.smb の $1 には Windows のホスト名が渡されます。たとえば /smb/winsvr/path/to/file に
アクセスしたときは winsvr がセットされます。
opts には mount.cifs のオプションを設定します。マウントしたディレクトリおよびファイルの
アセクス権を設定したいときは uid, gid, file_mode, dir_mode などを opts に追加します。
mount.cifs のオプションの詳細は man mount.cifs を参照して下さい。
#!/bin/bash
# This file must be executable to work! chmod 755!
key="$1"
opts="-fstype=cifs,rw,iocharset=utf8"
credfile=/etc/auto.credentials/$key
smbopts=
if [ -f $credfile ]; then
opts="$opts,credentials=$credfile"
smbopts="$smbopts -A $credfile"
fi
for P in /bin /sbin /usr/bin /usr/sbin
do
if [ -x $P/smbclient ]
then
SMBCLIENT=$P/smbclient
break
fi
done
[ -x $SMBCLIENT ] || exit 1
$SMBCLIENT -gL $key $smbopts 2>/dev/null| awk -v key="$key" -v opts="$opts" -F'|' -- '
BEGIN { ORS=""; first=1 }
/Disk/ {
if (first)
print opts; first=0
dir = $2
loc = $2
# Enclose mount dir and location in quotes
# Double quote "$" in location as it is special
gsub(/\$$/, "\\$", loc);
gsub(/\&/,"\\\\&",loc)
print " \\\n\t \"/" dir "\"", "\"://" key "/" loc "\""
}
END { if (!first) print "\n"; else exit 1 }
'
auto.smb の動作を確認します。
Windows ホスト名を引数に指定して実行すると mount.cifs のオプションと共有フォルダが表示されることを確認します。
# /etc/auto.smb winsvr
-fstype=cifs,ro,iocharset=utf8,credentials=/etc/auto.credentials/winsvr \
"/share" "://winsvr/share" \
"/C$" "://winsvr/C\$" \
...
設定反映
autofs を再起動します。
# service autofs restart
/smb/<Windowsホスト名>/<共有フォルダ名> 以下にアクセスして Windows 共有フォルダが自動マウントされることを確認します。
$ ls -la /smb/winsvr/share
参考
- [Ubuntu Tips: Fix auto.smb for automount Windows shares. - Nikep's blog]
(http://www.nikep.net/srdpty/index.php?/archives/87-Ubuntu-Tips-Fix-auto.smb-for-automount-Windows-shares..html)