{"id":3638,"date":"2019-04-18T09:41:56","date_gmt":"2019-04-18T07:41:56","guid":{"rendered":"https:\/\/vm.piszki.pl\/?p=3638"},"modified":"2019-04-18T09:41:56","modified_gmt":"2019-04-18T07:41:56","slug":"konfiguracja-openldap-i-kerberos-w-centos-7","status":"publish","type":"post","link":"https:\/\/vm.piszki.pl\/?p=3638","title":{"rendered":"Konfiguracja OpenLDAP i Kerberos w CentOS 7"},"content":{"rendered":"<p align=\"justify\">Dzisiaj zajmiemy si\u0119 kerberyzacj\u0105 LDAP, brzmi to troch\u0119 dziwnie, ale sprowadza si\u0119 do zainstalowania i skonfigurowania klastra sk\u0142adaj\u0105cego si\u0119 z wielu w\u0119z\u0142\u00f3w (N+) dzia\u0142aj\u0105cego w trybie aktywnym. Klaster ten b\u0119dzie serwowa\u0142 us\u0142ugi LDAP i Kerberos dla system\u00f3w Linuks. Baza danych kerberosa b\u0119dzie przechowywana w OpenLDAP, dzi\u0119ki temu ta us\u0142uga r\u00f3wnie\u017c b\u0119dzie dzia\u0142a\u0142a jako tzw. multi master. Opr\u00f3cz samego klastra, skonfigurujemy tak\u017ce system kliencki aby uwierzytelnienie u\u017cytkownika odbywa\u0142o si\u0119 na poziomie LDAP oraz aby taki u\u017cytkownik m\u00f3g\u0142, korzystaj\u0105c z bileciku (kerberos ticket) porusza\u0107 si\u0119 swobodnie pomi\u0119dzy systemami. \u0106wiczenie to ma na celu przygotowanie systemu autoryzacji do wykorzystania przy p\u00f3\u017aniejszej instalacji Hadoop.<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/ticket.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"ticket\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/ticket_thumb.jpg\" alt=\"ticket\" width=\"240\" height=\"157\" border=\"0\" \/><\/a><\/p>\n<p><!--more--><\/p>\n<p align=\"justify\">Mimo, \u017ce nie ma ogranicze\u0144 co do ilo\u015bci w\u0119z\u0142\u00f3w, to ja tutaj zastosuj\u0119 tylko dwa, dzia\u0142aj\u0105ce w pe\u0142nej replikacji. W ramach przygotowa\u0144 musicie posiada\u0107 serwer DNS oraz mie\u0107 sp\u00f3jny czas w ca\u0142ym \u015brodowisku (NTP). Jako system operacyjny wybra\u0142em CentOS 7, ale dla samej konfiguracji klastra nie ma to wi\u0119kszego znaczenia, r\u00f3wnie dobrze mo\u017ce to by\u0107 Ubuntu 18. Na potrzeby tej instalacji wygenerowa\u0142em now\u0105 domen\u0119 hdfs.lab oraz dwa serwery HDC1 i HDC2 o IP 192.168.30.11,12. Nowa domena wzi\u0119\u0142a si\u0119 st\u0105d, \u017ce Active Directory to te\u017c Kerberos, i w sieci nie mog\u0105 funkcjonowa\u0107 dwa o\u015brodki obs\u0142uguj\u0105ce t\u0119 sam\u0105 domen\u0119 (u mnie: piszki.lab).\u00a0 Zaczynamy od zainstalowania wszystkich potrzebnych pakiet\u00f3w (na obydwu w\u0119z\u0142ach):<\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>yum install krb5-server krb5-server-ldap krb5-workstation pam_krb5 openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel nss-pam-ldapd cyrus-sasl-gssapi<\/strong><\/span><\/p>\n<p align=\"justify\">Do tego dojdzie kilka dodatkowych pakiet\u00f3w dla spe\u0142nienia zale\u017cno\u015bci. Zaczniemy oczywi\u015bcie od skonfigurowania OpenLDAP w trybie multimaster, proponuj\u0119 przygotowa\u0107 sobie katalog o nazwie \/root\/ldap w kt\u00f3rym utworzymy szereg plik\u00f3w ldif. B\u0119dziemy stawia\u0107 tylko i wy\u0142\u0105cznie OpenLDAP w wersji zabezpieczonej TLS (i dost\u0119p og\u00f3lny i replikacja), dlatego na starcie potrzebujecie certyfikatu. Ja wygenerowa\u0142em jeden certyfikat z nazwami SAN dla obu serwer\u00f3w (o certyfikatach b\u0119dzie jeszcze dalej). Jako za\u0142\u0105cznik do tego artyku\u0142u znajdziecie m\u00f3j skrypt camenu za pomoc\u0105 kt\u00f3rego mo\u017cecie stworzy\u0107 w\u0142asne CA oraz wygenerowa\u0107 dowolny certyfikat. Od tego momentu konfiguracj\u0119 tworzymy jednocze\u015bnie na obydwu w\u0119z\u0142ach, w chwili gdy w\u0142\u0105czymy replikacj\u0119, dalsza konfiguracja b\u0119dzie odbywa\u0142a si\u0119 tylko na w\u0119\u017ale pierwszym.<\/p>\n<p>Zawarto\u015b\u0107 pliku \/etc\/sysconfig\/slapd :<\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>SLAPD_URLS=&#8221;ldapi:\/\/\/ ldap:\/\/\/ ldaps:\/\/\/&#8221;<br \/>\nSLAPD_LDAPS=yes<\/strong><\/span><\/p>\n<p>Do pliku \/etc\/rsyslog.conf dodajemy lini\u0119:<\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>local4.*\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/var\/log\/openldap\/ldap.log<\/strong><\/span><\/p>\n<p>Zawarto\u015b\u0107 pliku \/etc\/logrotate.d\/openldap<\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>\/var\/log\/openldap\/ldap.log {<br \/>\ndaily<br \/>\nrotate 10<br \/>\nmissingok<br \/>\nnotifempty<br \/>\nsharedscripts<br \/>\npostrotate<br \/>\n\/bin\/kill -HUP `cat \/var\/run\/rsyslogd.pid 2&gt; \/dev\/null` 2&gt; \/dev\/null || true<br \/>\nendscript<br \/>\n}<\/strong><\/span><\/p>\n<p>Kopiujemy plik:<br \/>\n<span style=\"font-family: Arial; font-size: xx-small;\"><strong>cp \/usr\/share\/openldap-servers\/DB_CONFIG.example \/var\/lib\/ldap\/DB_CONFIG<br \/>\nchown ldap:ldap \/var\/lib\/ldap\/DB_CONFIG<\/strong><\/span><\/p>\n<p>Zawarto\u015b\u0107 pliku \/etc\/openldap\/ldap.conf :<\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>BASE\u00a0\u00a0\u00a0 dc=hdfs,dc=lab<br \/>\nURI\u00a0\u00a0\u00a0\u00a0 ldap:\/\/hdc1.hdfs.lab ldaps:\/\/hdc1.hdfs.lab\u00a0\u00a0\u00a0\u00a0\u00a0 #(i odpowiednio dla hdc2.hdfs.lab)<\/strong><\/span><\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>TLS_CACERTDIR\u00a0\u00a0 \/etc\/openldap\/certs<br \/>\nTLS_CACERT\u00a0\u00a0\u00a0\u00a0\u00a0 \/etc\/openldap\/certs\/ca.crt<br \/>\nTLS_REQCERT\u00a0\u00a0\u00a0 allow<br \/>\nSASL_NOCANON\u00a0\u00a0\u00a0 on<\/strong><\/span><\/p>\n<p align=\"justify\">Restartujemy us\u0142ug\u0119 rsyslog, startujemy us\u0142ug\u0119 slapd (w \/var\/log\/openldap powinien pojawi\u0107 si\u0119 plik ldap.log). Certyfikaty kopiujemy do \/etc\/openldap\/certs (w moim przypadku s\u0105 to dc.crt, dc.key i ca.crt). Jeste\u015bmy gotowi, mo\u017cemy dzia\u0142a\u0107 dalej (slapd b\u0119dzie nas\u0142uchiwa\u0142 na portach 88 i 636, odpowiednio skonfigurujcie firewalld).<\/p>\n<p>Tworzymy pierwszy plik LDIF (\u0142adujemy modu\u0142 do synchronizacji):<\/p>\n<p>[root@hdc1 ldap]# cat 01_syncprov.ldif<br \/>\n<span style=\"font-family: Arial; font-size: xx-small;\"><strong><br \/>\ndn: cn=module,cn=config<br \/>\nobjectClass: olcModuleList<br \/>\ncn: module<br \/>\nolcModulePath: \/usr\/lib64\/openldap<br \/>\nolcModuleLoad: syncprov.la<\/strong><\/span><\/p>\n<p>Tworzymy drugi plik LDIF (olcServerID jest inne na ka\u017cdym serwerze!):<\/p>\n<p>[root@hdc1 ldap]# cat 02_config.ldif<br \/>\n<span style=\"font-family: Arial; font-size: xx-small;\"><strong><br \/>\ndn: cn=config<br \/>\nchangetype: modify<br \/>\nadd: olcServerID<br \/>\nolcServerID: 1<\/strong><\/span><\/p>\n<p>Generujemy has\u0142o poleceniem slappasswd i wgrywamy je do trzeciego pliku LDIF :<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/hdc0.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"hdc0\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/hdc0_thumb.jpg\" alt=\"hdc0\" width=\"338\" height=\"61\" border=\"0\" \/><\/a><\/p>\n<p>[root@hdc1 ldap]# cat 03_rootpw.ldif<br \/>\n<span style=\"font-family: Arial; font-size: xx-small;\"><strong><br \/>\ndn: olcDatabase={0}config,cn=config<br \/>\nadd: olcRootPW<br \/>\nolcRootPW: {SSHA}AyqlgqpsP6ITRWdZlqDBMWj\/rP\/Xy20W<\/strong><\/span><\/p>\n<p>Tworzymy czwarty plik LDIF (zast\u0119pujemy istniej\u0105ce certyfikaty naszymi w\u0142asnymi, uwaga: plik z kluczem (dc.key) musi mie\u0107 w\u0142asno\u015b\u0107 grupy \u201cldap\u201d oraz uprawnienia 640):<\/p>\n<p>[root@hdc1 ldap]# cat 04_ssl.ldif<br \/>\n<span style=\"font-family: Arial; font-size: xx-small;\"><strong><br \/>\ndn: cn=config<br \/>\nchangetype: modify<br \/>\nreplace: olcTLSCertificateKeyFile<br \/>\nolcTLSCertificateKeyFile: \/etc\/openldap\/certs\/dc.key<br \/>\n&#8211;<br \/>\nreplace: olcTLSCertificateFile<br \/>\nolcTLSCertificateFile: \/etc\/openldap\/certs\/dc.crt<br \/>\n&#8211;<br \/>\nreplace: olcTLSCACertificateFile<br \/>\nolcTLSCACertificateFile: \/etc\/openldap\/certs\/ca.crt<br \/>\n&#8211;<br \/>\nreplace: olcTLSCipherSuite<br \/>\nolcTLSCipherSuite: TLSv1+RSA:!EXPORT:!NULL<br \/>\n&#8211;<br \/>\nreplace: olcTLSVerifyClient<br \/>\nolcTLSVerifyClient: never<\/strong><\/span><\/p>\n<p align=\"justify\">Tworzymy pi\u0105ty plik LDIF (konfiguracja replikacji pomi\u0119dzy w\u0119z\u0142ami, has\u0142o XXXXX to oczywi\u015bcie te, kt\u00f3re wygenerowali\u015bcie wy\u017cej poleceniem slappasswd):<\/p>\n<p>[root@hdc1 ldap]# cat 05_configrep.ldif<br \/>\n<span style=\"font-family: Arial; font-size: xx-small;\"><strong><br \/>\ndn: cn=config<br \/>\nchangetype: modify<br \/>\nreplace: olcServerID<br \/>\nolcServerID: 1 ldaps:\/\/hdc1.hdfs.lab<br \/>\nolcServerID: 2 ldaps:\/\/hdc2.hdfs.lab<\/strong><\/span><\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>dn: olcOverlay=syncprov,olcDatabase={0}config,cn=config<br \/>\nchangetype: add<br \/>\nobjectClass: olcOverlayConfig<br \/>\nobjectClass: olcSyncProvConfig<br \/>\nolcOverlay: syncprov<\/strong><\/span><\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>dn: olcDatabase={0}config,cn=config<br \/>\nchangetype: modify<br \/>\nadd: olcSyncRepl<br \/>\nolcSyncRepl: rid=001 provider=ldaps:\/\/hdc1.hdfs.lab binddn=&#8221;cn=config&#8221;<br \/>\nbindmethod=simple credentials=&#8221;XXXXX&#8221; searchbase=&#8221;cn=config&#8221;<br \/>\ntype=refreshAndPersist retry=&#8221;5 5 300 5&#8243; timeout=1<br \/>\nolcSyncRepl: rid=002 provider=ldaps:\/\/hdc2.hdfs.lab binddn=&#8221;cn=config&#8221;<br \/>\nbindmethod=simple credentials=&#8221;XXXXX&#8221; searchbase=&#8221;cn=config&#8221;<br \/>\ntype=refreshAndPersist retry=&#8221;5 5 300 5&#8243; timeout=1<br \/>\n&#8211;<br \/>\nadd: olcMirrorMode<br \/>\nolcMirrorMode: TRUE<\/strong><\/span><\/p>\n<p align=\"justify\">W dalszej kolejno\u015bci wgrywamy po kolei pliki na obydwu serwerach, w rezultacie otrzymamy klaster OpenLDAP replikuj\u0105cy pomi\u0119dzy sob\u0105 dane.<\/p>\n<p align=\"justify\"><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/hdc1.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"hdc1\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/hdc1_thumb.jpg\" alt=\"hdc1\" width=\"580\" height=\"498\" border=\"0\" \/><\/a>W logu zobaczymy prawid\u0142owe po\u0142\u0105czenia mi\u0119dzy serwerami (dane jeszcze nie s\u0105 replikowane, tylko konfiguracja).<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/hdc2.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"hdc2\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/hdc2_thumb.jpg\" alt=\"hdc2\" width=\"577\" height=\"226\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">Od tego momentu wszystkie kroki wykonujemy na jednym w\u0119\u017ale (!!!), ustawienia zostan\u0105 zreplikowane.<\/p>\n<p>Tworzymy sz\u00f3sty plik LDIF (wskazanie bazy do replikacji, ja u\u017cywam {2}hdb):<\/p>\n<p>[root@hdc1 ldap]# cat 06_syncdb.ldif<br \/>\n<span style=\"font-family: Arial; font-size: xx-small;\"><strong><br \/>\ndn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config<br \/>\nchangetype: add<br \/>\nobjectClass: olcOverlayConfig<br \/>\nobjectClass: olcSyncProvConfig<br \/>\nolcOverlay: syncprov<\/strong><\/span><\/p>\n<p>Tworzymy si\u00f3dmy plik LDIF (has\u0142o olcRootPW i credentials to to samo co w plikach 03 i 05):<\/p>\n<p>[root@hdc1 ldap]# cat 07_ldapdomain.ldif<br \/>\n<span style=\"font-family: Arial; font-size: xx-small;\"><strong><br \/>\ndn: olcDatabase={2}hdb,cn=config<br \/>\nchangetype: modify<br \/>\nreplace: olcSuffix<br \/>\nolcSuffix: dc=hdfs,dc=lab<br \/>\n&#8211;<br \/>\nreplace: olcRootDN<br \/>\nolcRootDN: cn=ldapadm,dc=hdfs,dc=lab<br \/>\n&#8211;<br \/>\nreplace: olcRootPW<br \/>\nolcRootPW: {SSHA}AyqlgqpsP6ITRWdZlqDBMWj\/rP\/Xy20W<br \/>\n&#8211;<br \/>\nadd: olcSyncRepl<br \/>\nolcSyncRepl: rid=004 provider=ldaps:\/\/hdc1.hdfs.lab binddn=&#8221;cn=ldapadm,dc=hdfs,dc=lab&#8221; bindmethod=simple<br \/>\ncredentials=&#8221;XXXXX&#8221; searchbase=&#8221;dc=hdfs,dc=lab&#8221; type=refreshOnly<br \/>\ninterval=00:00:00:10 retry=&#8221;5 5 300 5&#8243; timeout=1<br \/>\nolcSyncRepl: rid=005 provider=ldaps:\/\/hdc2.hdfs.lab binddn=&#8221;cn=ldapadm,dc=hdfs,dc=lab&#8221; bindmethod=simple<br \/>\ncredentials=&#8221;XXXXX&#8221; searchbase=&#8221;dc=hdfs,dc=lab&#8221; type=refreshOnly<br \/>\ninterval=00:00:00:10 retry=&#8221;5 5 300 5&#8243; timeout=1<br \/>\n&#8211;<br \/>\nadd: olcDbIndex<br \/>\nolcDbIndex: entryUUID\u00a0 eq<br \/>\n&#8211;<br \/>\nadd: olcDbIndex<br \/>\nolcDbIndex: entryCSN\u00a0 eq<br \/>\n&#8211;<br \/>\nadd: olcMirrorMode<br \/>\nolcMirrorMode: TRUE<\/strong><\/span><\/p>\n<p align=\"justify\">W kolejnym kroku wgrywamy obydwa pliki, od tego momentu mamy w\u0142\u0105czon\u0105 replikacj\u0119 bazy danych OpenLDAP (b\u0119dzie to wyra\u017anie wida\u0107 w logu, gdzie pojawi\u0105 si\u0119 cyklicznie wpisy z replikacji).<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/hdc3.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"hdc3\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/hdc3_thumb.jpg\" alt=\"hdc3\" width=\"565\" height=\"172\" border=\"0\" \/><\/a>Widzimy, \u017ce replikacja idzie zaszyfrowanym kana\u0142em (TLS).<\/p>\n<p align=\"justify\"><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/hdc4.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"hdc4\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/hdc4_thumb.jpg\" alt=\"hdc4\" width=\"570\" height=\"190\" border=\"0\" \/><\/a>Podstawowa konfiguracja klastra OpenLDAP za nami, teraz skonfigurujemy domen\u0119 oraz wszystko to co jest nam potrzebne.<\/p>\n<p>Tworzymy \u00f3smy plik LDIF (ograniczenie replikacji do konta ldapadm):<\/p>\n<p>[root@hdc1 ldap]# cat 08_monitor.ldif<br \/>\n<span style=\"font-family: Arial; font-size: xx-small;\"><strong><br \/>\ndn: olcDatabase={1}monitor,cn=config<br \/>\nchangetype: modify<br \/>\nreplace: olcAccess<br \/>\nolcAccess: {0}to * by dn.base=&#8221;gidNumber=0+uidNumber=0,cn=peercred,cn=external, cn=auth&#8221; read by dn.base=&#8221;cn=ldapadm,dc=hdfs,dc=lab&#8221; read by * none<\/strong><\/span><\/p>\n<p>W kolejnym kroku wgramy podstawowe schematy do OpenLDAP (definicje parametr\u00f3w):<\/p>\n<p>ldapadd \u2013Y EXTERNAL \u2013H ldapi:\/\/\/ \u2013f \/etc\/openldap\/schema\/cosine.ldif (nis, inetorgperson, java, misc)<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/hdc5.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"hdc5\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/hdc5_thumb.jpg\" alt=\"hdc5\" width=\"556\" height=\"329\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">Tworzymy dziewi\u0105ty plik LDIF (zawarto\u015b\u0107 katalogu, administrator oraz grupy, zawarto\u015b\u0107 mo\u017ce by\u0107 dowolna):<\/p>\n<p>[root@hdc1 ldap]# cat 09_base.ldif<br \/>\n<span style=\"font-family: Arial; font-size: xx-small;\"><strong><br \/>\ndn: dc=hdfs,dc=lab<br \/>\ndc: hdfs<br \/>\nobjectClass: top<br \/>\nobjectClass: domain<\/strong><\/span><\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>dn: cn=ldapadm,dc=hdfs,dc=lab<br \/>\nobjectClass: organizationalRole<br \/>\ncn: ldapadm<br \/>\ndescription: LDAP Manager<\/strong><\/span><\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>dn: ou=Users,dc=hdfs,dc=lab<br \/>\nobjectClass: organizationalUnit<br \/>\nou: Users<\/strong><\/span><\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>dn: ou=Groups,dc=hdfs,dc=lab<br \/>\nobjectClass: organizationalUnit<br \/>\nou: Groups<\/strong><\/span><\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>dn: ou=Services,dc=hdfs,dc=lab<br \/>\nobjectClass: organizationalUnit<br \/>\nou: Groups<\/strong><\/span><\/p>\n<p align=\"justify\">Tworzymy dziesi\u0105ty plik (jest to definicja memberOf, ten parametr jest wymagany cz\u0119sto przy przeszukiwaniu katalogu przez us\u0142ugi zewn\u0119trzne):<\/p>\n<p>[root@hdc1 ldap]# cat 10_memberof.ldif<br \/>\n<span style=\"font-family: Arial; font-size: xx-small;\"><strong><br \/>\ndn: cn=module,cn=config<br \/>\ncn: module<br \/>\nobjectclass: olcModuleList<br \/>\nobjectclass: top<br \/>\nolcmoduleload: memberof.la<br \/>\nolcmodulepath: \/usr\/lib64\/openldap<\/strong><\/span><\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>dn: olcOverlay={0}memberof,olcDatabase={2}hdb,cn=config<br \/>\nobjectClass: olcConfig<br \/>\nobjectClass: olcMemberOf<br \/>\nobjectClass: olcOverlayConfig<br \/>\nobjectClass: top<br \/>\nolcOverlay: memberof<\/strong><\/span><\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>dn: cn=module,cn=config<br \/>\ncn: module<br \/>\nobjectclass: olcModuleList<br \/>\nobjectclass: top<br \/>\nolcmoduleload: refint.la<br \/>\nolcmodulepath: \/usr\/lib64\/openldap<\/strong><\/span><\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>dn: olcOverlay={1}refint,olcDatabase={2}hdb,cn=config<br \/>\nobjectClass: olcConfig<br \/>\nobjectClass: olcOverlayConfig<br \/>\nobjectClass: olcRefintConfig<br \/>\nobjectClass: top<br \/>\nolcOverlay: {1}refint<br \/>\nolcRefintAttribute: memberof member manager owner<\/strong><\/span><\/p>\n<p align=\"justify\">Plik ten wgrywamy poleceniem ldapadd \u2013x \u2013w \u2018XXXXX\u2019 \u2013D \u201ccn=ldapadm,dc=hdfs,dc=lab\u201d \u2013f 09_base.ldif (z has\u0142em).<\/p>\n<p align=\"justify\"><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/hdc6.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"hdc6\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/hdc6_thumb.jpg\" alt=\"hdc6\" width=\"524\" height=\"131\" border=\"0\" \/><\/a>Od tego momentu mamy funkcjonalny klaster OpenLDAP z pe\u0142n\u0105 synchronizacj\u0105 danych. W kolejnych krokach przejdziemy do konfiguracji Kerberos.<\/p>\n<p>Ten prosty skrypt bash wygeneruje w katalogu \/root\/ldap jedenasty plik LDIF:<\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>cp \/usr\/share\/doc\/krb5-server-ldap-1.15.1\/kerberos.schema \/etc\/openldap\/schema<br \/>\nmkdir \/tmp\/ldap-kerberos\/<br \/>\necho &#8222;include \/etc\/openldap\/schema\/kerberos.schema&#8221; &gt; \/tmp\/ldap-kerberos\/schema_convert.conf<br \/>\nmkdir \/tmp\/ldap-kerberos\/krb5_ldif<br \/>\nslaptest -f \/tmp\/ldap-kerberos\/schema_convert.conf -F \/tmp\/ldap-kerberos\/krb5_ldif<\/strong><\/span><\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>cp \/tmp\/ldap-kerberos\/krb5_ldif\/cn=config\/cn=schema\/cn\\=\\{0\\}kerberos.ldif \/root\/ldap\/11_kerberos.ldif<br \/>\nFILE=\/root\/ldap\/11_kerberos.ldif<br \/>\nsed -i &#8222;s@dn: cn={0}kerberos.*@dn: cn=kerberos,cn=schema,cn=config@g&#8221; ${FILE}<br \/>\nsed -i &#8222;s@cn: {0}kerberos.*@cn: kerberos@g&#8221; ${FILE}<br \/>\nsed -i '\/structuralObjectClass: \/d&#8217; ${FILE}<br \/>\nsed -i '\/creatorsName: cn=config\/d&#8217; ${FILE}<br \/>\nsed -i '\/modifiersName: cn=config\/d&#8217; ${FILE}<br \/>\nsed -i '\/createTimestamp: \/d&#8217; ${FILE}<br \/>\nsed -i '\/modifyTimestamp: \/d&#8217; ${FILE}<br \/>\nsed -i '\/entryUUID: \/d&#8217; ${FILE}<br \/>\nsed -i '\/entryCSN: \/d&#8217; ${FILE}<\/strong><\/span><\/p>\n<p align=\"justify\"><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/hdc7.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"hdc7\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/hdc7_thumb.jpg\" alt=\"hdc7\" width=\"521\" height=\"98\" border=\"0\" \/><\/a>Na koniec tworzymy dwunasty plik LDIF (zawieraj\u0105cy definicje indeks\u00f3w):<\/p>\n<p>[root@hdc1 ldap]# cat 12_index.ldif<br \/>\n<span style=\"font-family: Arial; font-size: xx-small;\"><strong><br \/>\ndn: olcDatabase={2}hdb,cn=config<br \/>\nchangetype: modify<br \/>\nadd: olcDbIndex<br \/>\nolcDbIndex: uid eq<br \/>\n&#8211;<br \/>\nadd: olcDbIndex<br \/>\nolcDbIndex: member eq<br \/>\n&#8211;<br \/>\nadd: olcDbIndex<br \/>\nolcDbIndex: dc eq<br \/>\n&#8211;<br \/>\nadd: olcDbIndex<br \/>\nolcDbIndex: uidNumber eq<br \/>\n&#8211;<br \/>\nadd: olcDbIndex<br \/>\nolcDbIndex: gidNumber eq<br \/>\n&#8211;<br \/>\nadd: olcDbIndex<br \/>\nolcDbIndex: memberUid eq<br \/>\n&#8211;<br \/>\nadd: olcDbIndex<br \/>\nolcDbIndex: uniqueMember eq<br \/>\n&#8211;<br \/>\nadd: olcDbIndex<br \/>\nolcDbIndex: krbPrincipalName eq,pres,sub<br \/>\n&#8211;<br \/>\nadd: olcDbIndex<br \/>\nolcDbIndex: krbPwdPolicyReference eq<\/strong><\/span><\/p>\n<p>Wgranie: ldapmodify -Y EXTERNAL -H ldapi:\/\/\/ -f 12_index.ldif<\/p>\n<p>Zawarto\u015b\u0107 pliku \/etc\/krb5.conf (definicja naszej domeny):<\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>includedir \/etc\/krb5.conf.d\/<\/strong><\/span><\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>[logging]<br \/>\ndefault = FILE:\/var\/log\/kerberos\/krb5libs.log<br \/>\nkdc = FILE:\/var\/log\/kerberos\/krb5kdc.log<br \/>\nadmin_server = FILE:\/var\/log\/kerberos\/kadmind.log<\/strong><\/span><\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>[libdefaults]<br \/>\ndns_lookup_realm = false<br \/>\nticket_lifetime = 24h<br \/>\nrenew_lifetime = 7d<br \/>\nforwardable = true<br \/>\nrdns = false<br \/>\nproxiable = true<br \/>\npkinit_anchors = \/etc\/openldap\/certs\/ca.crt<br \/>\nudp_preference_limit = 1<br \/>\ndefault_realm = HDFS.LAB<br \/>\ndefault_ccache_name = KEYRING:persistent:%{uid}<\/strong><\/span><\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>[realms]<br \/>\nHDFS.LAB = {<br \/>\nadmin_server = hdc1.hdfs.lab<br \/>\nkdc = hdc1.hdfs.lab<br \/>\nkdc = hdc2.hdfs.lab<br \/>\ndatabase_module = openldap_ldapconf<br \/>\n}<\/strong><\/span><\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>[dbdefaults]<br \/>\nldap_kerberos_container_dn = cn=Kerberos,dc=hdfs,dc=lab<\/strong><\/span><\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>[appdefaults]<br \/>\npam = {<br \/>\ndebug = false<br \/>\nticket_lifetime = 3600<br \/>\nrenew_lifetime = 3600<br \/>\nforwardable = true<br \/>\nkrb4_convert = false<br \/>\n}<\/strong><\/span><\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>[dbmodules]<br \/>\nopenldap_ldapconf = {<br \/>\ndb_library = kldap<br \/>\nldap_kdc_dn = &#8222;cn=ldapadm,dc=hdfs,dc=lab&#8221;<br \/>\nldap_kadmind_dn = &#8222;cn=ldapadm,dc=hdfs,dc=lab&#8221;<br \/>\nldap_service_password_file = \/var\/kerberos\/krb5kdc\/service.keyfile<br \/>\nldap_servers = ldaps:\/\/hdc1.hdfs.lab ldaps:\/\/hdc2.hdfs.lab<br \/>\nldap_conns_per_server = 5<br \/>\n}<\/strong><\/span><\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>[domain_realm]<br \/>\n.hdfs.lab = HDFS.LAB<br \/>\nhdfs.lab = HDFS.LAB<\/strong><\/span><\/p>\n<p>Zawarto\u015b\u0107 pliku \/var\/kerberos\/krb5kdc\/kdc.conf :<\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>[kdcdefaults]<br \/>\nkdc_ports = 88<br \/>\nkdc_tcp_ports = 88<\/strong><\/span><\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>[realms]<br \/>\nHDFS.LAB = {<br \/>\nmax_life = 12h 0m 0s<br \/>\nmax_renewable_life = 7d 0h 0m 0s<br \/>\nmaster_key_type = aes256-cts<br \/>\nacl_file = \/var\/kerberos\/krb5kdc\/kadm5.acl<br \/>\ndict_file = \/usr\/share\/dict\/words<br \/>\nadmin_keytab = \/var\/kerberos\/krb5kdc\/kadm5.keytab<br \/>\nsupported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal<br \/>\n}<\/strong><\/span><\/p>\n<p>Zawarto\u015b\u0107 pliku \/var\/kerberos\/krb5kdc\/kadm5.acl :<\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>*\/admin@HDFS.LAB\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 *<\/strong><\/span><\/p>\n<p align=\"justify\">Generujemy plik z has\u0142em dla ldapadm kt\u00f3rym kerberos b\u0119dzie si\u0119 \u0142\u0105czy\u0142 z OpenLDAP, na obydwu serwerach robimy to samo.<\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>kdb5_ldap_util -D cn=ldapadm,dc=hdfs,dc=lab stashsrvpw -f \/var\/kerberos\/krb5kdc\/service.keyfile cn=ldapadm,dc=hdfs,dc=lab<\/strong><\/span><\/p>\n<p>Generujemy struktur\u0119 kerberosa w ldap (robimy to tylko na jednym serwerze):<\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>kdb5_ldap_util -D &#8222;cn=ldapadm,dc=hdfs,dc=lab&#8221; -H ldap:\/\/hdc1.hdfs.lab create -subtrees &#8222;cn=Kerberos,dc=hdfs,dc=lab&#8221; -r HDFS.LAB -s<\/strong><\/span><\/p>\n<p align=\"justify\"><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/hdc8.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"hdc8\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/hdc8_thumb.jpg\" alt=\"hdc8\" width=\"561\" height=\"89\" border=\"0\" \/><\/a>Podajemy has\u0142o dla bazy kerberosa i\u2026 mamy to! Pozostaje skopiowa\u0107 klucz g\u0142\u00f3wny z has\u0142em do bazy kerberosa na drugi w\u0119ze\u0142:<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/hdc13.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"hdc13\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/hdc13_thumb.jpg\" alt=\"hdc13\" width=\"559\" height=\"161\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">W nast\u0119pnym kroku startujemy us\u0142ugi krb5kdc (na obydwu serwerach) i kadmin na pierwszym. Doszli\u015bmy do etapu, w kt\u00f3rym mo\u017cemy przeprowadzi\u0107 konfiguracj\u0119 \u201cklienta\u201d. W moim przypadku b\u0119dzie to CentOS 7, konfiguracja klienta kt\u00f3ry jest serwerem jest nieco inna od \u201czwyk\u0142ego\u201d klienta, postaram si\u0119 to rozr\u00f3\u017cni\u0107. Zaczniemy jednak od przetestowania kerberosa, musimy doda\u0107 w\u0142a\u015bciwe uprawnienia:<\/p>\n<p>kadmin.local -q &#8222;addprinc admin\/admin&#8221;<\/p>\n<p>kadmin.local -q &#8222;addprinc root\/admin&#8221;<\/p>\n<p>Oraz dla u\u017cytkownika root:<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/hdc9.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"hdc9\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/hdc9_thumb.jpg\" alt=\"hdc9\" width=\"560\" height=\"231\" border=\"0\" \/><\/a><\/p>\n<p>Nast\u0119pnie dodajemy uprawnienia dla host\u00f3w w klastrze (jako host i jako ldap):<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/hdc10.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"hdc10\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/hdc10_thumb.jpg\" alt=\"hdc10\" width=\"561\" height=\"194\" border=\"0\" \/><\/a><\/p>\n<p>Zapisujemy uprawnienia host\u00f3w do pliku \/etc\/krb5.keytab (plik kopiujemy te\u017c na drugi w\u0119ze\u0142, w\u0142a\u015bcicielem pliku powinien by\u0107 u\u017cytkownik \u201cldap\u201d): <a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/hdc11.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"hdc11\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/hdc11_thumb.jpg\" alt=\"hdc11\" width=\"554\" height=\"307\" border=\"0\" \/><\/a><\/p>\n<p>Tworzymy plik\/var\/kerberos\/krb5kdc\/kadm5.keytab (kopiujemy go na drugi w\u0119ze\u0142):<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/hdc12.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"hdc12\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/hdc12_thumb.jpg\" alt=\"hdc12\" width=\"556\" height=\"72\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">Na tym etapie mamy dzia\u0142aj\u0105cy OpenLDAP i Kerberos, teraz dokonamy kerberyzacji ldap, czyli skonfigurujemy w systemie mo\u017cliwo\u015b\u0107 zalogowania si\u0119 kontem z ldap, wygenerowania uprawnie\u0144 kerberos i u\u017cycia ich z ssh. Robimy to na razie na w\u0119z\u0142ach klastra, na samym ko\u0144cu poka\u017c\u0119 procedur\u0119 pod\u0142\u0105czenia serwera klienckiego do ca\u0142ego systemu (b\u0119dzie zdecydowanie pro\u015bciej). Do zarz\u0105dzania OpenLDAP polecam klienta <a href=\"http:\/\/www.ldapadmin.org\/\">LDAP Admin<\/a>, prosty i skuteczny. w moim katalogu utworz\u0119 u\u017cytkownika ppisz kt\u00f3rego u\u017cyj\u0119 do dalszych test\u00f3w (nadajemy mu uprawnienia w domenie: kadmin.local \u2013q \u201caddprinc ppisz\u201d).<\/p>\n<p>W\u0142\u0105czamy mo\u017cliwo\u015b\u0107 zalogowania si\u0119 kontem OpenLDAP:<\/p>\n<p>authconfig &#8211;updateall &#8211;enableldap &#8211;enableldapauth &#8211;enablemkhomedir<\/p>\n<p>Autentykacj\u0119 ldap zapewnia us\u0142uga NSCD:<\/p>\n<p>[root@HDC2 ~]# cat \/etc\/nslcd.conf<br \/>\n<span style=\"font-family: Arial; font-size: xx-small;\"><strong><br \/>\nuid nslcd<br \/>\ngid ldap<\/strong><\/span><\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>uri ldaps:\/\/hdc1.hdfs.lab ldaps:\/\/hdc2.hdfs.lab<\/strong><\/span><\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>base dc=hdfs,dc=lab<\/strong><\/span><\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>bind_timelimit 30<br \/>\ntimelimit 30<br \/>\nidle_timelimit 3600<\/strong><\/span><\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>ssl on<br \/>\ntls_reqcert demand<br \/>\ntls_cacertdir \/etc\/openldap\/cacerts<br \/>\ntls_cacertfile \/etc\/openldap\/cacerts\/ca.crt\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # To jest ten sam plik co w \/etc\/openldap\/certs\/ca.crt<br \/>\ntls_ciphers HIGH:TLSv1.2:!aNULL:!eNULL<\/strong><\/span><\/p>\n<p>Restartujemy us\u0142ug\u0119 nscd i mo\u017cemy si\u0119 logowa\u0107 kontem z OpenLDAP oraz generowa\u0107 uprawnienia kerberos<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/hdc15.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"hdc15\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/hdc15_thumb.jpg\" alt=\"hdc15\" width=\"536\" height=\"250\" border=\"0\" \/><\/a><\/p>\n<p>Aby wszystko spi\u0105\u0107 razem, musimy jeszcze skonfigurowa\u0107 po\u0142\u0105czenie kerberosa z ldap za pomoc\u0105 GSSAPI.<\/p>\n<p>Tworzymy trzynasty plik LDIF:<\/p>\n<p>[root@hdc1 ldap]# cat 13_sasl.ldif<br \/>\n<span style=\"font-family: Arial; font-size: xx-small;\"><strong><br \/>\ndn: cn=config<br \/>\nchangetype: modify<br \/>\nadd: olcAuthzRegexp<br \/>\nolcAuthzRegexp: uid=([^,]+),cn=hdfs.lab,cn=gssapi,cn=auth<br \/>\nuid=$1,ou=Users,dc=hdfs,dc=lab<br \/>\n&#8211;<br \/>\nadd: olcSaslSecProps<br \/>\nolcSaslSecProps: noanonymous,noplain<br \/>\n&#8211;<br \/>\nadd: olcSaslRealm<br \/>\nolcSaslRealm: HDFS.LAB<\/strong><\/span><\/p>\n<p>Wgranie: ldapmodify -QY EXTERNAL -H ldapi:\/\/\/ -f 13_sasl.ldif<\/p>\n<p>Uzupe\u0142niamy plik \/etc\/openldap\/ldap.conf o dyrektywy GSSAPI:<\/p>\n<p>[root@hdc1 ~]# cat \/etc\/openldap\/ldap.conf<br \/>\n<span style=\"font-family: Arial; font-size: xx-small;\"><strong><br \/>\nBASE dc=hdfs,dc=lab<br \/>\nURI ldaps:\/\/hdc1.hdfs.lab ldaps:\/\/hdc2.hdfs.lab<\/strong><\/span><\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>TLS_CACERTDIR\u00a0\u00a0 \/etc\/openldap\/cacerts<br \/>\nTLS_CACERT\u00a0\u00a0\u00a0\u00a0\u00a0 \/etc\/openldap\/cacerts\/ca.crt<br \/>\nTLS_REQCERT\u00a0\u00a0\u00a0\u00a0 allow<\/strong><\/span><\/p>\n<p><span style=\"font-family: Arial; font-size: xx-small;\"><strong>SASL_NOCANON\u00a0\u00a0\u00a0 on<br \/>\nSASL_MECH\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GSSAPI<br \/>\nSASL_REALM\u00a0\u00a0\u00a0\u00a0\u00a0 HDFS.LAB<\/strong><\/span><\/p>\n<p align=\"justify\">Jak wida\u0107 w obu powy\u017cszych przypadkach, jako URI s\u0105 wskazane obydwa serwery OpenLDAP. O ile dzia\u0142a, to pytany zawsze b\u0119dzie pierwszy serwer, i tak jest ok, bileciki kerberosa s\u0105 przechowywane per w\u0119ze\u0142 klastra (mimo, \u017ce baza jest wsp\u00f3\u0142dzielona), wi\u0119c lepiej aby by\u0142y w jednym miejscu (inaczej po przeskoku trzeba b\u0119dzie wygenerowa\u0107 nowy ticket). Je\u015bli chodzi o konfiguracj\u0119 SSH w CentOS 7 to nie trzeba nic robi\u0107, tak skonfigurowany system pozwoli wykona\u0107 pe\u0142n\u0105 sekwencj\u0119:<\/p>\n<p align=\"justify\"><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/hdc16.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"hdc16\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/04\/hdc16_thumb.jpg\" alt=\"hdc16\" width=\"545\" height=\"350\" border=\"0\" \/><\/a>I to ju\u017c w\u0142a\u015bciwie koniec, pozostaje przygotowanie klienta kt\u00f3ry nie jest serwerem, w takim przypadku instalujemy nast\u0119puj\u0105ce pakiety:<\/p>\n<p>yum install nss-pam-ldapd pam_krb5 krb5-workstation openldap-clients cyrus-sasl-gssapi<\/p>\n<p>I wkopiowa\u0107 (z w\u0119z\u0142a klastra) pliki \/etc\/openldap\/ldap.conf \/etc\/krb5.conf \/etc\/nslcd.conf i ca.crt wkopiowa\u0107 do \/etc\/openldap\/certs i cacerts<\/p>\n<p>I na koniec TIP:<\/p>\n<p align=\"justify\">Taki komunikat: bdb_equality_candidates: (uid) not indexed wskazuje na brak potrzebnego indeksu (w nawiasie b\u0119dzie podany parametr).<\/p>\n<p align=\"justify\">Aby za\u0142o\u017cy\u0107 index tworzymy plik LDIF (wgrywamy standardowo, ldapmodify):<\/p>\n<p>dn: olcDatabase={2}hdb,cn=config<br \/>\nadd: olcDbIndex<br \/>\nolcDbIndex: uid eq<\/p>\n<p align=\"justify\">I to by by\u0142o na tyle, post wyszed\u0142 bardzo d\u0142ugi, ale wyczerpuje temat maksymalnie jak si\u0119 da\u0142o, je\u015bli kto\u015b ma wi\u0119ksze do\u015bwiadczenie w temacie i chcia\u0142by co\u015b podpowiedzie\u0107 to zach\u0119cam do komentowania.<\/p>\n<div style='text-align:left' class='yasr-auto-insert-visitor'><\/div>","protected":false},"excerpt":{"rendered":"<p>Dzisiaj zajmiemy si\u0119 kerberyzacj\u0105 LDAP, brzmi to troch\u0119 dziwnie, ale sprowadza si\u0119 do zainstalowania i skonfigurowania klastra sk\u0142adaj\u0105cego si\u0119 z wielu w\u0119z\u0142\u00f3w (N+) dzia\u0142aj\u0105cego w trybie aktywnym. Klaster ten b\u0119dzie serwowa\u0142 us\u0142ugi LDAP i Kerberos dla system\u00f3w Linuks. Baza danych &hellip; <a href=\"https:\/\/vm.piszki.pl\/?p=3638\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"yasr_overall_rating":0,"yasr_post_is_review":"","yasr_auto_insert_disabled":"","yasr_review_type":"Product","footnotes":""},"categories":[45],"tags":[131,130,129,128],"class_list":["post-3638","post","type-post","status-publish","format-standard","hentry","category-poradniki","tag-hadoop","tag-hdfs","tag-kerberos","tag-openldap"],"yasr_visitor_votes":{"stars_attributes":{"read_only":false,"span_bottom":false},"number_of_votes":2,"sum_votes":10},"_links":{"self":[{"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/posts\/3638"}],"collection":[{"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3638"}],"version-history":[{"count":3,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/posts\/3638\/revisions"}],"predecessor-version":[{"id":3641,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/posts\/3638\/revisions\/3641"}],"wp:attachment":[{"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3638"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3638"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3638"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}