30 November 2014

(Ubuntu 14.04, Samba) USBストレージを自動共有

USB接続したストレージ(HDDやメモリー)を、Sambaで自動共有するための設定

検証環境

・Ubuntu 14.04.1 LTS
・Samba 4.1.6

脆弱性を少しでも減らすため、普段利用しているユーザ名ではなく、共有するときの専用ユーザ名(今回はsmb-shareという名前)のディレクトリ /media/smb-share を共有する。

通常のパブリック・ディレクトリでは失敗

通常のパブリック・ディレクトリ(Guestアクセス可)では、/media 以下にマウントされるディレクトリのアクセス権限により、Windows共有で読み取ることができない。

その時の設定は、testparm で表示される主な項目だけを列挙すると、

/etc/samba/smb.conf
[global]
    server string = %h server (Samba, Ubuntu)
    server role = standalone server
    map to guest = Bad User
    obey pam restrictions = Yes
    pam password change = Yes
    passwd program = /usr/bin/passwd %u
    passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
    unix password sync = Yes
    syslog = 0
    log file = /var/log/samba/log.%m
    max log size = 1000
    dns proxy = No
    usershare allow guests = Yes
    panic action = /usr/share/samba/panic-action %d
    idmap config * : backend = tdb
 
[public]
    comment = public dir /media/smb-public (rw)
    path = /media/smb-public
    read only = No
    create mask = 0666
    directory mask = 0777
    guest only = Yes
    guest ok = Yes
    browseable = Yes
 
[usb-media]
    comment = mounted USB volume /media/smb-share (read only)
    path = /media/smb-share
    read only = Yes
    guest only = Yes
    guest ok = Yes
    browseable = Yes

[global]セクションはデフォルトのままで、[public]と[usb-media]セクションだけを新規追加している。

自動マウントされたストレージが割り付けられる /media ディレクトリの状態は

$ ls -la /media
合計 28
drwxr-xr-x   7 root root 4096 11月 30 13:00 ./
drwxr-xr-x  22 root root 4096 11月 25 08:20 ../
drwxr-x---+  2 root root 4096  9月  1 19:31 root/
drwxrwxrwx   2 root root 4096 11月 30 15:41 smb-public/
drwxrwxrwx+  3 root root 4096 11月 30 16:09 smb-share/

USBストレージが自動マウントされる smb-share の属性の後ろに「 + 」(その他のアクセス権)が付いている所が問題の原因。

基本的には、マウントしたときのユーザしかアクセスできないようだ。

問題回避方法 : ユーザ名の強制

force userの設定値を使って、USBストレージをマウントするユーザ名(今回は smb-share というユーザ)での接続を強制する。なお、guest ok = Yes を同時に指定することで、ゲスト接続時に自動的に「マウントするユーザ」と解釈されるようだ。

/etc/samba/smb.conf
[usb-media]
    comment = mounted USB volume /media/smb-share (read only)
    path = /media/smb-share
    read only = Yes
    force user = smb-share
    guest ok = Yes
    browseable = Yes