Samba4の自動起動スクリプト
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() { # Attach irda device echo -n $"Starting $prog: " /opt/app/samba4/sbin/samba sleep 2 if ps ax | grep -v "grep" | grep -q /sbin/samba ; then success $"samba4 startup"; else failure $"samba4 startup"; fi echo } stop() { # Stop service. echo -n $"Shutting down $prog: " killall samba sleep 2 if ps ax | grep -v "grep" | grep -q /sbin/samba ; then failure $"samba4 shutdown"; else success $"samba4 shutdown"; fi echo } status() { /opt/app/samba4/sbin/samba --show-build } # See how we were called. case "$1" in start) start ;; stop) stop ;; status) status irattach ;; restart|reload) stop start ;; *) echo $"Usage: $0 {start|stop|restart|status}" exit 1 esac exit 0
SAMBA4を2台目ドメインコントローラ(DC)サーバとして稼働させる
WindowsでActiveDirectoryを構築したが、予算の関係で2台目のDCサーバをCentOS6.5のSAMBA4で構築した際の導入手順です。 SAMBA4だけでもActiveDirecoryを構築できますし、Windowsサーバと混在環境でも構築可能です。 ・ActiveDirectoryはWindowsServer2012サーバで下記内容で構築済み
フォレストの機能レベル:Windows Server 2008 R2
ドメインの機能レベル:Windows Server 2008 R2
・既存ActiveDirectoryに2台目(BDC)のDCサーバとしてSAMBA4を導入する
フォレストの機能レベル | Windows Server 2008 R2 |
---|---|
ドメインの機能レベル | Windows Server 2008 R2 |
ドメイン名 | ad.hogehoge.jp |
NetBiosドメイン名 | ad |
1台目DCサーバIP | 172.20.1.203 |
1台目DCサーバ名 | dc01.ad.hogehoge.jp |
2台目DCサーバIP | 172.29.1.204 |
2台目DCサーバ名 | dc02.ad.hogehoge.jp |
SAMBA4のDC構築手順(2台目以降)
PDCがWindowsでもSAMBAでも、2台目以降のSAMBA4の構築手順は同じである。SAMBA4で2台目以降のDCサーバ構築前の事前作業
■不要パッケージを削除# yum remove samba-client samba-winbind samba-winbind-clients samba-common
# vi /etc/resolv.conf
#DC01(172.20.1.203) nameserver 172.20.1.203 domain=ad.hogehoge.jp※DNSサーバIPとドメイン名は環境に合わせて変更する
SAMB4インストール
■SAMB4の依存関係パッケージインストール# yum install gcc libacl-devel libblkid-devel gnutls-devel \ python-devel pkgconfig krb5-workstation zlib-devel libaio-devel \ policycoreutils-python libsemanage-python setools-libs-python \ setools-libs popt-devel libpcap-devel sqlite-devel libidn-devel \ libxml2-devel libsepol-devel keyutils-libs-devel \ cyrus-sasl-devel bind-utils
# cd /usr/local/src # wget http://ftp.samba.org/pub/samba/samba-latest.tar.gz
# tar zxvf samba-latest.tar.gz # cd samba-4.1.6/
# ./configure --prefix=/opt/app/samba4/ --enable-selftest
※赤字のインストール先は環境に合わせること。# make : Waf: Leaving directory `/usr/local/src/samba-4.1.6/bin' 'build' finished successfully (14m45.145s)
# make install : Waf: Leaving directory `/usr/local/src/samba-4.1.6/bin' 'install' finished successfully (3m12.883s)
# vi /etc/init.d/samba4Samba起動スクリプト作成内容はこちらを参照。
# vi /etc/yum.conf
[main] exclude=kernel* samba* bind-utils
SAMBA4のDC昇格
■kerberos関連設定# cp /etc/krb5.conf /etc/krb5.conf.org
# vi /etc/krb5.conf
[logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] default_realm = AD.HOGEHOGE.JP dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true [realms] AD.HOGEHOGE.JP = { kdc = dc01.ad.hogehoge.jp } [domain_realm] .ad.hogehoge.jp = AD.HOGEHOGE.JP ad.hogehoge.jp = AD.HOGEHOGE.JP※大文字小文字の区別があるので注意を!!
# kinit administrator@AD.HOGEHOGE.JP・エラーメモ
kinit(v5): Cannot resolve network address for KDC in requested realm while getting initial credentials | ドメインが存在しない |
---|---|
kinit(v5): Client not found in Kerberos database while getting initial credentials | ユーザーが存在しない |
kinit(v5): KDC reply did not match expectations while getting initial credentials | ドメインが小文字を指定している |
kinit(v5): Preauthentication failed while getting initial credentials | パスワードが違う |
kinit(v5): Clock skew too great while getting initial credentials | Linuxと ActiveDirectoryの DCの時刻が 5分以上ずれている |
# /etc/rc.d/init.d/samba4 start
# /opt/app/samba4/bin/samba-tool domain join ad.hogehoge.jp DC -U administrator --realm=AD.HOGEHOGE.JP Committing SAM database descriptor_sd_propagation_recursive: DC=DomainDnsZones,DC=ad,DC=hogehoge,DC=jp not found under DC=ad,DC=hogehoge,DC=jp descriptor_sd_propagation_recursive: DC=ForestDnsZones,DC=ad,DC=hogehoge,DC=jp not found under DC=ad,DC=hogehoge,DC=jp Sending DsReplicateUpdateRefs for all the replicated partitions Setting isSynchronized and dsServiceName Setting up secrets database Joined domain AD(SID S-1-5-xx-3469xxxxxx-26xxxxxxx-249xxxxxxxxx) as a DC※赤文字は環境に合わせて変更すること
# /opt/app/samba4/bin/smbclient -L localhost -U%
Domain=[AD] OS=[Unix] Server=[Samba 4.1.6] Sharename Type Comment --------- ---- ------- netlogon Disk sysvol Disk IPC$ IPC IPC Service (Samba 4.1.6) Domain=[AD] OS=[Unix] Server=[Samba 4.1.6] Server Comment --------- ------- Workgroup Master --------- -------
# /opt/app/samba4/bin/samba-tool drs showrepl■Samba4の自動起動設定
# chmod 755 /etc/init.d/samba4 # chkconfig --add samba4 # chkconfig --level 345 samba4 on
DC構築後の環境整備
■Samabサーバのリゾルバ設定# vi /etc/resolv.confnameserver 127.0.0.1 nameserver 172.20.1.203
・SAMBA4のDNS利用方法1
1つめは内部DNSの使用でSamba4にDNSサーバを取り込んだものでデフォルトではこの内部DNSが使用されます。この場合、特別な設定を実施せずともコンピュータやDCの名前解決ができます。また、DNSのゾーン情報はSamba4のデータベースに登録されるため別のDCにレプリケーションされます。これにより複数のサーバでDNSのゾーン情報を更新可能となります。
・SAMBA4のDNS利用方法2
2つ目の方法はBINDと連携する方法でこの場合、BINDを通常のDNSサーバとして設定しSamba4用のゾーン情報を追記すれば連携が可能となります。
# vi /opt/app/samba4/etc/smb.conf
[global] workgroup = AD realm = ad.hogehoge.jp netbios name = DC02 server role = active directory domain controller dns forwarder = 8.8.8.8
・設定反映# /etc/init.d/samba4 restart※8.8.8.8はGOOGLEのDNSサーバです。
# /opt/app/samba4/sbin/samba -b | grep NTP_SIGND_SOCKET_DIR NTP_SIGND_SOCKET_DIR: /opt/app/samba4/var/lib/ntp_signd
# chgrp ntp /opt/app/samba4/var/lib/ntp_signd
# vi /etc/ntp.conf
#NTP Server #アクセス許可 restrict 127.0.0.1 restrict 172.20.1.0 mask 255.255.255.0 restrict 172.20.2.0 mask 255.255.255.0 # 同期サーバとのアクセス許可 restrict 172.20.1.203 noquery restrict 133.100.11.8 noquery #同期するNTPServer指定 # DC01(172.20.1.203) server 172.20.1.203 # clock.tl.fukuoka-u.ac.jp server 133.100.11.8 ntpsigndsocket /opt/app/samba4/var/lib/ntp_signd restrict default mssntp includefile /etc/ntp/crypto/pw keys /etc/ntp/keys
# /etc/init.d/ntpd start # chkconfig ntpd on
# grep MS-SNTP /var/log/messages May 15 18:38:17 dc02 ntpd[25887]: MS-SNTP signd operations currently block ntpd degrading service to all clients. May 15 18:43:46 dc02 ntpd[25917]: MS-SNTP signd operations currently block ntpd degrading service to all clients.
ApacheのKerberos認証でAD認証連携させる
Apacheの基本認証にActiveDirectory(AD)のユーザ認証と連携する方法は2つあります。利用モジュール | mod_auth_kerb |
---|---|
メリット | Apache-ADサーバ間はKERBEROS経由を利用するため、パスワードが暗号化されます。 |
デメリット | KERBEROS認証の場合は、ActiveDirectory上の有効なユーザ全員が対象となり、ActiveDirectory上の特定OU内のユーザのみにすることは出来ないようです。 特定ユーザのみにする場合は「Require user」か、ユーザを列挙したファイルを用意して「Require group」を使用することになります。 Chromeブラウザからの認証は500エラーが発生する。(IE,FireFoxは正常にアクセスできることを確認) |
DCサーバ側作業
・事前作業
Apacheサーバ側作業
・mod_auth_kerbモジュールインストール
・krb5.confファイルの編集
・ApacheのAD連携設定
# yum install mod_auth_kerb
Windowsドメイン名 | ad.hoge.com |
---|---|
DC(ドメインコントローラ)サーバ | 192.168.2.4 |
# mkdir /var/log/krb5 ;chown apache /var/log/krb5
# vi /etc/krb5.conf
[logging] default = FILE:/var/log/krb5/krb5libs.log kdc = FILE:/var/log/krb5/krb5kdc.log admin_server = FILE:/var/log/krb5/kadmind.log [libdefaults] default_realm = AD.HOGE.COM dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true [realms] AD.HOGE.COM = { default_domain = ad.hoge.com kdc = 192.168.2.4:88 admin_server = 192.168.2.4:749 } [domain_realm] .ad.hoge.com = AD.HOGE.COM ad.hoge.com = AD.HOGE.COM※大文字小文字は重要です。
# kinit testapache@AD.HOGE.COM Password for testapache@AD.HOGE.COM:※何も表示されず終了すれば、成功!!
# vi /etc/httpd/conf/httpd.conf
LoadModule auth_kerb_module modules/mod_auth_kerb.so
Alias /krb5 /var/www/krb5
<Location /krb5>
AuthType Kerberos
AuthName "Kerberos Login(ActiveDirectory)"
KrbAuthRealms AD.HOGE.COM
KrbVerifyKDC Off
KrbServiceName HTTPS/webdav-01.web.hoge.com
KrbMethodNegotiate off
KrbSaveCredentials off
Require valid-user
Order deny,allow
Deny from none
Allow from all
</Location>
<Directory "/var/www/krb5">
Options -Indexes FollowSymLinks
Order allow,deny
Allow from all
</Directory>
KrbMethodNegotiate off
KrbSaveCredentials off