前提
特定ユーザにより samba over ssh でのみ利用する。
環境
- サーバ:CentOS 6.5 (Samba 3.6.9)
- クライアント:Windows 7
- クライアント:Mac OS X 10.9
Sambaのインストール
$ yum -y install samba
Samba用ユーザの追加
- UNIXアカウントとしても存在する必要がある
- パスワードはSamba独自で管理される
# グループ作成
% groupadd sambauser
# ログインの必要ないユーザを作成(Samba接続でのみ使用する)
% adduser -g sambauser -s /bin/false sambasan
# Samba用ユーザを作成
% pdbedit -a -u sambasan
# パスワードを入力
ちなみにadduser
に-M
をつけるとホームディレクトリも作成されない。
UNIXアカウントのパスワード設定は以下。不要だが。
% passwd sambasan
[メモ] pdbedit コマンド
# ユーザ作成
% pdbedit -a <user name>
# ユーザ削除
% pdbedit -x <user name>
# ユーザ表示
% pdbedit -L
% pdbedit -L -v <user name>
共有フォルダの設定
- アクセス権を適切に与える必要がある
# 今回は所有者でしか利用しないので700
% chmod -v 700 /home/sambasan
Sambaの設定
-
/etc/samba/smb.conf
を編集する - セクション名が共有リソース名となる
- ただし[global]、[homes]、[printers]は特殊セクション
[参考] smb.conf
コメントも参考に適宜設定し、testsparm
で設定内容を確認する。
以下はプリンタを無効にして、接続先をループバックアドレスのみにしてみた場合。
% testparm
[global]
workgroup = MYGROUP
server string = Samba Server Version %v
log file = /var/log/samba/log.%m
max log size = 50
idmap config * : backend = tdb
cups options = raw
load printers = No
disable spoolss = Yes
hosts allow = 127.0.0.1
hosts deny = all
[homes]
comment = Home Directories
read only = No
browseable = No
デーモン起動
smbd
こちらだけ起動すればファイル共有は可能。
% /etc/rc.d/init.d/smb start
nmbd
NetBIOSによる名前解決を利用したい場合はこちらも。(今回は不要)
% /etc/rc.d/init.d/nmb start
起動時にサービス開始させる
% chkconfig smb on
% chkconfig nmb on
# 確認
% chkconfig
# 445がLISTENされている
% netstat -anpt | grep 445
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 1603/smbd
tcp 0 0 :::445 :::* LISTEN 1603/smbd
ちなみに0.0.0.0
と::
は、IPv4とIPv6の違い。
ファイアウォールの設定
Windows7から繋ぐだけなら445だけ開けておけば良い。
No | ポート | プロトコル | デーモン | 通信目的 |
---|---|---|---|---|
1 | 137 | UDP | nmdb | NetBIOS Name Service |
2 | 138 | UDP | nmdb | NetBIOS Datagram |
3 | 139 | TCP | smbd | NetBIOS Session |
4 | 445 | TCP | smbd | SMB over TCP |
ただし今回はssh経由でしか利用しないため、以下条件を満たしていれば特に設定は不要。
- sshサービスは公開されている
- ループバックアドレスからの送受信が許可されている
SELinuxの設定
SELinuxが有効になっている場合は、/etc/samba/smb.conf
にも書かれているように設定が必要。
# If you want to share home directories via samba pl
# setsebool -P samba_enable_home_dirs on
これを受けて
# コメントの指示通り設定
% setsebool -P samba_enable_home_dirs 1
# 設定内容を確認(onになっていればOK)
% getsebool samba_enable_home_dirs
samba_enable_home_dirs --> on
正直なところこの設定に気づかなかったが、SELinuxを無効にすると接続できたので後になってこいつが原因だと判明。
% setenforce 1
# => この状態だと接続できない
% setenforce 0
# => この状態だと接続できたのでSELinuxが原因だと判明
Windows7側のセットアップ
こちらの記載通りに設定させてもらった。
[参考] CIFS-over-SSH for Windows Vista
簡単に手順だけだけ並べるが上記サイトを見たほうがわかりやすい。
# ループバックアダプタ追加
> hdwwiz.exe
# 画面にてアダプタのIPを10.255.255.1(任意)に設定
# システムに占有された445ポートを奪う
# サービス起動を「手動」に変更
> sc config smb start= demand
# portproxy を設定
> netsh interface portproxy add v4tov4 listenaddress=10.255.255.1 listenport=445 connectaddress=10.255.255.1 connectport=44445
# 設定内容を確認
> netsh interface portproxy show v4tov4
Address Port Address Port
--------------- ---------- --------------- -------
10.255.255.1 445 10.255.255.1 44445
# smbサービスをタスク起動させる
> Taskschd.msc
# タスクスケジューラにてログオン時にサービス起動するようにタスク作成
# OS再起動
# smbサービスが起動していることを確認
> sc query smb
# 445ポートが占有されていないことを確認
> netstat -an | grep 445
TCP 10.255.255.1:445 0.0.0.0:0 LISTENING
TCP 10.255.255.1:44445 0.0.0.0:0 LISTENING
ちなみにこの手順通り設定せず、システムに445ポートを握られている状態では、ポート転送時で以下のエラーが発生する。
bind: Not owner
channel_setup_fwd_listener: cannot listen to port: 445
なおPuTTYではなくOpneSSHを利用する場合のポート転送のconfigは以下のようにすればOK。
Host remote
Hostname <Sambaサーバのアドレス>
Port <sshのポート>
User hoge
IdentityFile ~/.ssh/id_rsa
LocalForward 10.255.255.1:44445 127.0.0.1:445
接続
あとはエクスプローラなどで¥¥10.255.255.1
へ接続すると、ユーザ認証画面が開いて接続可能となる。
ssh接続が切れると当然ファイル共有も切断される。
Mac
Windows同様にループバックアダプタを作成して接続する。
以下で可能だがこの設定は一時的なもの。
$ sudo ifconfig lo0 inet 10.255.255.1 netmask 255.255.255.255 alias
launchdにより起動時実行
起動時に自動的に設定されるようにする。
以下のようなmy.lo-alias.plist
を作成して、/Library/LaunchDaemons
に放り込む。
権限の問題があるので、既存のplistをコピーして作成するのが確実。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>my.lo-alias</string>
<key>ProgramArguments</key>
<array>
<string>/sbin/ifconfig</string>
<string>lo0</string>
<string>inet</string>
<string>10.255.255.1</string>
<string>netmask</string>
<string>255.255.255.255</string>
<string>alias</string>
</array>
<key>OnDemand</key>
<false/>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
launchctl
コマンドを利用して登録する。
$ sudo launchctl load /Library/LaunchDaemons/my.lo-alias.plist
# 確認
$ launchctl list | grep lo-alias
接続
Finderからsmb://10.255.255.1:44445
へ接続する。
Windowsとは異なり接続時にポート番号も指定してやる。
接続状況の確認
現在のSambaへの接続を表示
% smbstatus
接続履歴の表示
あらかじめutmpに情報追加するように記述すると
[global]
utmp = yes
接続履歴が確認できる。
% last | grep smb
パフォーマンス
アップロードがもう少し速くならないかといろいろ関連する項目をいじるも、
私の環境ではいずれも特に効果は出ないとの結論に達して、深入りせずに終わり。
- max protocol
- strict allocate
- read raw
- write raw
- socket options
- use sendfile
- aio read size
- aio write size