Edit
目次

Edit
Sambaとは?

Samba (サンバ) は、マイクロソフト社のWindowsネットワークを実装したフリーソフトウェア。 Linux、Solaris、BSD 、Mac OS Xなどの UNIX 系 OS を用いて、Windows のファイルサーバやプリントサービス、ドメインコントローラ機能、ドメイン参加機能を提供する。

Edit
インストール

Edit
ソースからのインストール

# wget https://download.samba.org/pub/samba/stable/samba-4.9.4.tar.gz
# tar zxvf samba-4.9.4.tar.gz
# ./configure --with-syslog --with-quotas --with-acl-support --prefix=/usr/local/samba
# make
# make install
--with-pamPAM認証を有効のサポート
--with-syslogsyslog への出力をサポート
--with-quotasQuata 機能(容量制限)をサポート
--with-winbindWindows NTドメインユーザーとUNIXユーザーの統一ログインを可能に
--with-acl-supportACL機能をサポート
--with-profiling-data性能に関する情報の収集
--with-smbwrappersmbsh機能を有効にする
--with-automountautomountをサポート
--with-smbmountsmbfs機能をサポートするコマンドを作成(ver4.1から非対応)
--with-utmputmpによるユーザーのアクセス記録の収集をサポート

Edit
yumを使ったインストール

ソースから入れる方がおすすめではあるが、時間が無い場合などは yumで対応したい場合も多いと思われる。

#yum install samba

Edit
ソースからインストールした場合のパスの初期構成

Paths:
  SBINDIR: /usr/local/samba/sbin
  BINDIR: /usr/local/samba/bin
  CONFIGFILE: /usr/local/samba/etc/smb.conf
  LOGFILEBASE: /usr/local/samba/var
  LMHOSTSFILE: /usr/local/samba/etc/lmhosts
  LIBDIR: /usr/local/samba/lib
  MODULESDIR: /usr/local/samba/lib
  SHLIBEXT: so
  LOCKDIR: /usr/local/samba/var/lock
  STATEDIR: /usr/local/samba/var/locks
  CACHEDIR: /usr/local/samba/var/cache
  PIDDIR: /usr/local/samba/var/run
  SMB_PASSWD_FILE: /usr/local/samba/private/smbpasswd
  PRIVATE_DIR: /usr/local/samba/private

Edit
設定

Edit
ポートを開ける

sambaでは、ポートの137〜139番または445番を利用する。Windows95などのWindows2000以前のOSに主に使われていたのが、NetBIOSベースのNBT方式(NetBIOS over TCP/IP)であり、この137番〜139番を利用する方式となる。逆に445番を利用するのが、CIFSダイレクトホスト方式(Common Internet File System)となる。これはWindows2000/XP以降のインターネットが普及してからの仕組みとなり、マイクロソフトのアクティブディレクトリもこの仕組みで稼働している。

プロトコルタイプポート番号プロトコル概要
NBT137TCP/UDPNetBIOS名前サービス用ポート。PCの名前をブラウジングしたりするために利用される。WINSサーバー等の名前解決などにも利用される。
138UDPNetBIOSデータグラム・サービス。
139TCPNetBIOSセッション・サービス。実際のファイルの転送などが行われるポート。データ転送を保証するために、TCPプロトコルを利用する。
CIFS445TCP/UDPダイレクト・ホスティングSMBサービス(CIFS)。主にWindows2000/XP以降で利用されているSMBの仕組み。137〜139のポートとは関係無く、独立して動作する。

NBT方式とCIFS方式の切り替えは、smb.conf ファイルの[Grobal]の設定の部分に、「smb ports = 139」または「smb ports = 445」という行を追加することで判断される。どちらかを選べばもう片方のポートまたはポート群を開ける必要は無い。またこの記述が無いと両方に対応する。(その場合ポートは関係ポートすべて開ける)
注意:CIFS方式だと、マシン名の通知機能はないためWindowsネットワークだと常識的な、ダイナミックに同一セグメントのWindowsマシン名が表示されるような事がWINSサーバが無いとできない。よって自分で接続先のサーバ名を指定する。また名前解決にDNSを利用するため、名前解決できないサーバーアクセスには、¥¥192.168.0.100¥ などのようにエクスプローラーでアクセスする時に、ダイレクトにIPアドレスを指定する必要がある。

Microsoft NBTを利用しないように設定する

Edit
smb.confのパラメータ

yumインストールした場合の設定ファイルの位置

# vi /etc/samba/smb.conf

ソースの場合は、ソースフォルダ直下のexamples/smb.conf.default というファイルを smb.conf にリネームコピーして利用する。

# cp examples/smb.conf.default /usr/local/samba/etc/smb.conf
項目概要
smb ports138 or 445利用するプロトコル方式の選択
load printersyes or noプリンター利用の設定
disable spoolssyes or noプリンタースプール禁止の設定

Edit
SELinuxの設定

Centosなどでは、通常SELinuxが標準で機能しているため、sambaを利用する上でSELinuxの設定が必要となる。

Edit
現状のsamba設定を確認

# getsebool -a | grep samba

Edit
許可を設定

# setsebool -P allow_smbd_anon_write=on
# setsebool -P samba_enable_home_dirs=on
# setsebool -P samba_share_nfs=on
# setsebool -P samba_export_all_rw on

sambaに関係する設定の概説

項目概要
allow_smbd_anon_writesmbdデーモンによる書き込みの許可。要するにsamba全体での書き込み許可
samba_enable_home_dirsユーザー毎のホームディレクトリーの共有を許可。通常は/home 配下に存在するホームディレクトリー
use_samba_home_dirsこのマシンのユーザーディレクトリーをsamba経由で利用したい場合に設定
samba_share_nfsNFSでshareしているディレクトリーやファイルをsambaでもshareする場合に設定
samba_run_unconfinedsambaログイン時に自動起動されるScriptを動作させるかどうかの設定。但しScriptフォルダに、samba_unconfined_script_exec_t のラベル設定が必要
samba_domain_controllerこのマシンのsambaで、DomainControllerが起動する場合には許可が必要
samba_export_all_roすべてのファイルの読み出し許可する。SELinuxのラベルなどは無視されるので、セキュリティは低下するが運用による
samba_export_all_rwすべてのファイルの読み出しと書き込みを許可する。SELinuxのラベルなどは無視されるので、セキュリティは低下するが運用による

ここも詳しい

Edit
共有フォルダにSELinuxの共有ラベルを設定

# chcon -R -t public_content_rw_t /home/public

Edit
Sambaユーザーの管理

Edit
ユーザーの追加

Sambaユーザーを追加する場合には、あらかじめ同じ名前のlinuxユーザーを登録しておく必要がある。但し、samba にログインする場合には、linuxパスワードを同じものは利用しないため、ここコマンドによって、samba にログインする場合のパスワードを設定する。

# useradd NEWUSERNAME       <-  unix にユーザーを追加するコマンド
# smbpasswd -a NEWUSERNAME

Edit
ユーザーの削除

# smbpasswd -x DELUSERNAME

Edit
ユーザーの一覧

# pdbedit -L

より詳細情報の確認

# smbd -b | grep SMB_PASSWD_FILE

Edit
ユーザの追加削除の後に

# rm /var/lib/samba/private/passdb.tdb

Edit
ユーザーパスワードの変更

# smbpasswd username

Edit
起動状況の確認

# smbclient -L localhost -U%

Edit
Sambaのセッション情報

# smbstatus

Edit
Sambaのバージョンの確認

# smbd -V

Edit
Sambaの可動状況

# findsmb

Edit
設定状況の確認

# testparm

Edit
パスワードファイルについて

Sambaのパスワードファイルは、tdbsam 方式によって、/usr/local/samba/private/passdb.tdb に保存される。tdbbackup コマンドでバックアップファイルが作れる。

Edit
起動

Edit
初期起動をONにする。

# chkconfig smb on

Edit
samba本体を起動する。(smb と、nmb が一緒に起動)

# service smb start

Edit
とりあえず起動

# smbd -F -S

<デーモン>

# smbd -D

Edit
Domainコントローラー

Edit
smb.cnfへの追加修正

# vi /etc/smb.cnf
  [global]
     workgroup = MYDOMAIN
     server role = active directory domain controller
     realm = MYDOMAIN.COM
     netbios name = SMBSERVER
  [netlogon]
     path = /usr/local/samba/var/locks/sysvol/kerberos.local/scripts
     read only = no
  [sysvol]
     path = /usr/local/samba/var/locks/sysvol
     read only = No

Edit
krb5.confの修正

# vi /etc/krb5.conf
  [libdefaults]
     default_realm = MYDOMAIN.COM        <- smb.conf の realm と同じ
     dns_lookup_kdc = true
  [realms]
     MYDOMAIN.COM = {
        kdc = backup.mydomain.com
        admin_server = backup.mydomain.com
     }
  [domain_realm]
     .mydomain.com = MYDOMAIN.COM
     mydomain.com = MYDOMAIN.COM

Edit
user追加

# samba-tool user add new_user_name

Edit
トラブルシューティング

Edit
check_password_restrictions: the password does not meet the complexity criteria!

samba-tool domain provisionにおいて、上記メッセージが出た場合、パスワードが「英字+数字+記号」の組み合わせになっていない。

Edit
Samba SWAT

sambaの設定をWEBブラウザで利用できるツールであり、必要であればインストールする。

Edit
Install

# yum install samba-swat

Edit
ポートを開ける

TCP 901番(プロトコル自体は、http)

Edit
クライアントからのアクセス

例)http://localhost:901/

Edit
Linux同士でのマウント注意点

現在、smbfsなどの仕様が変更され、CentOS5などではすでに、smbfsが導入されなくなった。現在は、ファイルタイプをsmbfsからCIFSに変更されているので、下記のようにマウントする形となる。

# mount -t cifs -o workgroup=mshome,user=adm,password=xxx,codepage=cp932,iocharset=utf8 //winsrv/xxx /mnt/smbmnt

サーバーのインストールでなければ、これだけで十分。CentOSの初期インストールでは導入されていないため、自分でyumを利用してインストールしなければ、この/sbin/mount.cifsファイルが存在しないので注意されたい。

# yum install samba-client

Edit
Sambaとの接続

http://www.atmarkit.co.jp/ait/articles/1112/16/news140.html

Edit
ファイルタイプに関する参考

既知のファイルシステム ( ext2, ext3, … ) であれば、mount はそのままマウント処理を行うが、そうでない場合 ( cifs, smbfs 等 ) は、/sbin/mount.FSTYPE を呼び出して、処理を任せる仕様となっている。

Edit
トラブルシューティング

Edit
Failed to add entry for userと出て、ユーザーが追加できない場合。

先に linux の同名のユーザーを作成しておいてください。

Edit
smbclient を利用して接続チェック

Linux にログインするときは、Windows でログオンする時と同じユーザ名で ログインしてください。

# su - testuser
$ smbclient -L localhost

Edit
スタンドアロンサーバーの場合、windows からログインできない。

Windowsでは必ず、ドメインという管理の仕組みにコンピュータが所属していることから、通常のネットワークログインには、自動的に普段のアカウントのドメインが適用されるようになっている。そのため、ドメインから外れた場合、またスタンドアローンサーバーに接続する場合には、コントロールパネルのユーザーアカウントの左上にある、資格情報の管理から、アクセスしたいサーバーの資格情報を登録する必要がある。

Shikaku.JPG

この写真の例では、192.168.202.128 のサーバーにアクセスするための資格情報を登録している。ポイントは、ユーザー名の所に、domain名¥account名の指定か、domain名@account名という形でドメイン名を指定する。ここでは、centos7.naruが、ドメイン名(ただし下記に説明するように、この場合はサーバー名となっているが、通常はドメイン名として mydomain のような指定になる)samba が登録ユーザー名となっている。


ただし、この画像では、スタンドアローンサーバーに接続するために、ドメイン名を利用せず、サーバー名を指定している。(これは、サーバー側のsmb.conf の設定で、ドメイン指定に、ドメイン名が指定されていても、ドメイン・サーバーで管理されていないサーバーはすべてスタンドアローン扱いのため注意が必要。)

Edit
ファイルがロックされたまま解除されない。

# smbstatus    <-- ロックファイルの確認

smbd、sambaのデーモンを kill して再起動させる。

Edit
messaging_init failedというエラーが出る。

基本的には、samba の var フォルダのパーミッションに問題がある。root で smbclient を起動しても同じエラーがでるようであれば、chown -R root:root /usr/local/samba/var のように、必要な(このコマンドはユーザーの環境に合わせる必要がある)パーミッションの再設定を行う必要がある。

添付ファイル: fileShikaku.JPG 1145件 [詳細]