今日のお話
つい最近、ファイルサーバを新しくした のですけど、旧ファイルサーバではSamba36と連携しているOpenLDAPも動いてるのでこれの移行もする必要があった。
と言ってもコールドスタンバイな移行なので、BDBからMDBへの変更も特に意識する必要は無くて、結果的にはFreeBSD 10-RELEASEにOpenLDAPをSamba連携するように入れ直す程度。
なんか既に記憶とメモが曖昧だけど…まぁ、ね。
ではゴー。
やること
- OpenLDAPサーバのインストール
- Samba42のインストール
- OpenLDAPのバックアップ取得とデータの移行
- グループのためにPAM対応(ついでにSSHも)
- おしまい
簡単そう!
OpenLDAPサーバのインストール
まぁ大体こんな感じです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
# pkg install openldap-server
# sysrc slapd_enable="YES"
# sysrc slapd_flags="-h 'ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://0.0.0.0/'"
# sysrc slapd_sockets="/var/run/openldap/ldapi"
# pkg install -y curl
# curl -o /usr/local/etc/openldap/schema/samba.schema "https://git.samba.org/samba.git/?p=samba.git;a=blob_plain;f=examples/LDAP/samba.schema"
# vi /usr/local/etc/openldap/slapd.conf
include /usr/local/etc/openldap/schema/core.schema
include /usr/local/etc/openldap/schema/corba.schema
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/inetorgperson.schema
include /usr/local/etc/openldap/schema/nis.schema
include /usr/local/etc/openldap/schema/misc.schema
include /usr/local/etc/openldap/schema/openldap.schema
include /usr/local/etc/openldap/schema/samba.schema
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args
modulepath /usr/local/libexec/openldap
moduleload back_mdb
access to attrs=userPassword,sambaLMPassword,sambaNTPassword
by self write
by users read
by anonymous auth
access to *
by self write
by users read
by anonymous read
database mdb
maxsize 1073741824
suffix "dc=example,dc=net"
rootdn "cn=root,dc=example,dc=net"
rootpw secret
directory /var/db/openldap-data
index default pres,eq
index objectClass
index uid,uidNumber
index cn
index memberUid,gidNumber
index sambaSID
index sambaGroupType
index sambaSIDList
index sambaDomainName
index member
index uniqueMember
# service slapd start
|
Samba42のインストール
まず、古いSambaサーバと同名で作る場合は、古いファイルサーバのSIDの変更を合わせて実行しておきます
1
2
3
4
5
6
7
8
|
(old)# service samba stop
(old)# net getlocalsid
SID for domain REMILIA is: S-1-5-21-1337328856-2773713346-4051707553
(old)# hostname remilia_old
(old)# sysrc hostname="remilia_old.example.net"
(old)# net getlocalsid
SID for domain REMILIA_OLD is: S-1-5-21-2186846296-1789796161-3191077940
(old)# service samba start
|
で、新しい方にSamba42をインストール
1
2
3
4
5
6
7
8
9
10
11
12
13
|
(new)# pkg install samba42
(new)# vi /usr/local/etc/smb4.conf
<前略>
passdb backend = ldapsam:ldap://localhost
ldap suffix = dc=example,dc=net
ldap admin dn = cn=root,dc=example,dc=net
ldap ssl = no
ldap user suffix = ou=users
ldap group suffix = ou=groups
<以下略>
(new)# sysrc samba_server_enable="YES"
(new)# service samba_server start
(new)# smbpasswd -W
|
OpenLDAPのバックアップ取得とデータの移行
これは適当に吐き出させれば良い。
個人環境なので普通に常用しているまま出力。
1
|
(old)# slapcat > ldap-backup.ldif
|
次に、新しいSambaサーバのSIDを取得
1
2
|
# slapcat | grep sambaSID
sambaSID: S-1-5-21-120019609-1632863270-3876271938
|
で、これに置換
1
2
3
4
5
6
7
8
|
(new)# service samba_server stop
(new)# service slapd stop
(new)# rm /var/db/openldap-data/*
(new)# vi ldap-backup.ldif
// ここで、旧SIDを新SIDに全置換
(new)# slapadd -l ldap-backup.ldif
(new)# service slapd start
(new)# service samba_server start
|
Tip
こういう機会に ldap-backup.ldif のdcとかを変更してから slapadd してやれば組織名の調整とかもできますね。
ただし、この時点では、少なくともグループ名を取得することが出来ず、こんな感じになっちゃう
1
2
3
4
|
# pdbedit -L
root:0:root
nobody:65534:nobody
test_user:4294967295:test_user
|
グループのためにPAM対応(ついでにSSHも)
まずはSambaでグループがちゃんと認識できるようにする。
ざっと流す。
1
2
3
4
5
6
7
8
9
10
11
12
|
# pkg install pam_ldap nss_ldap
# vi /etc/nsswitch.conf
group: files ldap
passwd: files ldap
# cd /usr/local/etc/
# ln -s nss_ldap.conf ldap.conf
# vi nss_ldap.conf
host 127.0.0.1
base dc=example,dc=net
pam_filter objectclass=posixAccount
bind_policy soft
# service samba_server restart
|
これで見えるはず
1
2
3
4
|
# pdbedit -L
root:0:root
nobody:65534:nobody
test_user:12001:test_user
|
他にも、 getent passwd
とか getent group
辺りで確認しておいても良い。
SSHもPAM対応
ハンドブック https://www.freebsd.org/doc/en/articles/ldap-auth/article.html に従って追加する。
1
2
3
4
5
6
7
8
9
10
|
# vi /etc/pam.d/sshd
auth sufficient pam_opie.so no_warn no_fake_prompts
auth requisite pam_opieaccess.so no_warn allow_local
#auth sufficient pam_krb5.so no_warn try_first_pass
#auth sufficient pam_ssh.so no_warn try_first_pass
auth sufficient /usr/local/lib/pam_ldap.so no_warn
auth required pam_unix.so no_warn try_first_pass
account required pam_login_access.so
account required /usr/local/lib/pam_ldap.so no_warn ignore_authinfo_unavail ignore_unknown_user
|
あとはSSHでLDAPユーザを対象に色々制限をかければいい。
例えばこんな感じ
1
2
3
4
5
6
7
|
# vi /etc/ssh/sshd_config
Match User test_user
ChrootDirectory /var/home/test_user
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
# service sshd restart
|
おしまい
まぁそういうわけでした(雑)