Samba ファイルサーバーの構築 (CnetOS7.2)

認証無しで共有サーバーに書き込めるのがいいと思っていたけど、しゃべる NetBIOS のプロトコルのバージョンが下がって遅くなるんだよね。
なので pdbedit で認証されているユーザじゃないと書き込めないようになっています。
ちなみに Samba のバージョンは 4 系なので Active Directory ドメインコントローラとして動作させようと思えば構築できる。

[root@phy3 samba]# yum info samba
(snip)
名前                : samba
アーキテクチャー    : x86_64
バージョン          : 4.2.10
リリース            : 6.el7_2
容量                : 1.8 M
リポジトリー        : installed
提供元リポジトリー  : updates
要約                : Server and Client software to interoperate with Windows machines
URL                 : http://www.samba.org/
ライセンス          : GPLv3+ and LGPLv3+
説明                : Samba is the standard Windows interoperability suite of programs for Linux and Unix.

Samba のインストール

sudo yum -y install samba
sudo mkdir /var/samba

自分の共有フォルダを作成

mkdir ~/samba

既存のユーザを追加

こいつで認証を通す。

sudo pdbedit -a wnoguchi
new password:
retype new password:
Unix username:        wnoguchi
NT username:
Account Flags:        [U          ]
User SID:             S-1-5-21-3726826207-3823386518-2277225043-1000
Primary Group SID:    S-1-5-21-3726826207-3823386518-2277225043-513
Full Name:            Wataru Noguchi
Home Directory:       \\phy3\wnoguchi
HomeDir Drive:
Logon Script:
Profile Path:         \\phy3\wnoguchi\profile
Domain:               PHY3
Account desc:
Workstations:
Munged dial:
Logon time:           0
Logoff time:          木, 07  2月 2036 00:06:39 JST
Kickoff time:         木, 07  2月 2036 00:06:39 JST
Password last set:    水, 04  5月 2016 10:11:26 JST
Password can change:  水, 04  5月 2016 10:11:26 JST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

共有フォルダの所有者変更

自分しか使わないけどね。。。

sudo chown nobody:nobody /var/samba

Samba の設定

  • 設定ファイルバックアップ
sudo cp -rp /etc/samba{,.orig}
  • /etc/samba/smb.conf
[global]
unix charset = UTF-8
dos charset = CP932

workgroup = MYGROUP
↓
workgroup = PG1X

アクセス許可設定

;    hosts allow = 127. 192.168.12. 192.168.13.
↓
    hosts allow = 127. 172.16. 172.17. 172.18.

プリンタ使わない
    load printers = yes
    disable spoolss = yes

[homes]
    comment = Home Directories
    path = %H/samba

    vfs objects = recycle
    recycle:repository = .recycle
    recycle:keeptree = no
    recycle:versions = yes
    recycle:touch = no
    recycle:maxsize = 0
    recycle:exclude = *.tmp ~$*

[public]
    comment = Public Stuff
    path = /var/samba
    public = yes
    writable = yes
    only guest = yes
    vfs objects = recycle
    recycle:repository = .recycle
    recycle:keeptree = no
    recycle:versions = yes
    recycle:touch = no
    recycle:maxsize = 0
    recycle:exclude = *.tmp ~$*

smb, nmb 起動

sudo systemctl start smb
sudo systemctl start nmb
sudo systemctl enable smb
sudo systemctl enable nmb

ごみ箱を定期的に空にするスクリプトを作成

1ヶ月間 = 30 日 = 30 * 24 時間 = 720 時間 アクセスのないものは完全に削除する

sudo cat <<'EOF' >/etc/cron.weekly/recyclewatch
#!/bin/bash
for user in `ls /home/`
do
  if [ -d /home/$user/.recycle ]; then
    tmpwatch -f 720 /home/$user/.recycle/
  fi
done
if [ -d /var/samba/.recycle ]; then
  tmpwatch -f 720 /var/samba/.recycle/
fi
EOF
sudo chmod 744 /etc/cron.weekly/recyclewatch

ファイアウォールの穴を開ける

sudo firewall-cmd --permanent --zone=public --add-service=samba
sudo firewall-cmd --reload

接続の仕方

認証聞かれます。

Windows の場合

\\72.16.216.3
\\72.16.216.3\public\

Mac, Linux の場合

smb://172.16.216.3/
smb://172.16.216.3/public/

トラブルシューティング

認証は通るみたいだが接続はできない。

[root@phy3 samba]# tailf /var/log/samba/log.macbookair-d7e0
[2016/05/04 11:00:01.995083,  0] ../source3/smbd/service.c:798(make_connection_snum)
  canonicalize_connect_path failed for service public, path /home/samba
[2016/05/04 11:00:01.997818,  0] ../source3/smbd/service.c:798(make_connection_snum)
  canonicalize_connect_path failed for service public, path /home/samba
[2016/05/04 11:01:04.905785,  0] ../source3/smbd/service.c:798(make_connection_snum)
  canonicalize_connect_path failed for service public, path /home/samba

Oops… 書き間違い。
そもそも存在しないディレクトリを指定していたりするとこんなエラーになる。
修正する。

[public]
    comment = Public Stuff
    path = /home/samba
↓
[public]
    comment = Public Stuff
    path = /var/samba

そしてリスタート。

sudo systemctl restart smb
sudo systemctl restart nmb

参考サイト

  1. Windowsファイルサーバー構築(Samba) – CentOSで自宅サーバー構築
  2. CentOS7にSambaをインストール | 俺的備忘録 〜なんかいろいろ〜