Centos 6でLDAPを構成して、最も安全で正しい方法でユーザー認証を行うにはどうすればよいですか?



How Do I Configure Ldap Centos 6



解決:

解決策1:解決策1:

これは、サーバーにopenldapをインストールして構成し、LDAPサーバーに対するユーザー認証用にsssdをインストールして構成するいくつかのシェルスクリプトです。

グループ、ユーザーなどを含むLDAPサーバーをインストールするもの。



#!/ bin / sh ############################################ ################ LDAPサーバーをインストールする############################## ##############################セキュリティを強化するためにSELinuxを有効にします。 setenforce 1 setsebool -P domain_kernel_load_modules 1#LDAPサーバーとの通信は、IPではなくドメイン名を使用して行う必要があります。これにより、dns-nameが確実に構成されます。 cat >> / etc / hosts<>/etc/openldap/slapd.d/cn=config/olcDatabase=\\\\\\\\'t<>/etc/rsyslog.conf<< EOF local4.* /var/log/slapd/slapd.log EOF service rsyslog restart # Do the configurations. ldapadd -H ldap://ldap.syco.net -x -D 'cn=admin,cn=config' -w secret <〜/ sudoWork / sudoSchema.conf#「スキーマ」を「LDIF」に変換します。 slapcat -f〜 / sudoWork / sudoSchema.conf -F / tmp / -n0 -s'cn = {0} sudo、cn = schema、cn = config '>〜/ sudoWork / sudo.ldif#無効なデータを削除します。 sed -i's / {0} sudo / sudo / g'〜 / sudoWork / sudo.ldif#最後の8行(無効)を削除します。 head -n-8〜 / sudoWork / sudo.ldif>〜/ sudoWork / sudo2.ldif#スキーマをLDAPサーバーにロードしますldapadd -H ldap:/// -x -D'cn = admin、cn = config'- w secret -f〜 / sudoWork / sudo2.ldif#sudoersにインデックスを追加しますdb ldapadd -H ldap:/// -x -D'cn = admin、cn = config '-w secret<< EOF dn: olcDatabase={1}bdb,cn=config changetype: modify add: olcDbIndex olcDbIndex: sudoUser eq EOF ########################################################### # Create modules area # ########################################################### ldapadd -H ldap:/// -x -D 'cn=admin,cn=config' -w secret << EOF dn: cn=module{0},cn=config objectClass: olcModuleList cn: module{0} olcModulePath: /usr/lib64/openldap/ EOF ########################################################### # Add auditlog overlay. # # http://www.manpagez.com/man/5/slapo-auditlog/ ########################################################### ldapadd -H ldap:/// -x -D 'cn=admin,cn=config' -w secret << EOF dn: cn=module{0},cn=config changetype:modify add: olcModuleLoad olcModuleLoad: auditlog.la dn: olcOverlay=auditlog,olcDatabase={1}bdb,cn=config changetype: add objectClass: olcOverlayConfig objectClass: olcAuditLogConfig olcOverlay: auditlog olcAuditlogFile: /var/log/slapd/auditlog.log EOF ########################################################### # Add accesslog overlay. # # http://www.manpagez.com/man/5/slapo-accesslog/ # # TODO: Didn't get it working. # ########################################################### # ldapadd -H ldap:/// -x -D 'cn=admin,cn=config' -w secret << EOF # dn: cn=module,cn=config # objectClass: olcModuleList # cn: module # olcModulePath: /usr/lib64/openldap/ # olcModuleLoad: access.la # # # dn: olcOverlay=accesslog,olcDatabase={1}bdb,cn=config # changetype: add # olcOverlay: accesslog # objectClass: olcOverlayConfig # objectClass: olcAccessLogConfig # logdb: cn=auditlog # logops: writes reads # # read log every 5 days and purge entries # # when older than 30 days # logpurge 180+00:00 5+00:00 # # optional - saves the previous contents of # # person objectclass before performing a write operation # logold: (objectclass=person) # EOF ########################################################### # Add pwdpolicy overlay # # http://www.zytrax.com/books/ldap/ch6/ppolicy.html # http://www.openldap.org/software/man.cgi?query=slapo-ppolicy&sektion=5&apropos=0&manpath=OpenLDAP+2.3-Release # http://www.symas.com/blog/?page_id=66 ########################################################### ldapadd -H ldap:/// -x -D 'cn=admin,cn=config' -w secret < /etc/openldap/cacerts/ca.srl openssl req -new -x509 -sha512 -nodes -days 3650 -newkey rsa:4096 -out /etc/openldap/cacerts/ca.crt  -keyout /etc/openldap/cacerts/ca.key  -subj '/O=syco/OU=System Console Project/CN=systemconsole.github.com' # Creating server cert openssl req -new -sha512 -nodes -days 1095 -newkey rsa:4096  -keyout /etc/openldap/cacerts/slapd.key  -out /etc/openldap/cacerts/slapd.csr  -subj '/O=syco/OU=System Console Project/CN=ldap.syco.net' openssl x509 -req -sha512 -days 1095  -in /etc/openldap/cacerts/slapd.csr  -out /etc/openldap/cacerts/slapd.crt  -CA /etc/openldap/cacerts/ca.crt  -CAkey /etc/openldap/cacerts/ca.key # # Customer create a CSR (Certificate Signing Request) file for client cert # openssl req -new -sha512 -nodes -days 1095 -newkey rsa:4096  -keyout /etc/openldap/cacerts/client.key  -out /etc/openldap/cacerts/client.csr  -subj '/O=syco/OU=System Console Project/CN=client.syco.net' # # Create a signed client crt. # cat>/etc/openldap/cacerts/sign.conf< /etc/openldap/cacerts/client.pem # Create hash and set permissions of cert /usr/sbin/cacertdir_rehash /etc/openldap/cacerts chown -Rf root:ldap /etc/openldap/cacerts chmod -Rf 750 /etc/openldap/cacerts restorecon -R /etc/openldap/cacerts # View cert info # openssl x509 -text -in /etc/openldap/cacerts/ca.crt # openssl x509 -text -in /etc/openldap/cacerts/slapd.crt # openssl x509 -text -in /etc/openldap/cacerts/client.pem # openssl req -noout -text -in /etc/openldap/cacerts/client.csr ########################################################### # Configure ssl # # Configure slapd to only be accessible over ssl, # with client certificate. # # http://www.openldap.org/pub/ksoper/OpenLDAP_TLS.html#4.0 # http://www.openldap.org/faq/data/cache/185.html ########################################################### ldapadd -H ldap:/// -x -D 'cn=admin,cn=config' -w secret <>/ root / ldaprc<< EOF TLS_CERT /etc/openldap/cacerts/client.pem TLS_KEY /etc/openldap/cacerts/client.pem EOF ########################################################### # Require higher security from clients. ########################################################### ldapadd -H ldaps://ldap.syco.net -x -D 'cn=admin,cn=config' -w secret << EOF dn: cn=config changetype:modify replace: olcLocalSSF olcLocalSSF: 128 - replace: olcSaslSecProps olcSaslSecProps: noanonymous,noplain dn: cn=config changetype:modify replace: olcSecurity olcSecurity: ssf=128 olcSecurity: simple_bind=128 olcSecurity: tls=128 EOF ########################################################### # Open firewall # # Let clients connect to the server through the firewall. # This is done after everything else is done, so we are sure # that the server is secure before letting somebody in. # TODO: Add destination ip ########################################################### iptables -I INPUT -m state --state NEW -p tcp -s 10.100.110.7/24 --dport 636 -j ACCEPT  

そして、クライアントにsssdをインストールし、LDAPサーバーに接続するもの。

#!/ bin / sh ############################################ ################ LDAPクライアントをインストールする##この部分は、LDAPサーバーと#LDAPサーバーに対して認証する必要があるすべてのクライアントの両方で実行する必要があります##このスクリプト少なくとも以下のリンクからの情報に基づいています。 #http://www.server-world.info/en/note?os = CentOS_6&p = ldap&f = 2#http://docs.fedoraproject.org/en-US/Fedora/15/html/Deployment_Guide/chap-SSSD_User_Guide -Introduction.html ############################################## ############## ###################################### ######################## sssdをアンインストールします##注:sssdが以前にセットアップされている場合にのみ必要です。 #sssdをインストールするときに--skip-brokenが必要になる場合があります。 ################################################## ######### #yum -y remove openldap-clients sssd #rm -rf / var / lib / sss / ##################### #######################################関連するパッケージをインストールする######## ################################################## ##パッケージをインストールするyum -y install openldap-clients#sssdの継続リリース#バージョン1.5.1から1つのパッケージを選択します。 yum -y install sssd --skip-broken yum -y install centos-release-cr yum -y update sssd yum -y remove centos-release-cr ################# ########################################### LDAPサーバーから証明書を取得する##これはサーバー上で行う必要はありません。 ################################################## ######### もしも [ ! -f /etc/openldap/cacerts/client.pem];次にscp [メール保護]:/ etc / openldap / cacerts / client.pem /etc/openldap/cacerts/client.pem fi if [! -f /etc/openldap/cacerts/ca.crt];次にscp [電子メールで保護]:/ etc / openldap / cacerts / ca.crt /etc/openldap/cacerts/ca.crt fi / usr / sbin / cacertdir_rehash / etc / openldap / cacerts chown -Rf root:ldap / etc / openldap / cacerts chmod -Rf 750 / etc / openldap / cacerts restorecon -R / etc / openldap / cacerts ############################# ############################### LDAPに対してクライアント認証を構成します。 ################################################## ########## sssdを設定する前にiptablesを設定して、サーバーに接続できるようにします。 iptables -I OUTPUT -m state --state NEW -p tcp -d 10.100.110.7 --dport 636 -j ACCEPT#LDAPサーバーとの通信は、IPではなくドメイン名を使用して行う必要があります。これにより、dns-nameが確実に構成されます。 sed -i '/ ^ 10.100.110.7。* / d' / etc / hosts cat >> / etc / hosts<>/ root / ldaprc<>/etc/sssd/sssd.conf<> /etc/nsswitch.conf<>/etc/ldap.conf<< EOF # Configure sudo ldap. uri ldaps://ldap.syco.net base dc=syco,dc=net sudoers_base ou=SUDOers,dc=syco,dc=net binddn cn=sssd,dc=syco,dc=net bindpw secret ssl on tls_cacertdir /etc/openldap/cacerts tls_cert /etc/openldap/cacerts/client.pem tls_key /etc/openldap/cacerts/client.pem #sudoers_debug 5 EOF  

上記のスクリプトと同じフォルダーに配置する必要があるLDIFファイルも提供されます。

#ファイル名:manager.ldif ############################################ ################新しいデータベース################################ ########################### dn:dc = syco、dc = net objectClass:top objectclass:dcObject objectclass:organization o:System Console Project dc:sycoの説明:ツリールート#sssdが一般的なクエリを実行するために使用します。 dn:cn = sssd、dc = syco、dc = net objectClass:simpleSecurityObject objectClass:organizationalRole cn:sssd説明:sssdのアカウント。 userPassword:{SSHA} OjXYLr1oZ / LrHHTmjnPWYi1GjbgcYxSb ########################################## ################## pwdpolicyオーバーレイを追加する#新しいユーザーを追加する前に行う必要があります。 ################################################## ######### dn:ou = pwpolicies、dc = syco、dc = net objectClass:organizationalUnit objectClass:top ou:policys dn:cn = default、ou = pwpolicies、dc = syco、dc = net cn:デフォルト#objectClass:pwdPolicyChecker objectClass:pwdPolicy objectClass:person objectClass:top pwdAllowUserChange:TRUE pwdAttribute:2.5.4.35 #pwdCheckModule:crackcheck.so #pwdCheckQuality:2 pwdExpireWarning:604800 pwdFailureCountInterval:30 pwdGraceAuthNLimit:0 pwdInHistory:10 pwdLock pwdMaxAge:7776000 pwdMaxFailure:5 pwdMinAge:3600 pwdMinLength:12 pwdMustChange:FALSE pwdSafeModify:FALSE sn:ダミー値EOF ########################### #################################グループ################ ########################################### dn:ou = group、dc = syco、dc = net objectClass:top objectclass:organizationalunit ou:group dn:cn = sycousers、ou = group、dc = syco、dc = net cn:sycousers objectClass:posixGroup gidNumber:2000 memberUid:user1 member Uid:user2 memberUid:user3 dn:cn = sysop、ou = group、dc = syco、dc = net cn:sysop objectClass:posixGroup gidNumber:2001 memberUid:user1 memberUid:user2 dn:cn = management、ou = group、dc = syco、dc = net cn:管理オブジェクトクラス:posixGroup gidNumber:2002 memberUid:user1 ################################# ###########################ユーザー###################### ##################################### dn:ou = people、dc = syco、dc = net objectClass:トップobjectclass:organizationalunit ou:people dn:uid = user1、ou = people、dc = syco、dc = net objectClass:inetOrgPerson objectClass:posixAccount objectClass:shadowAccount uid:user1 employeeType:Sysop GiveName:User1 surname:Syco displayName:Syco User1 commonName:Syco User1 gecos:Syco User1イニシャル:SUタイトル:システム管理者(fratsecret)userPassword:{CRYPT} frzelFSD.VhkI loginShell:/ bin / bash uidNumber:2001 gidNumber:2000 homeDirectory:/ home / user1 shadowExpire:-1 shadowFlag :0 shadowWarning:7 shadowMin:8 shadowMax:999999 shadowLastChange:10877 m ail:[メール保護] postalCode:666666 mobile:+46(0)73 xx xx xx xx homePhone:+46(0)8 xx xx xx xx postalAddress:dn:uid = user2、ou = people、dc = syco、dc = net objectClass:inetOrgPerson objectClass:posixAccount objectClass:shadowAccount uid:user2 employeeType:Sysop GiveName:User2 surname:Syco displayName:Syco User2 commonName:Syco User2 gecos:Syco User2 initials:SU title:System Administrator userPassword:{CRYPT} frzelFSD.VhkI loginShell:/ bin / bash uidNumber:2002 gidNumber:2000 homeDirectory:/ home / user2 shadowExpire:-1 shadowFlag:0 shadowWarning:7 shadowMin:8 shadowMax:999999 shadowLastChange:10877 mail:[email protected] postalCode:666666 mobile:+46 (0)73 xx xx xx xx homePhone:+46(0)8 xx xx xx xx postalAddress:dn:uid = user3、ou = people、dc = syco、dc = net objectClass:inetOrgPerson objectClass:posixAccount objectClass:shadowAccount uid: user3 employeeType:開発者givenName:User3 surname:Syco displayName:Syco User3 commonName:Syco User3 gecos:Syco User3 initi als:SUタイトル:システム管理者userPassword:{CRYPT} frzelFSD.VhkI loginShell:/ bin / bash uidNumber:2003 gidNumber:2000 homeDirectory:/ home / user3 shadowExpire:-1 shadowFlag:0 shadowWarning:7 shadowMin:8 shadowMax:999999 shadowLastChange :10877メール:[メール保護] postalCode:666666 mobile:+46(0)73 xx xx xx xx homePhone:+46(0)8 xx xx xx xx postalAddress:############# ############################################### SUDOERS ## ################################################## ####### dn:ou = SUDOers、dc = syco、dc = net objectClass:top objectClass:organizationalUnit ou:SUDOers dn:cn = defaults、ou = SUDOers、dc = syco、dc = net objectClass:top objectClass :sudoRole cn:デフォルトの説明:デフォルトのsudoOptionsここに移動sudoOption:requiretty sudoOption:always_set_home sudoOption:env_reset sudoOption:env_keep = 'COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS' sudoOption:env_keep + = 'MAIL PS1 = 'LC_COLLATE LC_I DENTIFICATION LC_MEASUREMENT LC_MESSAGES'sudoOption:env_keep + = 'LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE'sudoOption:env_keep + =' LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY'sudoOption: root、ou = SUDOers、dc = syco、dc = net objectClass:top objectClass:sudoRole cn:root sudoUser:root sudoHost:ALL sudoRunAsUser:ALL sudoCommand:ALL#すべてのシスオペが何でも実行できるようにするdn:cn =%sysop、ou = SUDOers、dc = syco、dc = net objectClass:top objectClass:sudoRole cn:%sysop sudoUser:%sysop sudoHost:ALL sudoRunAsUser:ALL sudoCommand:ALL

スクリプトをサーバーで実行する前に、スクリプトを理解して編集する必要があります。インストール用にカスタマイズする必要があるものの中には、「syco.net」、ユーザー、グループ、およびパスワードに関連するものがあります。

解決策2:解決策2:

クライアントのセットアップ

Arlukinの回答をかなり参照しましたが、クライアント設定の簡素化されたバージョンが役立つと思いました。証明書を設定したら、次の手順を実行します。

yum install sssd pam_ldap chkconfig sssd on authconfig  --enablesssd --enablesssdauth --enablecachecreds  --enableldap --enableldaptls --enableldapauth  --ldapserver = ldap://ldap.example.com --ldapbasedn = dc = example、 dc = com  --disablenis --disablekrb5  --enableshadow --enablemkhomedir --enablelocauthorize  --passalgo = sha512 --updateall

これらの設定をに追加します[ドメイン/デフォルト]セクション/etc/sssd/sssd.conf:

ldap_schema = rfc2307bis ldap_user_fullname = displayName ldap_user_search_base = dc = People、dc = example、dc = com ldap_group_search_base = dc = Roles、dc = example、dc = com ldap_group_member = member ldap_group_nesting_level = 4 ldap_default_bind_dn = cn例、dc = com ldap_default_authtok_type = password ldap_default_authtok = yourSecretPassword

証明書なしでセットアップをテストするには:

ldap_id_use_start_tls = False ldap_auth_disable_tls_never_use_in_production = true

OpenLDAPアクセス制御

始めるのに役立ついくつかのアクセス制御ルール(注文 NS 案件)。それを念頭に置いてbreakを使用すると、同じターゲットに一致する他のルールを処理できます。この一部はネストされたグループを対象としています。セットアップについては、LDAPのdnベースのLinuxグループを参照してください。

to attrs = userPassword、sambaLMPassword、sambaNTPassword by anonymous auth by self = rwdx by set = 'user&[cn = Administrators、ou = LDAP、dc = Applications、dc = example、dc = com] / member *' manage bydn。 children = 'ou = Special Accounts、dc = example、dc = com' auth
  • 匿名ユーザーに認証を許可します
  • 認証されたユーザーは自分のパスワードを変更できます
  • LDAP管理者グループのメンバーは誰のパスワードも変更できます
  • 最後の行は、特別アカウントのメンバーによるプロキシ認証用です

to * by set = 'user&[cn = Administrators、ou = LDAP、dc = Applications、dc = example、dc = com] / member *' manage by * break

すべてのLDAP管理者が何でも変更できるようにします


to dn.children = 'dc = Roles、dc = example、dc = com' attrs = member by set = 'user&this / owner' manage by set = 'user&this / owner * / member *' manage by set = 'user&this / owner * / manager *' manage by set = 'user&this / owner * / member * / manager *' manage by * break
  • ユーザーが所有するグループを管理できるようにします
  • グループも所有者になることができます
  • グループの所有者のマネージャーである誰もがグループを管理することもできます
  • グループの場合fooはグループの所有者ですバー、誰のマネージャーfooは管理できますバーも

to dn.children = 'ou = Special Accounts、dc = example、dc = com' attrs = authzTo by * auth

特別なアカウントから他のユーザーへのプロキシ認証を許可します。これは、Webサーバーが特別なアカウントを使用して一度バインドし、同じ接続上の通常のユーザーの資格情報を確認できるようにするために使用される場合があります。


to dn.children = 'dc = People、dc = example、dc = com' attrs = giveName、sn、middleName、dateOfBirth、displayName、cn、telephoneNumber、fax、postalAddress、homePhone、homePostalAddress、mobile、pager、postalCode、postOfficeBox、自己書き込みによるpreferredLanguage、streetAddress、l、st、c * break
  • ユーザーが「プロファイル」フィールドを編集できるようにします

ユーザーが、権限に影響を与える可能性のある属性を変更できないようにすることが重要です。マネージャー、またはサーバーがそれをサポートしている場合はmemberOf。


to dn.children = 'dc = People、dc = example、dc = com' attrs = uid、uidNumber、gidNumber、mail、telephoneNumber、mobile、departmentNumber、manager、title、initials、givenName、sn、displayName、cn、dateHired、 dateTerminated、fax、middleName、organizationName、organizationalUnitName、pager、postalAddress、l、st、c by * read

いくつかの基本的な連絡先情報を誰にでも見えるようにします。