AWSでOpenLDAP OLC(cn=config)導入してみた
OpenLDAPでOLC(cn=config)でこれだ!って記事がなかったので書いてみました。いちお、今はなきLPIC3 Coreもってるし。ちなみに、証明書ログインではなくアイパスログインに変更の話なので、お目当ての記事でなかった方には申し訳ありません。
AMIはとりあえずAmazon Linux(たぶん3.14.23-22.44.amzn1.x86_64)で。
おもむろにインストール
# yum install openldap-servers.x86_64 openldap-clients.x86_64 # cp -av /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG # chown ldap:ldap /var/lib/ldap/DB_CONFIG # cp -av /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf.import # slappasswd -s [password string] [slappasswd output] # vi /etc/openldap/slapd.conf.import ... include /etc/openldap/schema/ppolicy.schema include /etc/openldap/schema/sudo.schema ... modulepath /usr/lib64/openldap ... moduleload ppolicy.la ... access to attrs=userPassword,shadowLastChange,shadowMax by self write by dn="cn=Manager,dc=example,dc=com" write by anonymous auth by * none access to * by self write by dn="cn=Manager,dc=example,dc=com" write by * read ... database config access to * by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage by dn.exact="cn=Manager,dc=example,dc=com" manage by * none ... database monitor access to * by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.exact="cn=Manager,dc=exapmle,dc=com" read by * none ... suffix "dc=example,dc=com" ... rootdn "cn=Manager,dc=example,dc=com" ... rootpw [slappasswd output] overlay ppolicy ppolicy_default "cn=ppolicy,ou=policies,dc=example,dc=com" ppolicy_use_lockout
shadowLastChangeのアクセス権はppolicy使用時に必要だと信じてやみません。
よく都市伝説的にOLCはパスワード設定されてないからアクセスできんがないわれますが、rootpwを指定しておけば大丈夫です。
今回sudo連携もしたいのでsudo schemaいれます。(上のincludeで既に指定してるけど)
# cp -a /usr/share/doc/sudo-1.8.6p3/schema.OpenLDAP /etc/openldap/schema/sudo.schema
私も昔はOLCなのになんでslapd.confいじってんだよ思ってましたけど、こっからslaptestでインポートします。
# mkdir /etc/openldap/slapd.d # sudo -u ldap slaptest -f /etc/openldap/slapd.conf.import -F /etc/openldap/slapd.d
syslogの設定とかは省略。
ここまでできれば
# ldapsearch -x -D "cn=Manager,dc=example,dc=com" -b "cn=config" -W
とかでさっきのslappasswdで作成したパスワードでアクセスできるはずです(いまそらで書いたのでコマンドシンタックス間違ってたらごめんなさい。)
こっからはldifでもりもり初期データを突っ込むと思いますが、ここでは関係あるppolicyデフォルトのldifだけ。
# vi ./addPpolicy.ldif dn: cn=ppolicy,ou=policies,dc=example,dc=com cn: ppolicy objectClass: top objectClass: device objectClass: pwdPolicy pwdAttribute: userPassword pwdInHistory: 3 pwdMinLength: 10 pwdMaxFailure: 4 pwdFailureCountInterval: 1800 pwdCheckQuality: 1 pwdMustChange: TRUE pwdGraceAuthNLimit: 0 pwdMaxAge: 7776000 pwdExpireWarning: 1209600 pwdLockoutDuration: 900 pwdLockout: TRUE # ldapadd -x -D "cn=Manager,dc=example,dc=com" -f ./addPpolicy.ldif -W
設定値は適当です。
で、こっからはクライアント側設定になりますが、pam_ldapのインストール。
# yum install pam_ldap # yum install nscd nss-pam-ldapd
pamの設定。authconfig-tuiが吐きそうになるくらい便利。
# authconfig-tui 【認証の設定】 ・[Use LDAP] にチェックを入れる。 ・[Use LDAP Authentication] にチェックを入れる。 ・[Next] を選択する。 【LDAP 設定】 ・サーバー: ldap://[ldap server internal domain] ・ベースDN: ou=XXX,dc=example,dc=com ・[OK] を選択する。 # vi /etc/pam_ldap.conf pam_lookup_policy yes pam_password exop
お好みでsystem-authのaccoutn ~ pam_ldap.soにauthinfo_unavail=ignoreなどを入れてみたり、pam_mkhomedirをいれてみるなどしたりしてください。
あと、AWSではssh認証がPasswordAuthentication noなのでyesにしときます。勢いでPermitEmptyPasswordsもnoに。
あとは、sudo。
# vi addSudo.ldif # sudo group dn: ou=SUDOers,dc=example,dc=com objectClass: organizationalUnit ou: SUDOers # sudo defaults dn: cn=defaults,ou=SUDOers,dc=example,dc=com objectclass: top objectclass: sudoRole cn: defaults sudoOption: !root_sudo sudoOption: !lecture sudoOption: log_host sudoOption: log_year sudoOption: syslog=local3 sudoOption: logfile=/var/log/sudo.log sudoOption: ignore_dot sudoOption: ignore_local_sudoers sudoOption: timestamp_timeout=0 # %wheel dn: cn=%wheel,ou=SUDOers,dc=example,dc=com objectClass: top objectClass: sudoRole cn: %wheel sudoUser: %wheel sudoHost: ALL sudoCommand: ALL # wheel group dn: cn=wheel,ou=XXX,dc=example,dc=com objectClass: posixGroup objectClass: top gidNumber: 1234 cn: wheel memberUid: [uid]
sudoの設定値も適当です。
おもむろにignore_local_sudoersとかしてるんで突然のsudo不可状態!!とかに気をつけてください。
あとは
# vi /etc/pam.d/su auth required pam_wheel.so group=wheel # vi nsswitch.conf sudoers: ldap files
以上で完了です。
設定確認などldapsearchだけでやってたらすごいウォーリーを探せ状態になったので、私はApache directory studio使ってます。macでもおけなので。
http://directory.apache.org/studio/downloads.html