ファイルサーバを新しくしました。 Samba4とOpenLDAPの移行、その他もろもろ
Posted on 2015/10/18(Sun) 02:45 in technical
今日のお話
つい最近、ファイルサーバを新しくした のですけど、
旧ファイルサーバではSamba36と連携しているOpenLDAPも動いてるのでこれの移行もする必要があった。
と言ってもコールドスタンバイな移行なので、BDBからMDBへの変更も特に意識する必要は無くて、結果的にはFreeBSD 10にOpenLDAPをSamba連携するように入れ直す程度。
なんか既に記憶とメモが曖昧だけど...まぁ、ね。
ではゴー。
やること
- OpenLDAPサーバのインストール
- Samba42のインストール
- OpenLDAPのバックアップ取得とデータの移行
- グループのためにPAM対応(ついでにSSHも)
- おしまい
簡単そう!
OpenLDAPサーバのインストール
まぁ大体こんな感じです。:
# 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
警告
以下のようなエラーが出る場合があります:
# service slapd onestart Starting slapd. Unrecognized database type (mdb) /usr/local/etc/rc.d/slapd: WARNING: failed to start slapd
以下コメントアウトして有効に。:
moduleload back_mdb
参考: http://www.openldap.org/lists/openldap-technical/201310/msg00010.html
Samba42のインストール
まず、古いSambaサーバと同名で作る場合は、古いファイルサーバのSIDの変更を合わせて実行しておきます:
(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をインストール:
(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のバックアップ取得とデータの移行
これは適当に吐き出させれば良い。
個人環境なので普通に常用しているまま出力。:
(old)# slapcat > ldap-backup.ldif
次に、新しいSambaサーバのSIDを取得:
# slapcat | grep sambaSID sambaSID: S-1-5-21-120019609-1632863270-3876271938
で、これに置換:
(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
通報
こういう機会に ldap-backup.ldif のdcとかを変更してから slapadd してやれば組織名の調整とかもできますね。
ただし、この時点では、少なくともグループ名を取得することが出来ず、こんな感じになっちゃう:
# pdbedit -L root:0:root nobody:65534:nobody test_user:4294967295:test_user
グループのためにPAM対応(ついでにSSHも)
まずはSambaでグループがちゃんと認識できるようにする。
ざっと流す。:
# 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
これで見えるはず:
# 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
ので、そのように追加する:
# 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ユーザを対象に色々制限をかければいい。
例えばこんな感じ:
# vi /etc/ssh/sshd_config Match User test_user ChrootDirectory /var/home/test_user X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp # service sshd restart
おしまい
まぁそういうわけでした(雑)