下図のように別のネットワーク(private.local)に存在するADでLinuxPC/MacOSX のアカウント管理を行いたい。
間には、NATルータが存在している。
素直に LinuxPC/MacOSX をsybyl.localに存在したまま、private.localのADドメインに参加させればいいのだが、
それはNATのため kerberosの仕様的に無理みたい。
なのでNATルータ(pfsense)にLDAPのポートフォワードを適用させ、NATルータをLDAPサーバに見立てた(sybyl.local側から見て)。
基本的にSAMBA ActiveDirectoryをLDAPサーバとして使用する感じでしょうか
MacOSXの場合samba/LDAP/MacOSX
NAT越しのNFS設定router/NFS
samba/LDAP/smb
「Firewall」-->「NAT」-->「PortForward」ページにて、下記のようにポートフォワードを用意する
*LDAPのport 389に穴を開けます
*pfsenseの設定なのだが、WAN側(sybyl.local)からpfsense「This Firewall」へのport386は、10.10.0.102のport386へ転送させている
方法はhttps://wiki.samba.org/index.php/Nslcdに記載されている。
ここでは、ADサーバに仲介役のユーザを設けて、そのユーザを使う方法「Method 1: Connecting to AD via Bind DN and password」を使用する。
注意
CVE-2016-2112でsambaのLDAP通信が脆弱と指摘され、
ldap server require strong auth = yes
が定義された。これで既定で署名されたあるいは暗号化された通信になったのだが、以下に示す方法を用いて
samba(LDAP)と繋ぐとエラーになります。なのでこのオプションをnoとしてsambaを動かしてます。
*いずれば tls とかで対処すべきなのだが、規模次第かなって思う
[root@ad ~]# /opt/samba/bin/samba-tool user add ldap-connect --random-password --description="LDAP接続ユーザ"
[root@ad ~]# /opt/samba/bin/samba-tool user setpassword ldap-connect --newpassword=ldap
[root@ad ~]# /opt/samba/bin/samba-tool user setexpiry ldap-connect --noexpiry
これでユーザ「ldap-connect」、パスワード「ldap」なる"LDAP接続ユーザ"が作成された。
参照先: https://alfa.faqserv.com/pukiwiki/?Linux/RHEL8/LDAP%E8%AA%8D%E8%A8%BC https://tylersguides.com/guides/configuring-ldap-authentication-on-centos-8/
「nss-pam-ldapd」と「nscd」パッケージをインストールして、authselect向けの「nslcd」プロファイルを作成する.
dnf install nss-pam-ldapd nscd
cp -Rp /usr/share/authselect/default/sssd /etc/authselect/custom/nslcd
cd /etc/authselect/custom/nslcd
sed -i 's/sss/ldap/g' fingerprint-auth
sed -i 's/sss/ldap/g' password-auth
sed -i 's/sss/ldap/g' smartcard-auth
sed -i 's/sss/ldap/g' system-auth
sed -i 's/sss/ldap/g' nsswitch.conf
sed -i 's/SSSD/NSLCD/g' REQUIREMENTS
echo "Enable nslcd for system authentication" > README
cp /etc/nslcd.conf /etc/nslcd.conf.orig
sed '/^#/d' /etc/nslcd.conf.orig | sed '/^$/d' > /etc/nslcd.conf
「/etc/nslcd.conf」を修正
uid nslcd
gid ldap
uri ldap://192.168.0.72/
base dc=private,dc=local
ssl no
tls_cacertdir /etc/openldap/cacerts
pagesize 1000
referrals off
filter passwd (objectClass=user)
filter group (objectClass=group)
map passwd uid sAMAccountName
map passwd homeDirectory unixHomeDirectory
map passwd gecos displayName
map passwd gidNumber gidNumber
map group cn msSFU30Name
map group gidNumber gidNumber
binddn cn=ldap-connect,cn=Users,dc=private,dc=local <-- 「binddn ldap-connect@private」でも可
bindpw ldap
mkdir /etc/openldap/cacerts
systemctl enable nslcd
systemctl restart nslcd
authselect select custom/nslcd --force
「nss-pam-ldapd」と「nscd」パッケージをインストールします。
[root@c101 ~]# yum install nss-pam-ldapd nscd
そして「authconfig-tui」でLDAPを有効にさせて
LDAPの設定は下記のようにします。
ですが、このままだとsssdがLDAP(AD)との中継に入ります。ここではsssdではなくnscdを使いたいので
[root@c101 ~]# authconfig --enableforcelegacy --disablesssd --enablemkhomedir --update
を実行します。これでnslcdが稼働します。
そして設定ファイル「/etc/nslcd.conf」を修正してADの仲介役ユーザで認証を行わせます。
[root@c101 ~]# cp /etc/nslcd.conf /etc/nslcd.conf.orig
[root@c101 ~]# sed '/^#/d' /etc/nslcd.conf.orig | sed '/^$/d' > /etc/nslcd.conf
[root@c101 ~]# vi /etc/nslcd.conf
uid nslcd
gid ldap
uri ldap://192.168.0.72/
base dc=private,dc=local
ssl no
tls_cacertdir /etc/openldap/cacerts
pagesize 1000
referrals off
filter passwd (objectClass=user)
filter group (objectClass=group)
map passwd uid sAMAccountName
map passwd homeDirectory unixHomeDirectory
map passwd gecos displayName
map passwd gidNumber gidNumber
map group cn msSFU30Name
map group gidNumber gidNumber
binddn cn=ldap-connect,cn=Users,dc=private,dc=local
bindpw ldap
[root@c101 ~]# chmod 600 /etc/nslcd.conf
[root@c101 ~]# systemctl restart nslcd
*参照サイトにはpasswdのgidNumberをprimaryGroupIDにしているが正しく取れないので、gidNumberへ変更
*あとgroupのcn、gidNumberも修正してます
*authconfigで修正なら下記のようになるかな
[root@c101 ~]# authconfig --enableldap --enableldapauth --ldapserver="192.168.0.72" \
--ldapbasedn="dc=private,dc=local" --disableldaptls --enableforcelegacy --disablesssd --enablemkhomedir --update
(それでも/etc/nslcd.confの修正は必要です)
[root@c101 ~]# systemctl restart nslcd
*nslcd.serviceは自動的にenableになるみたい
もし「ldap_result() failed: Can't contact LDAP server」がmessageに表示されるようなら
「/etc/nslcd.conf」に下記を加える
idle_timelimit 240
「pam_ldap」「nss-pam-ldapd」「nscd」パッケージが必要
[root@c102 ~]# yum install pam_ldap nss-pam-ldapd nscd
インストール後に
LDAPからユーザ情報を入手するnss-pam-ldapdの設定ファイル /etc/nslcd.conf
と
LDAPでユーザ認証するpam_ldapの設定ファイル /etc/pam_ldap.conf
をそれぞれ修正します。
uid nslcd
gid ldap
uri ldap://192.168.0.72
base dc=private,dc=local
pagesize 1000
referrals off
filter passwd (objectClass=user)
filter group (objectClass=group)
map passwd uid sAMAccountName
map passwd homeDirectory unixHomeDirectory
map passwd gecos displayName
map passwd gidNumber gidNumber
map group cn msSFU30Name
map group gidNumber gidNumber
binddn cn=ldap-connect,cn=Users,dc=private,dc=local
bindpw ldap
ssl no
base dc=private,dc=local
binddn cn=ldap-connect,cn=Users,dc=private,dc=local
bindpw ldap
bind_policy soft
pam_login_attribute sAMAccountName
uri ldap://192.168.0.72/
ssl no
そしてauthconfigで認証・ユーザ情報取得を変更します。nslcdが自動的に起動しますが、再起動時自動稼動にします。
[root@c102 ~]# authconfig --enableldap --enableldapauth --ldapserver="192.168.0.72" \
--ldapbasedn="dc=private,dc=local" --disableldaptls --update
[root@c102 ~]# chkconfig nslcd on
これでOK
参考:https://wiki.samba.org/index.php/Nslcd
samba-adをLDAPサーバと見做して、ldapクライアントを作ってみる
rockylinux9はnslcdは提供していないので sssd 経由で作るしかない.
[root@rockylinux9 ~]# dnf install sssd-ldap
[root@rockylinux9 ~]# vi /etc/sssd/sssd.conf
[sssd]
services = nss, pam
domains = chaperone.jp
[nss]
[domain/chaperone.jp]
id_provider = ldap
ldap_uri = ldaps://192.168.0.131
ldap_search_base = dc=chaperone,dc=jp
ldap_id_use_start_tls = True
ldap_tls_reqcert = never
ldap_default_bind_dn = cn=ldap-connect,cn=Users,dc=chaperone,dc=jp
ldap_default_authtok = ldap
ldap_schema = rfc2307bis
ldap_user_home_directory = unixHomeDirectory
[root@rockylinux9 ~]# systemctl start sssd