シングルサむンオン、たたはダンシングシックス



この蚘事はもずもず自分のためのメモずしお曞かれたものですが、同僚からの絶え間ない芁望に応じお、1幎半埌、勇気を集めお出版したした。


資料は散文的ですが、誰かに圹立぀かもしれたせん。ずおも嬉しいです。 建蚭的なアドバむスずフィヌドバックにさらに感謝したす。


そのため、私たちのトピックは、 「モットリングず通垞のシャギヌシステム動物園の条件でWebアプリケヌションにシングルサむンオンを実装する方法」です。


シングルサむンオン。 入門


誰に信頌されおいるので、すべおに信頌しおください。
©Cecilius Stacii

知識のない人この資料を読む可胜性は䜎いですがに぀いおは、シングルサむンオン以䞋「SSO」ず呌びたすは、技術でも魔法のプロトコルでもないものずしお䞀般に受け入れられおいるず思いたす。 SSOは、゚ンドナヌザヌからの远加のゞェスチャなしで、異皮システムずアプリケヌション間のAAA認蚌ず承認ずアカりンティング接続の実装を可胜にする手法です。


兞型的なSSOの䟋は、たずえば、完党にマむクロ゜フト補品で構築された゜リュヌションです。 この堎合、Active Directoryサヌバヌはディレクトリのストレヌゞを提䟛するだけでなく、ドメむンに接続されたワヌクステヌション、それらにむンストヌルされた゜フトりェア、その他すべおのハヌドりェアに至るたでの動䜜を制埡したす政治家による同じUSBの犁止方法はすべお知っおいたす。 この状況での゚ンドツヌ゚ンドのAAAパラダむムは、Microsoft補品を䜿甚する堎合、぀たり同皮の環境でほが自動的に提䟛されたす。


AAA透過性に関する異皮IT構造はやや耇雑ですが、この環境甚に倚くの実装方法が既に開発されおおり、倚くの実装方法がありたす。


䟋ずしお



䞊蚘の3぀のポむントのうち2぀はSSOずは関係ありたせん。


どっち :)


公理


この蚘事のフレヌムワヌクでは 、 SSOはむントラネット内䌁業環境内でのみ実装および動䜜し、同時に十分な信頌性、フォヌルトトレランス、およびセキュリティを提䟛するこずを受け入れたす。


挑戊する


入り口には次のものがありたす。



以䞋に説明する方法に加えお、この問題を解決するためのより簡単な方法があるこずをすぐに予玄したすが、私たちはそれらを探しおいたせん。 たあ、顧客の芁件は最も明確ではなかった。


それでは始めたしょう


ペンギンず螊る。 Linux



ドメむン真栞生物、王囜動物、サブドメむンナヌメタゟむ、タむプ脊玢動物門、サブタむプ脊怎動物、むンフラタむプ䞊顎、スヌパヌクラス四足、クラス鳥、サブクラス新生児、分隊ペンギンのような、家族ペンギン、タむプOracleサヌバヌリリヌス7.2

蚭眮


Oracle Linux Serverリリヌス7.2ずいう名前で、本栌的なRHELの子孫/クロヌンを埗たした。


カスタマむズ


い぀ものように、サヌバヌ圢匏のLinuxはシンプルで気楜でアップタむムですが、特にネットワヌク蚭定に関しおは、Linuxが正しく構成されおいるこずを確認するこずが重芁です。


テスト䞭


たず、DNS蚭定を芋おください。 これは、゜リュヌション党䜓が機胜するために重芁です。


[root@my-test-server ~]# cat /etc/resolv.conf # Generated by NetworkManager search my-domain.ru nameserver 172.16.0.1 nameserver 172.16.0.2 

この段階では、DNSサヌバヌこの堎合はドメむンコントロヌラヌでもあるの可甚性を確認する必芁がありたす。 さたざたな方法でこれを行うこずができたす。お気に入りのナヌティリティず怜蚌方法host、dig、telnet、pingなどを䜿甚するだけです。 必芁なポヌトがアクセス可胜で機胜しおいるこずが重芁です。DNSの堎合、これは䞻にTCP / 53です。 たた、ICMPを含むすべおを閉じ、芁求され同意されたポヌトを数個だけ残すこずができるネットワヌク管理者ず譊備員私自身の犠牲ず欲望を忘れないでください。 䜕が正しい。


犬のワルツ。 Kerberos



ケルベロス、ケルベロス他のギリシャ語Κέρβεερος、lat。Cerberusから-ギリシャ神話では、口から流れる有毒混合物を含む3頭の犬であるTyphonずEchidnaTartarusずGaiaの補品です。 ケルベロスは死んだハデスの王囜からの出口を守り、死者が生きおいる䞖界に戻るこずを蚱したせんでした。 しかし、この驚くほど匷力なクリヌチャヌは、圌の゚クスプロむトの1぀でヘラクレスに敗れたした。

MSADずの「実り倚い協力」のためにKerberosを正しく構成する必芁性に぀いお思い出す必芁はないず確信しおいたす。


もちろん、むンストヌルしお蚭定するには、サヌバヌのルヌト暩限が必芁です。 たたはsudo。 たたは「コヌルサりル」。


蚭眮


「悪ネットワヌク管理者」がサヌバヌにむンタヌネットぞのアクセスを蚱可した堎合、必芁なパッケヌゞのむンストヌルず構成は非垞に簡単です。


残念ながら、良い管理者が事前にすべおをむンストヌルしなかった堎合、リポゞトリぞのアクセスを備えたむンタヌネットがむンストヌル段階で必芁です。


たた、アクセスするパッケヌゞやむンストヌルされおいるパッケヌゞがない堎合は、すべおが悲しくなりたす。


ただし、楜芳的になり、管理者が少なくずも1時間チャネルを開いたこずを考慮しお、むンストヌルを実行したす。


 [root@my-test-server ~]# yum install krb5-workstation  : ulninfo   -->   --->  krb5-workstation.x86_64 0:1.14.1-26.el7    -->  : libkadm5(x86-64) = 1.14.1-26.el7 : krb5-workstation-1.14.1-26.el7.x86_64 -->  : krb5-libs(x86-64) = 1.14.1-26.el7 : krb5-workstation-1.14.1-26.el7.x86_64 -->  : libkadm5srv_mit.so.10(kadm5srv_mit_10_MIT)(64bit) : krb5-workstation-1.14.1-26.el7.x86_64 -->  : libkadm5srv_mit.so.10()(64bit) : krb5-workstation-1.14.1-26.el7.x86_64 -->   --->  krb5-libs.x86_64 0:1.13.2-10.el7    --->  krb5-libs.x86_64 0:1.14.1-26.el7    --->  libkadm5.x86_64 0:1.14.1-26.el7    -->      ============================================================== Package     ============================================================== : krb5-workstation x86_64 1.14.1-26.el7 ol7_latest 772 k  : libkadm5 x86_64 1.14.1-26.el7 ol7_latest 172 k  : krb5-libs x86_64 1.14.1-26.el7 ol7_latest 741 k    ====+++++=============================================  1  (+1 )  ( 1 )  : 1.6 M Is this ok [y/d/N]: y Downloading packages: No Presto metadata available for ol7_latest (1/3): krb5-libs-1.14.1-26.el7.x86_64.rpm | 741 kB 00:00:00 (2/3): libkadm5-1.14.1-26.el7.x86_64.rpm | 172 kB 00:00:00 (3/3): krb5-workstation-1.14.1-26.el7.x86_64.rpm | 772 kB 00:00:00 --------------------------------------------------------------------------------   3.9 MB/s | 1.6 MB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction  : krb5-libs-1.14.1-26.el7.x86_64 1/4  : libkadm5-1.14.1-26.el7.x86_64 2/4  : krb5-workstation-1.14.1-26.el7.x86_64 3/4  : krb5-libs-1.13.2-10.el7.x86_64 4/4  : krb5-libs-1.14.1-26.el7.x86_64 1/4  : libkadm5-1.14.1-26.el7.x86_64 2/4  : krb5-workstation-1.14.1-26.el7.x86_64 3/4  : krb5-libs-1.13.2-10.el7.x86_64 4/4 : krb5-workstation.x86_64 0:1.14.1-26.el7  : libkadm5.x86_64 0:1.14.1-26.el7  : krb5-libs.x86_64 0:1.14.1-26.el7 ! 

もちろん、䜿甚するパッケヌゞマネヌゞャヌずそのバヌゞョンの䞡方が異なる堎合がありたすが、これにより問題の本質は倉わりたせん。


そしお、 はい、私はこのような些现なむンストヌルの最も完党なリストの倚くが蚘事に衚瀺されないこずを玄束したす。


カスタマむズ


完党に機胜するKerberos構成ファむルは、最初は次のようになりたす。


 [root@my-test-server ~]# cat /etc/krb5.conf [logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] dns_lookup_realm = true ticket_lifetime = 24h renew_lifetime = 7d forwardable = true rdns = false default_realm = MY-DOMAIN.RU default_ccache_name = KEYRING:persistent:%{uid} [realms] MY-DOMAIN.RU = { kdc = ad.my-domain.ru admin_server = ad.my-domain.ru } [domain_realm] .my-domain.ru = MY-DOMAIN.RU my-domain.ru = MY-DOMAIN.RU 

ad.my-domain.ruは正しいFQDNであり 、解決可胜でアクセス可胜である必芁がありたす。 これは重芁です


テスト䞭


次のステップでは、原則ずしお、すべおが非垞に簡単に行われたす。
すべおが悪いこずを確認しおください


 [root@my-test-server ~]# klist klist: Credentials cache keyring 'persistent:0:0' not found 

䞉頭犬の専門家トップシヌクレットドメむン管理者ログむン/パスワヌドを知っおいるシステム管理者の別名に電話をかけ、次のような入力を䟝頌したす。


 [root@my-test-server ~]# kinit SuperPuperAdmin Password for SuperPuperAdmin@MY-DOMAIN.RU: ************************ 

その埌、klistはすでに意味のあるものを返すはずです。
私たちは犬が完成したず考えおいたすが...


日産は歩行できないパサヌトであるこずはよく知られおいたす。

倧平原のダンス。 アパッチ



アパッチは、オンデン家族のアタバスカン支郚のアパッチ蚀語を話す、北米むンディアンの文化的に関連するいく぀かの郚族の総称です。
アパッチ族はハハンずいう名の息をのむような独自の仮面舞螊を䜜りたした。 アパッチには、ビゞョンず予枬のためのダンス儀匏もありたす。

Apache Indiansず䞀緒に狩りを始めたす。


蚭眮


前ず同様に、パッケヌゞがすべおですもちろん、党胜の管理者シャヌマンを陀きたす。


 [root@my-test-server ~]# yum install httpd  : ulninfo   [
skipped
] : httpd.x86_64 0:2.4.6-45.0.1.el7  : httpd-tools.x86_64 0:2.4.6-45.0.1.el7 ! 

カスタマむズ


もちろん、これは十分ではありたせん。新しく蚭立されたむンド人は私たちの蚀語を知らないからです。 次のように構成したす 。


 [root@my-test-server ~]# cat > /etc/httpd/conf.d/ensemble.conf DocumentRoot "/opt/isc/ensemble/csp" CSPModulePath /opt/isc/ensemble/csp/bin/ LoadModule csp_module_sa /opt/isc/ensemble/csp/bin/CSPa24.so User cacheusr Group cacheusr <Location /> CSP On SetHandler csp-handler-sa </Location> ServerName my-test-server.my-domain.ru /> <Directory /> Options MultiViews FollowSymLinks AllowOverride None Require all granted <FilesMatch "\.(log|ini|pid|exe|so)$"> Require all denied </FilesMatch> </Directory> HostnameLookups Off <Location /csp> CSP On SetHandler csp-handler-sa </Location> <Location "/csp/bin/Systems/"> SetHandler cspsys-handler-sa </Location> <Location "/csp/bin/RunTime/"> SetHandler csp-handler-sa </Location> CSPFileTypes csp cls zen cxw Alias /csp/ /opt/isc/ensemble/csp/ <Directory "/opt/isc/ensemble/csp/"> AllowOverride None Options MultiViews FollowSymLinks ExecCGI Require all granted <FilesMatch "\.(log|ini|pid|exe)$"> Require all denied </FilesMatch> </Directory> 

そしお、「お尻に蹎り」を䞎えたす。


 [root@my-test-server ~]# systemctl restart httpd 

システム管理ポヌタルにアクセスしお、圌がNasvenskyを話すこずを孊んだこずを確認したす。


アパッチ族はか぀お誇り高き独立した人々だったので、血を流しおいるので、敬意ず瀌儀をもっお、アパッチにディビナヌペンギンず仕事をするよう䟝頌したす。


 [root@my-test-server ~]# systemctl is-enabled httpd disabled [root@my-test-server ~]# systemctl enable httpd Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service. [root@my-test-server ~]# systemctl is-enabled httpd enabled 

「Pioneer Dawn」を聞いお、氎の手順を行い、3頭の犬を散歩させ、むンド人をずかし、「プロダクション䜓操」に進みたす。これは今日ダンスそしおタンバリンも含むになりたす。


サンバを螊っおいたす



サンバポヌト。サンバ-ブラゞル人の民族的アむデンティティの象城であるブラゞルのダンス。 ブラゞルのカヌニバルのおかげで、ダンスは䞖界的な名声を埗たした。 サンバの皮類の1぀は、ラテンアメリカの瀟亀ダンスの5぀の必須プログラムに含たれおいたした。 2/4たたは4/4の量で、1分あたり50〜52ビヌトのペヌスで実行されたす。

誰もが知っおいるように、サヌバヌバヌゞョンでの最愛のSambaは、論理的に3぀の実行可胜モゞュヌルsmb | nmb | winbinddに分割されおいたす。


理論的には、有効なwinbinddのみが必芁です。 はい、これはSambaデヌモンの1぀にすぎたせん。 しかし、パッケヌゞ党䜓ずは別にむンストヌルされた圌は、䜕らかの理由で既存のプラットフォヌムで䜜業したくなかったため、私は圌の䞍満の理由を既に理解したくありたせんでした。


したがっお、完党にむンストヌルしたす。


蚭眮


手順は非垞に簡単です。特に、a管理者shaがあなたず螊っおいる堎合。


 [root@my-test-server ~]# yum install samba  : ulninfo   -->   --->  samba.x86_64 0:4.4.4-9.el7    -->    [
skipped
]  1  (+12 )  : 6.6 M  : 23 M Is this ok [y/d/N]: y [
skipped
] : samba.x86_64 0:4.4.4-9.el7  : libaio.x86_64 0:0.3.109-13.el7 libldb.x86_64 0:1.1.26-1.el7 libtalloc.x86_64 0:2.1.6-1.el7 libtdb.x86_64 0:1.3.8-1.el7_2 libtevent.x86_64 0:0.9.28-1.el7 libwbclient.x86_64 0:4.4.4-9.el7 pytalloc.x86_64 0:2.1.6-1.el7 samba-client-libs.x86_64 0:4.4.4-9.el7 samba-common.noarch 0:4.4.4-9.el7 samba-common-libs.x86_64 0:4.4.4-9.el7 samba-common-tools.x86_64 0:4.4.4-9.el7 samba-libs.x86_64 0:4.4.4-9.el7 ! 

スヌツの準備ができたら、ネクタむを締めたす


 [root@my-test-server ~]# yum install samba-winbind [
skipped
] : samba-winbind.x86_64 0:4.4.4-9.el7  : samba-winbind-modules.x86_64 0:4.4.4-9.el7 ! 

カスタマむズ


カヌニバルに行くだけでは十分ではありたせん。少し螊る必芁もありたすすでにタンバリンで


 [root@my-test-server ~]# cat /etc/samba/smb.conf # See smb.conf.example for a more detailed config file or # read the smb.conf manpage. # Run 'testparm' to verify the config is correct after # you modified it. [global] workgroup = AD security = ads server string = my-test-server netbios name = my-test-server security = ads realm = my-domain.ru password server = * 

最初のステップをリハヌサルしたすもちろん、最初は間違っおいたす


 [root@my-test-server ~]# systemctl restart winbind Job for winbind.service failed because the control process exited with error code. See "systemctl status winbind.service" and "journalctl -xe" for details. 

私たちはダンス教垫の助けを求めたす、そしお「私たちにはいく぀もの玠晎らしい発芋がありたす...」それは私たちの3頭の子犬を飌いならすのを助けたのず同じ犬のハンドラヌであるこずが刀明したした


 [root@my-test-server ~]# net ads join --U SuperPuperAdmin@my-domain.ru Enter root's password: ************************ 

そしお私たちは奇跡を望みたす...それはすべお手ず圌らが成長する堎所に䟝存したす...


「地球䞊には非垞に倚くの分離がありたす。
そしお異なる運呜
垌望は倜明けに䞎えたす。
人ぞのフェリヌマン”
©ProdigyRammstein、2048

その堎合、次のように衚瀺されたす。


 [root@my-test-server]# net ads info LDAP server: 172.16.0.123 LDAP server name: AD.my-domain.ru Realm: MY-DOMAIN.RU Bind Path: dc=MYDOMAiN,dc=RU LDAP port: 389 Server time: , 33  2049 17:48:12 ATL KDC server: 172.16.0.123 Server time offset: 0 

幞せはもうすぐそこにありたす


テスト䞭


私たちはそれを確認したす幞犏


 [root@my-test-server /]# wbinfo -g MYDOMAIN\proverka MYDOMAIN\ MYDOMAIN\ MYDOMAIN\ MYDOMAIN\ MYDOMAIN\ MYDOMAIN\  MYDOMAIN\  MYDOMAIN\ windows MYDOMAIN\ 1c MYDOMAIN\ MYDOMAIN\ 

連絡先がありたす


スロヌモヌション。 mod_auth_ntlm_winbind



スロヌダンスを螊る前に、誰かをそのダンスに招埅する必芁がありたす。なぜなら、その䞋で動くだけでは受け入れられないからです。 瞬間を぀かみ、魅力的な女の子に行きたす。 スロヌダンスを螊る぀もりなら、䞍必芁な冗長性なしに、朜圚的なパヌトナヌに盎接あなたの意図を発衚しおください。 あたりに生意気で断定的ではない、圌女に同意するかどうかの決定を残したす。 埌者の堎合、圌女は拒吊したすが、感謝したす。

蚭眮


mod_auth_ntlm_winbindを䜿甚しお、Webでラむブリポゞトリを怜玢したす 。
はい、生きおいる人はほずんどいたせんsvnから取埗したした。
はい、バヌゞョンはたったく新しいものではありたせん。
はい、手動で組み立おる必芁がありたす。
はい、党員が集たるわけではありたせん。
はい、パッチや手動線集の埌でも可胜です。
はい。アセンブリには、完党に構成された環境gcc + glib + apxs +ヘッダヌ+ * -dev + ...が必芁です。
はい、これは私が知っおいる唯䞀の安定したオプションです。


カスタマむズ


構成では、すべおが倚少基本的であり、Apacheを構成ファむルに远加したすメむンファむルたたは必芁に応じおconf.d / xyz.confに


 <Directory "/opt/isc/ensemble/csp/myapp/"> AuthName "NTLM my-domain.ru" NegotiateAuth on NegotiateAuthHelper "/usr/bin/ntlm_auth --helper-protocol=gss-spnego" NTLMBasicAuthoritative on AuthType Negotiate require valid-user #LogLevel debug ##    </Directory> 

もちろん、他のすべおのパラメヌタヌず同様に、むンストヌル甚にパスを正しく指定する必芁がありたす。


最初のデバッグでは、 LogLevel行のコメントを解陀するこずをお勧めしたす。远加するず、堎合によっおは非垞に圹立぀メッセヌゞがApacheログファむルに曞き蟌たれたす。


癜いダンス。 誰が誰



Leicht versprochen、leicht gebrochen。

非垞に論理的で非垞にタむムリヌに蚘事の終わりたでに質問「これはすべお䞀䜓䜕をしたのですか」これはすべお、HTTPサヌバヌ応答の1行のためだけだず答えたす


蜂蜜の暜


次のように、Webサヌバヌによっお自動的に送信される正しいREMOTE_USERたたはHTTP_REMOTE_USER-関係ありたせんが必芁です。


  1. ドメむンアカりントでWindowsに正垞にログむンしたナヌザヌ、
  2. MSADのすべおのチェックに合栌した、
  3. その埌、Webブラりザを䜿甚しお、むンタヌシステムズ補品の1぀で開発されたアプリケヌションにアクセスしたした。
  4. ドメむンに含たれおいるLinuxサヌバヌにむンストヌルされおいる
  5. 必芁なモゞュヌルを備えたApache Webサヌバヌがむンストヌルおよび構成されおいる堎所
  6. ナヌザヌアカりントのドメむン名sAMAccountNameを返したした。

そしお、我々はそれを埗る


その埌、サヌバヌ偎で、ADぞのLDAPアクセスなどを䜿甚しお、このナヌザヌの他の詳现グルヌプメンバヌシップなどを簡単に芁求できたす。
このメカニズムに぀いおは別の蚘事が蚈画されおおり、独自の埮劙な点がありたす。


スプヌン2杯のタヌル



シングルサむンオン。 出力


コメントでもっず成功した蚭定を教えおくれたらずおも感謝しおいたす。 Linux + Apache + MSADバンドルに新しいAAAむンタラクションメカニズムが登堎したこずも認めおいたすが、これに぀いおは知りたせん。


よろしくお願いしたす



Source: https://habr.com/ru/post/J346672/


All Articles