Samba

Windows クライアント向けのファイル共有サーバーを構築できます。高機能で安定しています。
更新日 2016-02-13

Samba 3.6.9 をCentOS6.4 に入れる

共有ファイルサーバー(NAS)が簡単にできます。

インストール

yum でインストールします。
yum install samba -y

chkconfig smb on
chkconfig nmb on

ユーザーの登録

共有フォルダへのアクセス制限の為のユーザーとパスワードを設定します。
useradd -s /sbin/nologin ast
passwd ast

pdbedit -a ast

smb.conf を設定

設定ファイルに修正します。
vi /etc/samba/smb.conf

 [global]
   max protocol = SMB2
   workgroup = WORKGROUP
   hosts allow = 127. 192.168.


   // プリンタは使わないのでコメントアウト
   ;load printers = yes
   ;cups options = raw

 
 // フォルダの公開
 [camera_avis1]
    comment = Camera AVIs
    path = /mnt/camera_avis1
    browseable = yes
    writeable = yes
    valid users = ast

ファイアウォールの設定

UDP ポート 137, 138 とTCP ポートの139, 445 を使います。samba-swat はTCP ポート 901 を使います。
vi /etc/sysconfig/iptable

 -A INPUT -s 192.168.23.0/24 -p udp -m udp --dport 137 -j ACCEPT
 -A INPUT -s 192.168.23.0/24 -p udp -m udp --dport 138 -j ACCEPT
 -A INPUT -s 192.168.23.0/24 -p tcp -m tcp --dport 139 -j ACCEPT
 -A INPUT -s 192.168.23.0/24 -p tcp -m tcp --dport 445 -j ACCEPT
 -A INPUT -s 192.168.23.0/24 -p tcp -m tcp --dport 901 -j ACCEPT

service iptables restart

Samba 4.0.6 をCentOS 6.4 にインストールする

ActiveDirectory に対応しています。

ソースコードからビルド

オフィシャルサイト SAMBA からダウンロードします。
yum groupinstall "Development Tools" -y
yum groupinstall "Compatibility libraries" -y

yum install python-devel libacl-devel krb5-devel ctdb-devel
quota-devel pam-devel avahi-devel openldap-devel cups-devel
libaio-devel gamin-devel pytalloc-devel xfsprogs-devel

cd /usr/src
wget "http://www.samba.org/samba/ftp/stable/samba-4.0.6.tar.gz"

tar zxvf samba-4.0.6.tar.gz
cd samba-4.0.6

./configure 
make
make install

初期設定

samba-tool を使って初期設定を施します。Realm(kerberos 関係) とDomain を指定します。
/usr/local/samba/bin/samba-tool domain provision

 // Realm [LOCAL]: SAMBA_CENTWO6.LOCAL
 // Domain [SAMBA_CENTWO6]:
 // Server Role (dc, member, standalone) [dc]:
 // DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:
 // DNS forwarder IP address (write 'none' to disable forwarding) [127.0.0.1]: 192.168.23.1
 // Administrator password: (英数字と記号を含める事)
 // Retype password:
Realm とDomain を名前解決できるようにhosts ファイルにも書く
vi /etc/hosts

 192.168.23.104 SAMBA_CENTWO6.LOCAL SAMBA_CENTWO6
samba-tool をすぐ呼べるようにPATH も通しておく。
vi ~/.bashrc

 // 末尾に追加
 PATH="$PATH":/usr/local/samba/bin

起動スクリプトを記述

起動スクリプトが無いようなので、他所のサイトを参考に簡単なのを作ります。
vi /etc/init.d/samba4

#! /bin/bash
#
# samba4       Bring up/down samba4 service
# 
# chkconfig: - 90 10
# description: Activates/Deactivates all samba4 interfaces 
#              configured to start at boot time. 
# 
### BEGIN INIT INFO
# Provides: 
# Should-Start: 
# Short-Description: Bring up/down samba4
# Description: Bring up/down samba4
### END INIT INFO
# Source function library.
. /etc/init.d/functions
 
if [ -f /etc/sysconfig/samba4 ]; then
  . /etc/sysconfig/samba4
fi

CWD=$(pwd)
prog="samba4"


start() {
  echo -n $"Starting $prog:                 "

  /usr/local/samba/sbin/samba
  sleep 2

  c=$(ps ax | grep -v grep | grep -c samba)
  if [ $c != 0 ];
  then
    echo [$'\e[32;1m' OK $'\e[0m'];
  else
    echo [$'\e[31;1m' FAILED $'\e[0m'];
  fi
}

stop() {
  echo -n $"Shutting down $prog:            "

  killall samba 1> /dev/null 2> /dev/null

  c=$(ps ax | grep -v grep | grep -c samba)
  if [ $c = 0 ];
  then
    echo [$'\e[32;1m' OK $'\e[0m'];
  else
    echo [$'\e[31;1m' FAILED $'\e[0m'];
  fi
}

status() {
  c=$(ps ax | grep -v grep | grep -c samba)
  if [ $c != 0 ];
  then
     echo Samba4 を実行中...
  else
     echo Samba4 は停止しています
  fi
}

case "$1" in
start)
  start
  ;;

stop)
  stop
  ;;

status)
  status
  ;;

restart)
  stop
  start
  ;;
*)
  echo $"Usage: $0 {start|stop|restart|status}"
  exit 1
esac

exit 0
起動したら成功
service samba4 start
chkconfig samba4 on

一般ユーザーの登録

samba-tool を使ってユーザーを追加します。
samba-tool usr add ユーザー名// パスワード要件を変更する
// 複雑さチェックをオフ
samba-tool domain passwordsettings set --complexity=off

// 文字列長の最短数
samba-tool domain passwordsettings set --min-pwd-length=5

// パスワードの有効期限を無制限に
samba-tool user setexpiry ユーザー名 --noexpiry

Samba 3.6.0 をCentOS 5.6 にインストールする

SMB2 という通信プロトコルをサポートしたSamba 3.6.0 をインストールします。大変高速になっています。

ソースコードからビルド

wing リポジトリを使ったrpm インストールがイマイチうまくいかないので、素直にソースからビルドインストールします。 主にコチラのサイト様を参考にさせていただきました。
yum install gcc pam-devel readline-devel fileutils libacl-devel \
openldap-devel krb5-devel cups-devel keyutils-libs-devel

cd /tmp
wget http://ftp.samba.org/pub/samba/samba-3.6.3.tar.gz
tar zxvf samba-3.6.3.tar.gz

cd samba-3.6.3/source3

./configure CC="gcc" CFLAGS="-O2 -march=pentium3" \
--prefix=/usr/local \
--localstatedir=/var \
--with-configdir=/etc/samba \
--with-modulesdir=/usr/local/lib/samba \
--with-pammodulesdir=/lib/security \
--with-lockdir=/var/lib/samba \
--with-logfilebase=/var/log/samba \
--with-nmbdsocketdir=/var/run \
--with-piddir=/var/run \
--with-privatedir=/etc/samba \
--with-swatdir=/usr/local/share/swat \
--with-shared-modules=idmap_ad,idmap_rid,idmap_adex,idmap_hash,idmap_tdb2 \
--with-acl-support \
--with-ads \
--with-automount \
--with-cluster-support=auto \
--with-dnsupdate \
--with-fhs \
--with-libsmbclient \
--with-libsmbsharemodes \
--with-libtalloc \
--with-libtdb \
--with-pam \
--with-pam_smbpass \
--with-quotas \
--with-sendfile-support \
--with-syslog \
--with-utmp \
--with-winbind

make

make install
設定ファイルの雛形をコピー
cd ../packaging/RHEL/setup
cp samba.log /etc/logrotate.d/samba
cp samba.pamd /etc/pam.d/samba
cp samba.sysconfig /etc/sysconfig/samba
cp {smb.conf,smbprint,smbusers} /etc/samba
cp smb.init /etc/rc.d/init.d/smb
cp swat /etc/xinetd.d
cp winbind.init /etc/rc.d/init.d/winbind
下記のコマンド実行も初期設定に必要
cd ~
echo /usr/local/lib >> /etc/ld.so.conf.d/usrlocal.conf
ldconfig
ldconfig -p | egrep libnetapi\|libsmb\|libtalloc\|libtdb\|libwbclient

起動の設定

起動スクリプトを若干修正、登録します。インストールはこれで終了です。yum install ならココまで自動です。
cd /etc/rc.d/init.d/
chmod 755 smb
chmod 755 winbind

vi smb
 # chkconfig: - 91 35
 //  ↓
 # chkconfig: 235 91 35

 PATH=$PATH:/usr/local/sbin:/usr/local/bin

chkconfig --add smb
service smb start

設定

smb.conf を編集します。

smb.conf の設定

デフォルトの設定でユーザー毎のホームディレクトリが公開されるはずです。
vi /etc/samba/smb.conf

 // 基本設定項目 
 [global]
    max protocol = SMB2       // SMB2 プロトコルを利用
    netbios name=MYSERVER     // ネットワークに表示されるコンピュータ名
  workgroup = WORKGROUP
    hosts allow 127. 192.168.23.  // アクセス許可アドレス

 // ユーザーのホームディレクトリを公開するという設定項目
 // 無効にしたければコメントアウトする
 [homes]
   

 // ディレクトリを個別に公開したければ以下のように追記
 [ddrv_for_ast]
    comment = Work Folder for AST
    path = /ddrv_for_ast
    browseable = yes
    writeable = yes
    valid users = ast
smb.conf のテストは以下で
testparm -s

起動

service smb start
Windows のエクスプローラ上から確認できますでしょうか?最初は見えないかもしれないのでアドレスバーに\\MYSERVER と打ってみます。 パスワード入力ダイアログが出れば成功です。Windows のユーザーアカウントならびにパスワードを同じにしてれば便利でしょう。

トラブルシューティング

異なるサブネットから参照したい

異なるサブネットに属するWindows からネットワークコンピュータとしてSamba のNetBIOS 名を取得することはできません。UDP port 137,138 にて そのやり取りがなされますが、ブロードキャストアドレスが異なる為にnmbd が返答しないのが原因です。\\192.168.24.4 といったIP アドレスを直接打てば アクセスできます。私はHosts File Managerを使っているので、SAMBA 名を名前解決できるように登録してあります。

「ネットワークパスが見つかりません」

サーバーが見えていてもアクセス出来ないのはファイヤーウォールが原因です。またSELinux もオフにしましょう。