#author("2020-02-16T20:33:33+09:00","default:narushima","narushima")
#author("2020-02-16T20:42:32+09:00","default:narushima","narushima")
*目次 [#zb723458]
#contents
*Sambaとは? [#ob135cac]
Samba (サンバ) は、マイクロソフト社のWindowsネットワークを実装したフリーソフトウェア。 Linux、Solaris、BSD 、Mac OS Xなどの UNIX 系 OS を用いて、Windows のファイルサーバやプリントサービス、ドメインコントローラ機能、ドメイン参加機能を提供する。

**インストール [#o6e2fc05]
 # yum install libunistring-devel
 # yum install idn2

***netteleのインストール [#r12ebbb0]
 # wget https://ftp.gnu.org/gnu/nettle/nettle-3.5.tar.gz
 # tar zxvf nettle-3.5.tar.gz
 # cd nettele-3.5
 #  ./configure
 # make
 # make install
 # cp *.pc /usr/local/lib/pkgconfig/
 # export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

***tasn1 のインストール [#uf786eb0]
 # wget https://ftp.gnu.org/gnu/libtasn1/libtasn1-4.16.0.tar.gz
 # tar zxvf libtasn1-4.16.0.tar.gz
 # cd libtasn1-4.16.0
 # export CFLAGS="-std=c99"
 # ./configure
 # make
 # make install

***GnuTLSのインストール [#r2d497f4]

 # wget https://www.gnupg.org/ftp/gcrypt/gnutls/v3.6/gnutls-3.6.12.tar.xz
 # xz -dc gnutls-3.6.12.tar.xz | tar xfv -
 # cd gnutls
 #  ./configure
 # make
 # make install


***ソースからのインストール [#a0f96855]
 # wget https://download.samba.org/pub/samba/stable/samba-4.11.6.tar.gz
 # tar zxvf samba-4.11.6.tar.gz
 # ./configure --with-syslog --with-quotas --with-acl-support --prefix=/usr/local/samba
 # make
 # make install

|--with-pam|[[PAM認証:http://en.wikipedia.org/wiki/Pluggable_Authentication_Modules]]を有効のサポート|
|--with-syslog|syslog への出力をサポート|
|--with-quotas|Quata 機能(容量制限)をサポート|
|--with-winbind|Windows NTドメインユーザーとUNIXユーザーの統一ログインを可能に|
|--with-acl-support|[[ACL機能:http://ja.wikipedia.org/wiki/%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E5%88%B6%E5%BE%A1%E3%83%AA%E3%82%B9%E3%83%88]]をサポート|
|--with-profiling-data|性能に関する情報の収集|
|--with-smbwrapper|smbsh機能を有効にする|
|--with-automount|automountをサポート|
|--with-smbmount|smbfs機能をサポートするコマンドを作成(ver4.1から非対応)|
|--with-utmp|utmpによるユーザーのアクセス記録の収集をサポート|
***yumを使ったインストール [#xac05015]
ソースから入れる方がおすすめではあるが、時間が無い場合などは yumで対応したい場合も多いと思われる。
 #yum install samba

***ソースからインストールした場合のパスの初期構成 [#l20c2f3e]

 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


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

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

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

[[Microsoft NBTを利用しないように設定する:http://support.microsoft.com/default.aspx?scid=kb;ja;Q204279]]
**smb.confのパラメータ [#q03e23a3]
yumインストールした場合の設定ファイルの位置
 # vi /etc/samba/smb.conf

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

|項目|値|概要|h
|smb ports|138 or 445|利用するプロトコル方式の選択|
|load printers|yes or no|プリンター利用の設定|
|disable spoolss|yes or no|プリンタースプール禁止の設定|

**SELinuxの設定 [#n4fe13f1]
Centosなどでは、通常SELinuxが標準で機能しているため、sambaを利用する上でSELinuxの設定が必要となる。
***現状のsamba設定を確認 [#sbca8317]
 # getsebool -a | grep samba

***許可を設定 [#w007d150]
 # 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に関係する設定の概説
|項目|概要|h
|allow_smbd_anon_write|smbdデーモンによる書き込みの許可。要するにsamba全体での書き込み許可|
|samba_enable_home_dirs|ユーザー毎のホームディレクトリーの共有を許可。通常は/home 配下に存在するホームディレクトリー|
|use_samba_home_dirs|このマシンのユーザーディレクトリーをsamba経由で利用したい場合に設定|
|samba_share_nfs|NFSでshareしているディレクトリーやファイルをsambaでもshareする場合に設定|
| samba_run_unconfined|sambaログイン時に自動起動されるScriptを動作させるかどうかの設定。但しScriptフォルダに、samba_unconfined_script_exec_t のラベル設定が必要|
|samba_domain_controller|このマシンのsambaで、DomainControllerが起動する場合には許可が必要|
|samba_export_all_ro|すべてのファイルの読み出し許可する。SELinuxのラベルなどは無視されるので、セキュリティは低下するが運用による|
|samba_export_all_rw|すべてのファイルの読み出しと書き込みを許可する。SELinuxのラベルなどは無視されるので、セキュリティは低下するが運用による|
※[[ここも詳しい:https://access.redhat.com/site/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Managing_Confined_Services/sect-Managing_Confined_Services-Samba-Booleans.html]]
***共有フォルダにSELinuxの共有ラベルを設定 [#mc5d8d6c]
 # chcon -R -t public_content_rw_t /home/public

**Sambaユーザーの管理 [#laf0b27e]
***ユーザーの追加 [#w3c5d125]
Sambaユーザーを追加する場合には、あらかじめ同じ名前のlinuxユーザーを登録しておく必要がある。但し、samba にログインする場合には、linuxパスワードを同じものは利用しないため、ここコマンドによって、samba にログインする場合のパスワードを設定する。
 # useradd NEWUSERNAME       <-  unix にユーザーを追加するコマンド
 # smbpasswd -a NEWUSERNAME

***ユーザーの削除 [#cb3dead1]
 # smbpasswd -x DELUSERNAME

***ユーザーの一覧 [#e0785ee3]
 # pdbedit -L

より詳細情報の確認
 # smbd -b | grep SMB_PASSWD_FILE

***ユーザの追加削除の後に [#vbd96c97]
 # rm /var/lib/samba/private/passdb.tdb

***ユーザーパスワードの変更 [#i2e63c44]
 # smbpasswd username

**起動状況の確認 [#w96574ac]

 # smbclient -L localhost -U%


**Sambaのセッション情報 [#wc68600a]
 # smbstatus

**Sambaのバージョンの確認 [#a7ca8400]
 # smbd -V

**Sambaの可動状況 [#u6d21bc6]
 # findsmb

***設定状況の確認 [#tc2248cd]
 # testparm

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


*起動 [#w612c905]
**初期起動をONにする。 [#xb355b8b]
 # chkconfig smb on

**samba本体を起動する。(smb と、nmb が一緒に起動) [#y98ff712]
 # service smb start

**とりあえず起動 [#s338a4f5]
 # smbd -F -S

<デーモン>
 # smbd -D

*Domainコントローラー [#sb824005]

**smb.cnfへの追加修正 [#sde2d029]

 # 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

**krb5.confの修正 [#n3402db8]

 # 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

*user追加 [#n780aa7e]

 # samba-tool user add new_user_name


*トラブルシューティング [#o87988e9]


**check_password_restrictions: the password does not meet the complexity criteria! [#b85f0a53]

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


*Samba SWAT [#kcaeac85]
sambaの設定をWEBブラウザで利用できるツールであり、必要であればインストールする。
**Install [#sb81764b]
 # yum install samba-swat

**ポートを開ける [#s20b7baf]
TCP 901番(プロトコル自体は、http)

**クライアントからのアクセス [#o1079bdd]
 例)http://localhost:901/




*Linux同士でのマウント注意点 [#t5cac01b]
現在、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

***Sambaとの接続 [#e128a373]

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


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

*トラブルシューティング [#kdb6f001]

** Failed to add entry for userと出て、ユーザーが追加できない場合。 [#lb646b88]
先に linux の同名のユーザーを作成しておいてください。

** smbclient を利用して接続チェック [#k93ffd9e]

Linux にログインするときは、Windows でログオンする時と同じユーザ名で ログインしてください。
 # su - testuser
 $ smbclient -L localhost

**スタンドアロンサーバーの場合、windows からログインできない。 [#l25b26ce]

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

&ref(ディスクとファイル共有/Samba/Shikaku.JPG,70%);

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

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

**ファイルがロックされたまま解除されない。 [#s5cd989b]

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

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

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