LoginSignup
13
17

More than 5 years have passed since last update.

Windows の認証付き共有フォルダを Ubuntu で自動マウント

Last updated at Posted at 2014-10-03

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 にしました。

/etc/auto.master
/smb    /etc/auto.smb

認証ファイル

共有フォルダへのアクセスに必要なユーザー名, パスワード, ドメイン名をファイルに保存します。
パスは /etc/auto.credentials/<Windowsホスト名> にしました。
ディレクトリ名は何でも構いませんが、ファイル名は Windows ホスト名と一致させます。

注意点として "=" の前後にスペースを入れてはいけません。smbclient は問題ないのですが
mount.cifs がファイルの内容を解釈できなくなります。
また、このファイルには認証情報が含まれているので root 以外は読み書き不可にしましょう。

/etc/auto.credentials/winsvr
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 を参照して下さい。

/etc/auto.smb
#!/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

参考

13
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
17