{"id":3714,"date":"2019-09-13T10:37:38","date_gmt":"2019-09-13T08:37:38","guid":{"rendered":"https:\/\/vm.piszki.pl\/?p=3714"},"modified":"2020-01-21T07:43:26","modified_gmt":"2020-01-21T06:43:26","slug":"bezpieczny-serwer-plikowy-oparty-o-samba-ctdb-cephfs-i-openldap","status":"publish","type":"post","link":"https:\/\/vm.piszki.pl\/?p=3714","title":{"rendered":"Bezpieczny serwer plikowy oparty o Samba, CTDB, CephFS i OpenLDAP"},"content":{"rendered":"<p align=\"justify\">Celem dzisiejszego \u0107wiczenia b\u0119dzie uruchomienie bezpiecznego, czyli zapewniaj\u0105cego pe\u0142ne HA, klastra Samby za pomoc\u0105 kt\u00f3rego b\u0119dziemy serwowa\u0107 pliki bezpo\u015brednio z CephFS oraz autoryzowa\u0107 u\u017cytkownik\u00f3w na poziomie OpenLDAP. Najbli\u017cszym odpowiednikiem tej konfiguracji jest us\u0142uga Failover Cluster + DFS dost\u0119pna w Microsoft Windows Server 2012+. Konfiguracj\u0119 <a href=\"https:\/\/vm.piszki.pl\/cloudstack-instalacja-i-konfiguracja-czesc-3-przygotowanie-wezla\/\">Ceph<\/a> oraz <a href=\"https:\/\/vm.piszki.pl\/konfiguracja-openldap-i-kerberos-w-centos-7\/\">OpenLDAP<\/a> znajdziecie w podlinkowanych artyku\u0142ach, tutaj skupimy si\u0119 g\u0142\u00f3wnie na CTDB i Samba. Clustered Trivial Data Base, bo tak rozwija si\u0119 ten skr\u00f3t, zapewnia sp\u00f3jno\u015b\u0107 sesji u\u017cytkownik\u00f3w pomi\u0119dzy wieloma w\u0119z\u0142ami. Nadzoruje tak\u017ce prac\u0119 samej samby. W opisywanej konfiguracji zostanie u\u017cyty modu\u0142 VFS samba-vfs-ceph (<a href=\"https:\/\/www.samba.org\/~ddiss\/slides\/ceph-samba-ses-lightning-talk.pdf\">Samba Gateway for CephFS<\/a>), modu\u0142 ten pozwala sambie pracowa\u0107 poprawnie (natywnie) z Ceph. Za pomoc\u0105 tego modu\u0142u Samba zrzuca na CephFS wszystkie operacje plikowe (otwarcie, zablokowanie, zamkni\u0119cie itp.). Aby zapewni\u0107 sp\u00f3jno\u015b\u0107 z ostatnimi konfiguracjami, u\u017cytkownicy b\u0119d\u0105 brani z <a href=\"https:\/\/vm.piszki.pl\/konfiguracja-openldap-i-kerberos-w-centos-7\/\">OpenLDAP<\/a> (b\u0119dzie tam te\u017c przechowywana ca\u0142a konfiguracja Samby). Dzi\u0119ki takiemu podej\u015bciu zyskamy sp\u00f3jn\u0105, redundantn\u0105 konfiguracj\u0119, kt\u00f3ra p\u0142ynnie po\u0142\u0105czy wiele komponent\u00f3w. Ze wzgl\u0119du na u\u017cycie najnowszych wersji, kt\u00f3re nie s\u0105 dost\u0119pne w CentOS 7 ani Ubuntu 18, ca\u0142a konfiguracja zostanie przeprowadzona w systemie Fedora Server 29 (ale my\u015bl\u0119, \u017ce bez problemu postawimy ja na CentOS 8).<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/09\/smb5.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"smb5\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/09\/smb5_thumb.jpg\" alt=\"smb5\" width=\"505\" height=\"297\" border=\"0\" \/><\/a><\/p>\n<p><!--more--><\/p>\n<p align=\"justify\">Przygotowanie Fedora 29 (CentOS 8):<br \/>\nyum install mc wget curl numactl git tuned mailx yum-utils deltarpm nano bash-completion net-tools bind-utils lsof screen bmon ntp rsync nmap socat ntpdate dconf authconfig nss-pam-ldapd pam_krb5 krb5-workstation openldap-clients cyrus-sasl-gssapi langpacks-pl oddjob-mkhomedir openldap-clients samba-vfs-cephfs ctdb samba-winbind-clients smbldap-tools ceph-common samba-client<\/p>\n<p align=\"justify\">U\u017cyjemy dw\u00f3ch w\u0119z\u0142\u00f3w Samby, ca\u0142o\u015b\u0107 b\u0119dzie si\u0119 \u0142\u0105czy\u0107 do serwer\u00f3w HDC1 i HDC2 opisanych w <a href=\"https:\/\/vm.piszki.pl\/konfiguracja-openldap-i-kerberos-w-centos-7\/\">poprzednim<\/a> artykule. Serwery otrzyma\u0142y nazwy:<\/p>\n<p>smb1.hdfs.lab \u2013 192.168.30.51<\/p>\n<p>smb2.hdfs.lab &#8211; 192.168.30.51<\/p>\n<p align=\"justify\">Oraz dodatkowo, na potrzeby klastra, zosta\u0142 przygotowany jeden, publiczny adres smb.hdfs.lab \u2013 192.168.30.50 poprzez kt\u00f3ry b\u0119d\u0105 udost\u0119pniane zasoby Samby. Ka\u017cdy z serwer\u00f3w (w moim przypadku wirtualne maszyny) maj\u0105 po dwa interfejsy sieciowe, pierwszy pe\u0142ni rol\u0119 MGMT a drugi PUBLIC. System serwer\u00f3w SMB musi by\u0107 w pe\u0142ni zintegrowany z OpenLDAP tak jak by\u0142o to pokazane w tym <a href=\"https:\/\/vm.piszki.pl\/konfiguracja-openldap-i-kerberos-w-centos-7\/\">artykule<\/a> (u\u017cytkownik LDAP jest jednocze\u015bnie u\u017cytkownikiem POSIX i SAMBA). Serwer OpenLDAP musi mie\u0107 dodatkowo wgrany schemat SAMBA, plik \/usr\/share\/doc\/samba\/LDAP\/samba.ldif (dost\u0119pny na Fedora 29) nale\u017cy za\u0142adowa\u0107 (z poziomu serwera LDAP) poleceniem ldapadd -Y EXTERNAL -H ldapi:\/\/\/ -f samba.ldif. Na obydwu w\u0119z\u0142ach pliki konfiguracyjne musz\u0105 by\u0107 takie same, dodatkowo musi by\u0107 zamontowany udzia\u0142 CephFS kt\u00f3ry zapewni obs\u0142ug\u0119 pliku lock dla us\u0142ugi CTDB (tutaj: \/data\/ctdb\/lock\/ctdb.lck). Czyli nie tylko wykorzystujemy CephFS jako udost\u0119pniany po CIFS udzia\u0142 sieciowy ale te\u017c jako zas\u00f3b klastrowy pod plik lock CTDB (posiadanie takiego sklastrowanego udzia\u0142u jest wymagane do poprawnej przacy CTDB). Jak widzicie, ca\u0142e \u015brodowisko jest \u015bci\u015ble ze sob\u0105 zintegrowane. Na obydwu w\u0119z\u0142ach klastra konfigurujemy samb\u0119 w identyczny spos\u00f3b, plik sbm.conf:<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/09\/smb1.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"smb1\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/09\/smb1_thumb.jpg\" alt=\"smb1\" width=\"471\" height=\"469\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">Jak widzicie, uprawnienia trzymane s\u0105 w OpenLDAP, jest to do\u015b\u0107 uproszczona konfiguracja, wymaga jedynie, aby u\u017cytkownik zautoryzowa\u0142 si\u0119 w OpenLDAP i uzyska on automatycznie uprawnienia do zapisu i odczytu. Dodatkowo musimy zapisa\u0107 sobie lokalnie has\u0142o u\u017cytkownika kt\u00f3rym autoryzujemy si\u0119 w LDAP: smbpasswd -w P@$$w0rd<\/p>\n<p align=\"justify\">Samba si\u0119ga wprost do pliku ceph.conf zawieraj\u0105cego informacj\u0119 gdzie s\u0105 monitory Ceph, wprost jest te\u017c podany u\u017cytkownik kt\u00f3rym Samba pod\u0142\u0105cza si\u0119 do Ceph (samba.gw). W moim przypadku klaster Ceph to zupe\u0142nie inne maszyny ni\u017c te obs\u0142uguj\u0105ce Samb\u0119.<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/09\/smb2.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"smb2\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/09\/smb2_thumb.jpg\" alt=\"smb2\" width=\"470\" height=\"190\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">U\u017cytkownika i has\u0142o generujemy poleceniem: ceph auth get-or-create client.samba.gw mon 'allow r&#8217; osd 'allow *&#8217; mds 'allow *&#8217; -o ceph.client.samba.gw.keyring<\/p>\n<p align=\"justify\">Przejd\u017amy teraz do CTDB, us\u0142uga ta dzia\u0142a na bardzo podobnej zasadzie co KeepaliveD, wykorzystuje protok\u00f3\u0142 VRRP do sprawdzania czy dany w\u0119ze\u0142 \u017cyje i odpowiada. Na ka\u017cdym w\u0119\u017ale konfiguracja r\u00f3\u017cni si\u0119 tylko adresem IP w\u0119z\u0142a. Plik \/etc\/ctdb\/ctdb.conf :<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/09\/smb3.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"smb3\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/09\/smb3_thumb.jpg\" alt=\"smb3\" width=\"465\" height=\"246\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">W pliku \/etc\/ctdb\/nodes przechowujemy IP w\u0119z\u0142\u00f3w klastra a w pliku \/etc\/ctdb\/public_addresses podajemy jeden lub wiele adres\u00f3w publicznych oraz interfejs na kt\u00f3rym us\u0142uga b\u0119dzie nas\u0142uchiwa\u0107.<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/09\/smb4.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"smb4\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/09\/smb4_thumb.jpg\" alt=\"smb4\" width=\"449\" height=\"131\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">Dodatkowo w\u0142\u0105czamy odpowiednie skrypty:<\/p>\n<p align=\"justify\"><!--StartFragment --><\/p>\n<div>ctdb event script enable legacy 00.ctdb<br \/>\nctdb event script enable legacy 01.reclock<br \/>\nctdb event script enable legacy 05.system<br \/>\nctdb event script enable legacy 10.interface<br \/>\nctdb event script enable legacy 50.samba<\/div>\n<p align=\"justify\"><!--EndFragment --><\/p>\n<p align=\"justify\">Ca\u0142y klaster mo\u017ce by\u0107 tak skonfigurowany, \u017ce b\u0119dziemy mieli wiele IP publicznych, i ka\u017cdy z nich mo\u017ce nas\u0142uchiwa\u0107 w innym w\u0119\u017ale, ca\u0142o\u015b\u0107 mo\u017ce by\u0107 np. skonfigurowana w jeden rekord DNS dzia\u0142aj\u0105cy jako round robin co zwi\u0119kszy dost\u0119pno\u015b\u0107 udzia\u0142u. W moim przypadku mamy dwa w\u0119z\u0142y i jeden publiczny IP, typowy failover. Nale\u017cy pami\u0119ta\u0107, \u017ce ca\u0142o\u015bci\u0105 steruje us\u0142uga CTDB, to ona uruchamia i stopuje Samb\u0119. Jak to dzia\u0142a? W przypadku takiej konfiguracji Samba dzia\u0142a jak typowe proxy, autoryzuje u\u017cytkownika i ca\u0142o\u015b\u0107 operacji dyskowych kieruje do CephFS. Oznacza to, \u017ce transfer jaki osi\u0105gniemy jest r\u00f3wny wydajno\u015bci sieci publicznej obs\u0142uguj\u0105cej Ceph i karty sieciowej w maszynie obs\u0142uguj\u0105cej CTDB. W naszej konfiguracji mo\u017cemy zastosowa\u0107 pewn\u0105 modyfikacj\u0119, mamy lokalnie zamontowany zas\u00f3b CephFS, mo\u017cemy go te\u017c z tego poziomu wyeksportowa\u0107.<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/09\/smb6.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"smb6\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2019\/09\/smb6_thumb.jpg\" alt=\"smb6\" width=\"240\" height=\"94\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">Do\u0142o\u017cenie takiego kawa\u0142ka do konfiguracji smb.conf spowoduje, \u017ce wyeksportujemy standardowy udzia\u0142 lokalny (z uprawnieniami jak wy\u017cej). R\u00f3\u017cnica w dzia\u0142aniu jest taka, \u017ce wszelkie operacje dyskowe bierze na siebie ceph-client i dodatkowo mamy do czynienia z lokalnym buforem dyskowym w RAM. Z jednej strony jest szybciej, RAM jest wykorzystywany jako cache zapisu z drugiej troch\u0119 mniej bezpiecznie, je\u015bli maszyna ulegnie awarii z danymi w cache, b\u0119dziemy mieli straty w danych. Podsumowuj\u0105c, wy\u017cej opisana konfiguracja pozwala w spos\u00f3b ca\u0142kowicie natywny i zintegrowany wystawi\u0107 jako udzia\u0142 CIFS zas\u00f3b CephFS w spos\u00f3b bezpieczny i wysoko dost\u0119pny.<\/p>\n<div style='text-align:left' class='yasr-auto-insert-visitor'><\/div>","protected":false},"excerpt":{"rendered":"<p>Celem dzisiejszego \u0107wiczenia b\u0119dzie uruchomienie bezpiecznego, czyli zapewniaj\u0105cego pe\u0142ne HA, klastra Samby za pomoc\u0105 kt\u00f3rego b\u0119dziemy serwowa\u0107 pliki bezpo\u015brednio z CephFS oraz autoryzowa\u0107 u\u017cytkownik\u00f3w na poziomie OpenLDAP. Najbli\u017cszym odpowiednikiem tej konfiguracji jest us\u0142uga Failover Cluster + DFS dost\u0119pna w Microsoft &hellip; <a href=\"https:\/\/vm.piszki.pl\/?p=3714\">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":[93,45],"tags":[103,138,141,142,139,143,140],"class_list":["post-3714","post","type-post","status-publish","format-standard","hentry","category-nowosci","category-poradniki","tag-ceph","tag-cephfs","tag-cifs","tag-ctdb","tag-samba","tag-samba-gateway-for-cephfs","tag-smb"],"yasr_visitor_votes":{"stars_attributes":{"read_only":false,"span_bottom":false},"number_of_votes":0,"sum_votes":0},"_links":{"self":[{"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/posts\/3714"}],"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=3714"}],"version-history":[{"count":6,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/posts\/3714\/revisions"}],"predecessor-version":[{"id":3738,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/posts\/3714\/revisions\/3738"}],"wp:attachment":[{"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3714"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3714"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3714"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}