Samba (サンバ) は、マイクロソフト社のWindowsネットワークを実装したフリーソフトウェア。 Linux、Solaris、BSD 、Mac OS Xなどの UNIX 系 OS を用いて、Windows のファイルサーバやプリントサービス、ドメインコントローラ機能、ドメイン参加機能を提供する。
# yum install libunistring-devel # yum install idn2
# 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
# 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
# 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
# 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認証を有効のサポート |
--with-syslog | syslog への出力をサポート |
--with-quotas | Quata 機能(容量制限)をサポート |
--with-winbind | Windows NTドメインユーザーとUNIXユーザーの統一ログインを可能に |
--with-acl-support | ACL機能をサポート |
--with-profiling-data | 性能に関する情報の収集 |
--with-smbwrapper | smbsh機能を有効にする |
--with-automount | automountをサポート |
--with-smbmount | smbfs機能をサポートするコマンドを作成(ver4.1から非対応) |
--with-utmp | utmpによるユーザーのアクセス記録の収集をサポート |
ソースから入れる方がおすすめではあるが、時間が無い場合などは yumで対応したい場合も多いと思われる。
#yum install samba
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
sambaでは、ポートの137〜139番または445番を利用する。Windows95などのWindows2000以前のOSに主に使われていたのが、NetBIOSベースのNBT方式(NetBIOS over TCP/IP)であり、この137番〜139番を利用する方式となる。逆に445番を利用するのが、CIFSダイレクトホスト方式(Common Internet File System)となる。これはWindows2000/XP以降のインターネットが普及してからの仕組みとなり、マイクロソフトのアクティブディレクトリもこの仕組みで稼働している。
プロトコルタイプ | ポート番号 | プロトコル | 概要 |
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」という行を追加することで判断される。どちらかを選べばもう片方のポートまたはポート群を開ける必要は無い。またこの記述が無いと両方に対応する。(その場合ポートは関係ポートすべて開ける)
注意:CIFS方式だと、マシン名の通知機能はないためWindowsネットワークだと常識的な、ダイナミックに同一セグメントのWindowsマシン名が表示されるような事がWINSサーバが無いとできない。よって自分で接続先のサーバ名を指定する。また名前解決にDNSを利用するため、名前解決できないサーバーアクセスには、¥¥192.168.0.100¥ などのようにエクスプローラーでアクセスする時に、ダイレクトにIPアドレスを指定する必要がある。
yumインストールした場合の設定ファイルの位置
# vi /etc/samba/smb.conf
ソースの場合は、ソースフォルダ直下のexamples/smb.conf.default というファイルを smb.conf にリネームコピーして利用する。
# cp examples/smb.conf.default /usr/local/samba/etc/smb.conf
項目 | 値 | 概要 |
smb ports | 138 or 445 | 利用するプロトコル方式の選択 |
load printers | yes or no | プリンター利用の設定 |
disable spoolss | yes or no | プリンタースプール禁止の設定 |
Centosなどでは、通常SELinuxが標準で機能しているため、sambaを利用する上でSELinuxの設定が必要となる。
# getsebool -a | grep samba
# 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_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のラベルなどは無視されるので、セキュリティは低下するが運用による |
# chcon -R -t public_content_rw_t /home/public
Sambaユーザーを追加する場合には、あらかじめ同じ名前のlinuxユーザーを登録しておく必要がある。但し、samba にログインする場合には、linuxパスワードを同じものは利用しないため、ここコマンドによって、samba にログインする場合のパスワードを設定する。
# useradd NEWUSERNAME <- unix にユーザーを追加するコマンド # smbpasswd -a NEWUSERNAME
# smbpasswd -x DELUSERNAME
# pdbedit -L
より詳細情報の確認
# smbd -b | grep SMB_PASSWD_FILE
# rm /var/lib/samba/private/passdb.tdb
# smbpasswd username
# smbclient -L localhost -U%
# smbstatus
# smbd -V
# findsmb
# testparm
Sambaのパスワードファイルは、tdbsam 方式によって、/usr/local/samba/private/passdb.tdb に保存される。tdbbackup コマンドでバックアップファイルが作れる。
# chkconfig smb on
# service smb start
# smbd -F -S
<デーモン>
# smbd -D
# 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
# 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
# samba-tool user add new_user_name
samba-tool domain provisionにおいて、上記メッセージが出た場合、パスワードが「英字+数字+記号」の組み合わせになっていない。
sambaの設定をWEBブラウザで利用できるツールであり、必要であればインストールする。
# yum install samba-swat
TCP 901番(プロトコル自体は、http)
例)http://localhost:901/
現在、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
http://www.atmarkit.co.jp/ait/articles/1112/16/news140.html
既知のファイルシステム ( ext2, ext3, … ) であれば、mount はそのままマウント処理を行うが、そうでない場合 ( cifs, smbfs 等 ) は、/sbin/mount.FSTYPE を呼び出して、処理を任せる仕様となっている。
先に linux の同名のユーザーを作成しておいてください。
Linux にログインするときは、Windows でログオンする時と同じユーザ名で ログインしてください。
# su - testuser $ smbclient -L localhost
Windowsでは必ず、ドメインという管理の仕組みにコンピュータが所属していることから、通常のネットワークログインには、自動的に普段のアカウントのドメインが適用されるようになっている。そのため、ドメインから外れた場合、またスタンドアローンサーバーに接続する場合には、コントロールパネルのユーザーアカウントの左上にある、資格情報の管理から、アクセスしたいサーバーの資格情報を登録する必要がある。
この写真の例では、192.168.202.128 のサーバーにアクセスするための資格情報を登録している。ポイントは、ユーザー名の所に、domain名¥account名の指定か、domain名@account名という形でドメイン名を指定する。ここでは、centos7.naruが、ドメイン名(ただし下記に説明するように、この場合はサーバー名となっているが、通常はドメイン名として mydomain のような指定になる)samba が登録ユーザー名となっている。
ただし、この画像では、スタンドアローンサーバーに接続するために、ドメイン名を利用せず、サーバー名を指定している。(これは、サーバー側のsmb.conf の設定で、ドメイン指定に、ドメイン名が指定されていても、ドメイン・サーバーで管理されていないサーバーはすべてスタンドアローン扱いのため注意が必要。)
# smbstatus <-- ロックファイルの確認
smbd、sambaのデーモンを kill して再起動させる。
基本的には、samba の var フォルダのパーミッションに問題がある。root で smbclient を起動しても同じエラーがでるようであれば、chown -R root:root /usr/local/samba/var のように、必要な(このコマンドはユーザーの環境に合わせる必要がある)パーミッションの再設定を行う必要がある。