本家様 https://wiki.samba.org/index.php/Main_Page

samba-4.0からWindowsServerのActiveDirectoryの機能が提供されている。
だが、別にそれを使わなくても従来からのファイル共有は行えて、ボリュームシャドーコピーといった便利な機能が使えます。
*samba4だからADの構築が必須ではないです。

windowsとLinux、MacOSXらのアカウント管理を費用を掛けずに一元管理したいならこのsamba-4.xのAD機能は有効かも。
でも人件費を考えれば、素直にMS様のwindows serverを用意された方が安く済むし「訊けます」
研究室なら安価なwindows serverがお勧め。もし予算が厳しいのでしたら、僭越ですがこのサイトをご活用頂ければ幸いです。

ここでは RockyLinux8 に samba-4.x.yをインストールして

  • ActiveDirectoryドメインコントローラによるアカウント・マシン管理
  • SMBによるwindowsファイル共有、ボリュームシャドーコピー
  • 簡単なログオンスクリプト、グループポリシー付与
  • MacOSXとのNFS接続

について記します。

方針

ActiveDirectoryを主催するホストは ad.chaperone.jp、で故にドメイン名は「chaperone.jp」
DNSの運営方法はsamba内包の機能を使います. DNSのフォワード先は192.168.0.1です.
2022y05m02d_091913328.png
sambaはソースコードからコンパイルしてインストールします。

下準備

RockyLinux8 を最小構成で構築して開発環境の他、samba開発元側で提示しているパッケージをインストールします
参照先 https://wiki.samba.org/index.php/Package_Dependencies_Required_to_Build_Samba
なので

dnf groupinstall "Development Tools"
 
dnf install epel-release
dnf install docbook-style-xsl gcc gdb gnutls-devel gpgme-devel jansson-devel \
    keyutils-libs-devel krb5-workstation libacl-devel libaio-devel \
    libarchive-devel libattr-devel libblkid-devel libtasn1 libtasn1-tools \
    libxml2-devel libxslt lmdb-devel openldap-devel pam-devel perl \
    perl-ExtUtils-MakeMaker perl-Parse-Yapp popt-devel python3-cryptography \
    python3-dns python3-gpg python36-devel readline-devel rpcgen systemd-devel \
    tar zlib-devel --enablerepo=powertools,epel
dnf install dbus-devel
dnf --enablerepo=powertools install python3-markdown
dnf install perl-JSON
 
dnf install bind-utils

/etc/hostsファイルは下記の様に調整します。

[root@ad ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain
192.168.0.131 ad.chaperone.jp ad
 
[root@ad ~]# hostnamectl set-hostname ad.chaperone.jp

/etc/resolv.conf は直接編集せずnmtui経由で調整します あるいは nmcli コマンド経由で
注意自分自身がDNSサーバになるので 192.168.0.131 あるいは 127.0.0.1
2022y05m02d_095014192.png
その後OS再起動、もしくはnmcli を再起動すれば反映される. 「nmcli connection down <nic device>; nmcli connection up <nic device>」

[root@ad ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search chaperone.jp
nameserver 127.0.0.1
nameserver 192.168.0.1
[root@ad ~]#

Step 1: Download Samba

ソースを取得します。

[root@ad ~]# mkdir -p /opt/src && cd /opt/src
[root@ad src]# curl -O https://download.samba.org/pub/samba/samba-latest.tar.gz

Step 2: Compile Samba

https://wiki.samba.org/index.php/Build_Samba_from_Sourceを参考に

[root@ad src]# tar -xf samba-latest.tar.gz
[root@ad src]# cd samba-4.16.0/
[root@ad samba-4.16.0]# ./configure  --prefix=/opt/samba
[root@ad samba-4.16.0]# make

Step 3: Install Samba

[root@ad samba-4.16.0]# make install
[root@ad samba-4.16.0]# echo "export PATH=/opt/samba/bin:/opt/samba/sbin:$PATH" >> $HOME/.bashrc

もしsamba-adで作ったアカウントでsamba-adにログインするなら下記が必要

[root@ad samba-4.16.0]# ( cd /lib64 ; ln -sv /opt/samba/lib/libnss_win* .)
[root@ad samba-4.16.0]# ( cd /lib64/security ; ln -sv /opt/samba/lib/security/pam_winbind.so . )

その際は、dnf install/updateでsamba関係がインストールされないように /etc/yum.conf の調整が必要です
パスの影響は無視して、ファイル名が被るものは

/lib64/libnss_winbind.so         --> samba-winbind-modules
/lib64/libnss_winbind.so.2       --> samba-winbind-modules
/lib64/libnss_wins.so            --> samba-winbind-modules
/lib64/libnss_wins.so.2          --> samba-winbind-modules
/lib64/security/pam_winbind.so   --> samba-winbind-modules

なので、基本 samba-winbind-modules をdnf updateの際に適用されないようにする

[root@ad ~]# vi /etc/yum.conf
[main]
  :
exclude=samba-winbind-modules
[root@ad ~]#

*ただし、他のパッケージのインストールでこの「samba-winbind-modules」が要求されると、エラーになる可能性があります

Step 4: Provision Samba

「--use-rfc2307」を忘れずに. これでuid/gidの設定が楽になる.

[root@ad ~]# /opt/samba/bin/samba-tool domain provision --use-rfc2307 --interactive
Realm [CHAPERONE.JP]:
Domain [CHAPERONE]:
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.0.1
Administrator password:
Retype password:
(略
(途中、python3のログに続いてメッセージが表示される。python3のログが邪魔すぎる)
Fixing provision GUIDs
A Kerberos configuration suitable for Samba AD has been generated at /opt/samba/private/krb5.conf
Merge the contents of this file with your system krb5.conf or replace it with this one. Do not create a symlink!
Setting up fake yp server settings
Once the above files are installed, your Samba AD server will be ready to use
Server Role:           active directory domain controller
Hostname:              ad
NetBIOS Domain:        CHAPERONE
DNS Domain:            chaperone.jp
DOMAIN SID:            S-1-5-21-541682709-1438549615-2243905436
[root@ad ~]#

ここでBIND9_DLZを選ぶならsamba/DNSを参照してください
*他の引数はsamba-tool domain provision --help を参照
再度provisionを行うなら、設定ファイルらを予め削除してから行う事

[root@ad ~]# rm -rf /opt/samba/private/*
[root@ad ~]# rm -rf /opt/samba/etc/smb.conf

次に、上記provisionの際に指摘されたように「krb5.conf」ファイルを差し替えます。

[root@ad ~]# cp /opt/samba/private/krb5.conf /etc/krb5.conf
 
(中身はこんな感じ)
[root@ad ~]# cat /etc/krb5.conf
[libdefaults]
        default_realm = CHAPERONE.JP
        dns_lookup_realm = false
        dns_lookup_kdc = true
 
[realms]
CHAPERONE.JP = {
        default_domain = chaperone.jp
}
 
[domain_realm]
        ad = CHAPERONE.JP
[root@ad ~]#

Step 5: Starting Samba

シングルモードでテスト実行を行う
ほかのモードについてはここを参照 https://wiki.samba.org/index.php/Samba_server_process_model

[root@ad ~]# /opt/samba/sbin/samba -i -M single
samba version 4.16.0 started.
Copyright Andrew Tridgell and the Samba Team 1992-2022
binary_smbd_main: samba: using 'single' process model
Attempting to autogenerate TLS self-signed keys for https for hostname 'AD.chaperone.jp'
TLS self-signed keys generated OK

*もしここで「stream_setup_socket: Failed to listen on 0.0.0.0:53 - NT_STATUS_ADDRESS_ALREADY_ASSOCIATED」と出たらそれはlibvrtd関連のdnsmasqが動いているから。libvirtdを止めて再起動すれば回避可能. あと「lsof -i:53」とかでも確認する
「systemctl stop systemd-resolved」とかも

あと

/opt/samba/sbin/samba_dnsupdate: Traceback (most recent call last):
/opt/samba/sbin/samba_dnsupdate:   File "/opt/samba/sbin/samba_dnsupdate", line 57, in <module>
/opt/samba/sbin/samba_dnsupdate:     import dns.resolver
/opt/samba/sbin/samba_dnsupdate: ModuleNotFoundError: No module named 'dns'
dnsupdate_nameupdate_done: Failed DNS update with exit code 1

と表記されたら「python3-dns.noarch」をインストールする
*CentOS7ならpython36-dns

このまま動かしておいて、別のターミナルから

Step 6: Testing Samba

別ターミナルを立ち上げて自分自身にアクセスしてみます。

[root@ad ~]# /opt/samba/bin/smbclient --version
Version 4.16.0
[root@ad ~]#
[root@ad ~]# /opt/samba/bin/smbclient -L ad.chaperone.jp -U%
 
        Sharename       Type      Comment
        ---------       ----      -------
        sysvol          Disk
        netlogon        Disk
        IPC$            IPC       IPC Service (Samba 4.16.0)
SMB1 disabled -- no workgroup available
[root@ad ~]#

さらにnetlogon共有ドライブへアクセスしてみます。

[root@ad ~]# /opt/samba/bin/smbclient //ad.chaperone.jp/netlogon -Uadministrator
Password for [CHAPERONE\administrator]:
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Mon May  2 10:51:31 2022
  ..                                  D        0  Mon May  2 10:51:35 2022
 
                13619200 blocks of size 1024. 10066932 blocks available
smb: \> pwd
Current directory is \\ad.chaperone.jp\netlogon\
smb: \> quit
[root@ad ~]#

Step 7: Testing internal DNS

名前解決が正しく行われているかを確認する

[root@ad ~]# host -t SRV _ldap._tcp.chaperone.jp.
_ldap._tcp.chaperone.jp has SRV record 0 100 389 ad.chaperone.jp.
 
[root@ad ~]# host -t SRV _kerberos._udp.chaperone.jp.
_kerberos._udp.chaperone.jp has SRV record 0 100 88 ad.chaperone.jp.
 
[root@ad ~]# host -t A ad.chaperone.jp.
ad.chaperone.jp has address 192.168.0.131
 
[root@ad ~]# host -t A www.fujitsu.co.jp
www.fujitsu.co.jp has address 80.70.171.77
 
[root@ad ~]#

内部も、外部も名前解決はできている。

provisionの際にsamba内蔵DNSで作られるゾーンは正引き(chaperone.jp)のみで、その逆引きは登録されない。そのため

[root@ad ~]# host 192.168.0.131
131.0.168.192.in-addr.arpa has no PTR record
[root@ad ~]#

となる。逆引きが必要なら samba-tool で逆引きゾーンの追加が必要になる。

注意samba4内部で解決できない名前解決要求を別のDNSへ回すforwarder設定は、step4のprovisionの際に定義している。
この定義値は、smb.confの[global]セクション内で記述されている。修正が必要ならこの値を変更する。

[root@ad ~]# grep "dns forwarder" /opt/samba/etc/smb.conf
        dns forwarder = 192.168.0.1
[root@ad ~]#

Step 8: Configure Kerberos

別ターミナルでkerberosチケット受領後のDNS動的更新を行ってみる. まずはチケットを貰います

[root@ad ~]# LANG=C kinit administrator@CHAPERONE.JP
Password for administrator@CHAPERONE.JP:
Warning: Your password will expire in 41 days on Mon Jun 13 10:56:49 2022
 
[root@ad ~]# klist -e
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@CHAPERONE.JP
 
Valid starting       Expires              Service principal
05/02/2022 15:07:42  05/03/2022 01:07:42  krbtgt/CHAPERONE.JP@CHAPERONE.JP
        renew until 05/03/2022 15:07:37, Etype (skey, tkt): aes256-cts-hmac-sha1-96, aes256-cts-hmac-sha1-96
 
[root@ad ~]#

c200.chaperone.jp(192.168.0.200) を追加してみる. これはsamba-adのDNSへの操作になります

[root@ad ~]# nsupdate -g
> 
> update add c200.chaperone.jp 100 in a 192.168.0.200
> send
; TSIG error with server: tsig verify failure
> quit
[root@ad ~]# host c200.chaperone.jp
c200.chaperone.jp has address 192.168.0.200
 
[root@ad ~]# nsupdate -g
>
> update delete c200.chaperone.jp
> send
; TSIG error with server: tsig verify failure
> quit
[root@ad ~]# host c200.chaperone.jp
Host c200.chaperone.jp not found: 3(NXDOMAIN)
 
[root@ad ~]#

どうやらsamba-4.16.0では削除もできるみたい 以前のバージョンでは追加はできたけど、削除ができなかった

*読みずらいので英語環境(LANG=C)で実行してます。日本語環境(LANG=ja_JP.UTF-8)でも構いません
*; TSIG error with server: tsig verify failure」はinternal DNSを使うと表示されるバグみたい。DNSを外部のBINDとかに任せると解消するそうな

Step 9: Configure NTP

RockyLinux8 の時計合わせはchronyがデフォルトのご様子。
ここではそのままchronyを使います. ntpサーバ先を「ntp.nict.jp」にしていると

[root@ad ~]# chronyc sources
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^- ntp-a3.nict.go.jp             1   6    17     3  -1146us[-1146us] +/- 3564us
^* ntp-k1.nict.jp                1   6    17     4  -4639ns[ +593us] +/- 6944us
^- ntp-b3.nict.go.jp             1   6    17     3   -218us[ -218us] +/- 2283us
^- ntp-b2.nict.go.jp             1   6    17     3   -206us[ -206us] +/- 2638us
[root@ad ~]#

とか表示されいると思います. ntpの参照先はそれとしてsamba-ad向けに「/etc/chrony.conf」を修正します
参照先 https://wiki.samba.org/index.php/Time_Synchronisation

[root@ad ~]# vi /etc/chrony.conf
keyfile /etc/chrony.keys
driftfile /var/lib/chrony/drift
logdir /var/log/chrony
maxupdateskew 100.0
hwclockfile /etc/adjtime
rtcsync
makestep 1.0 3
bindcmdaddress 192.168.0.131
pool ntp.nict.jp iburst
allow 192.168.0.0/24
ntpsigndsocket  /opt/samba/var/lib/ntp_signd
 
[root@ad ~]#

そしてsocketの所有権を変更します

[root@ad ~]# id chrony
uid=995(chrony) gid=992(chrony) groups=992(chrony)
[root@ad ~]# chown root:chrony /opt/samba/var/lib/ntp_signd/
[root@ad ~]# chmod 750         /opt/samba/var/lib/ntp_signd/
[root@ad ~]# systemctl restart chronyd

Step 10: Configure smb.conf

一応、Step 4: Provision Sambaの際にテンプレートが /opt/samba/etc/smb.conf に用意される
こちらは既定のパラメータは表示されていなく「testparm -v」で全てのパラメータが表示されます.

これてに修正を施す。

[root@ad ~]# cat /opt/samba/etc/smb.conf
# Global parameters
[global]
        dns forwarder = 192.168.0.1
        netbios name = AD
        realm = CHAPERONE.JP
        server role = active directory domain controller
        workgroup = CHAPERONE
        idmap_ldb:use rfc2307 = yes
 
        server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdate, dns
        # 「dns」をdnsmasqで提供していれば「dnsupdate, dns」は削除します
        #server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdate
 
        # lastコマンドでsmb利用者が見えます「utmp=yes」
        utmp = yes
        #ldapsで通常お話しますが、暗号化なしのldapで行うなら「ldap server require strong auth = no」とします
        #ldap server require strong auth = no
        #kerberos method = secrets and keytab
 
[sysvol]
        path = /opt/samba/var/locks/sysvol
        read only = No
 
[netlogon]
        path = /opt/samba/var/locks/sysvol/chaperone.jp/scripts
        read only = No
 
[root@ad ~]#

*samba-ad機能に特化させるので[homes]設定は行いません.

Step 11: Configure samba.service

samba起動スクリプトを用意します。ここでは RockyLinux8 なのでsystemd向けのファイルを用意します。

[root@ad ~]# cd /opt/src/samba-4.16.0/
[root@ad samba-4.16.0]# find . -name *.service -exec ls -l {} \;
-rw-rw-r--. 1 root root 401 Jan 24 19:26 ./ctdb/config/ctdb.service
-rw-r--r--. 1 root root 484 May  2 10:21 ./bin/default/packaging/systemd/smb.service
-rw-r--r--. 1 root root 438 May  2 10:21 ./bin/default/packaging/systemd/nmb.service
-rw-r--r--. 1 root root 419 May  2 10:21 ./bin/default/packaging/systemd/winbind.service
-rw-r--r--. 1 root root 440 May  2 10:21 ./bin/default/packaging/systemd/samba.service
 
[root@ad samba-4.16.0]#

service稼働に読み込まれる設定ファイル(samba.sysconfig)を、/etc/sysconfig/sambaとして、samba.serviceは下記のようにした。

[root@ad samba-4.16.0]# cp bin/default/packaging/systemd/samba.service /etc/systemd/system/samba.service
 
(samba.serviceを修正)
[root@ad samba-4.16.0]# vi /etc/systemd/system/samba.service
 
[Unit]
Description=Samba AD Daemon
Documentation=man:samba(8) man:samba(7) man:smb.conf(5)
Wants=network-online.target
After=network.target network-online.target
 
[Service]
Type=notify
PIDFile=/run/samba/samba.pid
LimitNOFILE=16384
EnvironmentFile=/etc/sysconfig/samba
ExecStart=/opt/samba/sbin/samba --foreground --no-process-group $SAMBAOPTIONS
ExecReload=/bin/kill -HUP $MAINPID
 
 
[Install]
WantedBy=multi-user.target
 
[root@ad samba-4.16.0]#
[root@ad samba-4.16.0]# cp packaging/systemd/samba.sysconfig /etc/sysconfig/samba
 
[root@ad samba-4.16.0]# echo "d /run/samba  755 root root" > /etc/tmpfiles.d/samba.conf
[root@ad samba-4.16.0]# /usr/bin/systemd-tmpfiles --create /etc/tmpfiles.d/samba.conf

留意 PIDFile は、/run/samba/samba.pid とした。

*SELinuxを有効にしているなら「chcon -R -t bin_t /opt/samba/sbin/」を実行する

その後、新しいUnitなのでsystemdで読み込んで起動時に起動させるように手配後、起動する。

[root@ad ~]# systemctl daemon-reload
[root@ad ~]# systemctl list-unit-files --type=service | grep samba
samba.service                              disabled
[root@ad ~]# systemctl enable samba.service

現在までに「Step 5: Starting Samba」で起動しているsambaプロセスがあるならCtrl+Cで止める。
それから下記を実行します。

[root@ad ~]# systemctl start samba.service
 
[root@ad ~]# journalctl -f -u samba --full -e

journalctl とかで正常に動いているかを確認します。

これでインストールと起動は完了。次はユーザ作成

firewall-cmd

firewallが有効なら下記を設定して外部からのアクセスを許容させます. 「/usr/lib/firewalld/services/samba-dc.xml」が該当品で、firewalldパッケージに含まれている

[root@c ~]# firewall-cmd --add-service={samba-dc,ntp} --permanent
[root@c ~]# firewall-cmd --reload

トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2022-05-03 (火) 18:15:47 (19d)