本家様 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がお勧め。もし予算が厳しいのでしたら、僭越ですがこのサイトをご活用頂ければ幸いです。

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

について記します。

方針

ActiveDirectoryを主催するホストは ad.chaperone.jp、で故にドメイン名は「chaperone.jp
ドメインは「.local」を使ってましたが、推奨が有効なトップレベル ドメイン (TLD) になりました. SSL証明書の観点からもまぁーそうなるね

DNSの運営方法はsamba内包の機能を使います. DNSのフォワード先は192.168.0.1です.
2022y05m02d_091913328.png
sambaはソースコードからコンパイルしてインストールします。

下準備

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

dnf groupinstall "Development Tools"
 
dnf install --enablerepo=devel 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 python3-devel readline-devel rpcgen systemd-devel \
      tar zlib-devel python3-markdown perl-JSON bind-utils dbus-devel xfsprogs-devel libicu-devel

/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.21.0/
[root@ad samba-4.21.0]# ./configure  --prefix=/opt/samba
[root@ad samba-4.21.0]# make

Step 3: Install Samba

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

もしsamba-adで作ったアカウントでadサイトにログインするなら下記が必要 アカウント管理のこのノードに作ったユーザをログインさせるかどうか

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

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

/lib64/libnss_winbind.so.2       --> 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の設定が楽になる. 既に稼働しているLinux計算機と融合するなら「--use-rfc2307」は必至かな. もし初手でsamba-adで用意するなら不要かなぁ. ridベースで作るから

[root@ad ~]# which samba-tool
/opt/samba/bin/samba-tool
[root@ad ~]#
[root@ad ~]# 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のログに続いてsamba-toolからのメッセージが表示される. 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-3431957931-1346180952-3236243850
[root@ad ~]#

*他の引数は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 ~]# mv /etc/krb5.conf /etc/krb5.conf.orig
[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 ~]# samba -i -M single
samba version 4.21.0 started.
Copyright Andrew Tridgell and the Samba Team 1992-2024
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 ~]# smbclient --version
Version 4.21.0
[root@ad ~]#
[root@ad ~]# smbclient -L ad.chaperone.jp -U%
 
        Sharename       Type      Comment
        ---------       ----      -------
        sysvol          Disk
        netlogon        Disk
        IPC$            IPC       IPC Service (Samba 4.21.0)
SMB1 disabled -- no workgroup available
[root@ad ~]#

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

[root@ad ~]# smbclient //ad.chaperone.jp/netlogon -Uadministrator
Password for [CHAPERONE\administrator]:
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Sun Sep 29 13:59:44 2024
  ..                                  D        0  Sun Sep 29 13:59:44 2024
 
                49729820 blocks of size 1024. 44873008 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 20.82.31.248
[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 で逆引きゾーンの追加が必要になる。

注意samba-ad内部で解決できない名前を他の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 Sun Nov 10 13:59:47 2024
 
[root@ad ~]# klist -e
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@CHAPERONE.JP
 
Valid starting       Expires              Service principal
09/29/2024 14:06:26  09/30/2024 00:06:26  krbtgt/CHAPERONE.JP@CHAPERONE.JP
        renew until 09/30/2024 14:06:22, 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 ~]#

上手く行っているみたい

*読みずらいので英語環境(LANG=C)で実行してます。日本語環境(LANG=ja_JP.UTF-8)でも構いません

Step 9: Configure NTP

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

[root@ad ~]# chronyc sources
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* ntp-a2.nict.go.jp             1   6    17    16   -361us[ -865us] +/- 3413us
[root@ad ~]#

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

[root@ad ~]# vi /etc/chrony.conf
 :
ntpsigndsocket  /opt/samba/var/lib/ntp_signd
 :
[root@ad ~]#

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

[root@ad ~]# id chrony
uid=987(chrony) gid=987(chrony) groups=987(chrony)
 
[root@ad ~]# chown -R 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」で表示されます.
ここではdnsmasqを全体のDNSとして使っているので少し調整を加えてます.

[root@ad ~]# cat /opt/samba/etc/smb.conf
[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」の既定値は下記になるが、
        #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
 
        #lastコマンドでsmb利用者を表示されたいなら「utmp=yes」を入れる
        utmp = yes
        #LDAPは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起動スクリプトを用意します。ここでは RockyLinux9 なのでsystemd向けのファイルを用意します。

[root@ad ~]# cd /opt/src/samba-4.21.0/
[root@ad samba-4.21.0]# find . -name *.service -exec ls -l {} \;
-rw-r--r--. 1 root root 484 Sep 29 13:33 ./bin/default/packaging/systemd/smb.service
-rw-r--r--. 1 root root 438 Sep 29 13:33 ./bin/default/packaging/systemd/nmb.service
-rw-r--r--. 1 root root 419 Sep 29 13:33 ./bin/default/packaging/systemd/winbind.service
-rw-r--r--. 1 root root 440 Sep 29 13:33 ./bin/default/packaging/systemd/samba.service
-rw-r--r--. 1 root root 490 Sep 29 13:33 ./bin/default/packaging/systemd/samba-bgqd.service
[root@ad samba-4.21.0]#

service稼働に読み込まれる設定ファイル(samba.sysconfig)を/etc/sysconfig/sambaとして、PIDは/run/samba/samba.pidとします

[root@ad samba-4.21.0]# cp bin/default/packaging/systemd/samba.service /etc/systemd/system/samba.service
[root@ad samba-4.21.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                    <-- 修正「/opt/samba/var/run/samba.pid」から
LimitNOFILE=16384
EnvironmentFile=/etc/sysconfig/samba            <-- 修正「-/opt/samba/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.21.0]#
[root@ad samba-4.21.0]# cp packaging/systemd/samba.sysconfig /etc/sysconfig/samba
 
[root@ad samba-4.21.0]# cat /etc/sysconfig/samba
## Path:           Network/Samba
## Description:    Samba process options
## Type:           string
## Default:        ""
## ServiceRestart: samba
SAMBAOPTIONS=""
## Type:           string
## Default:        ""
## ServiceRestart: smb
SMBDOPTIONS=""
## Type:           string
## Default:        ""
## ServiceRestart: nmb
NMBDOPTIONS=""
## Type:           string
## Default:        ""
## ServiceRestart: winbind
WINBINDOPTIONS=""
 
[root@ad samba-4.21.0]# echo "d /run/samba  755 root root" > /etc/tmpfiles.d/samba.conf
[root@ad samba-4.21.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/」を実行する

現在までに「Step 5: Starting Samba」で起動しているsambaプロセスがあるならCtrl+Cで止める

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

[root@ad ~]# systemctl daemon-reload
[root@ad ~]# systemctl list-unit-files --type=service | grep samba
samba.service                              disabled        disabled
 
[root@ad ~]# systemctl enable samba.service --now
(動作確認)
 
[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
最新の60件
2024-10-11 2024-10-10 2024-10-09 2024-10-08 2024-10-06 2024-10-05 2024-10-04 2024-10-03 2024-10-02 2024-10-01 2024-09-30 2024-09-29
  • samba
2024-09-28 2024-09-27 2024-09-22 2024-09-20 2024-09-17 2024-09-12 2024-09-09 2024-09-08 2024-09-06 2024-09-05 2024-09-04 2024-09-02 2024-09-01 2024-08-31 2024-08-28 2024-08-18 2024-08-17 2024-08-16 2024-08-15 2024-08-14 2024-08-11

edit


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2024-09-29 (日) 15:03:52