
Red Hat Enterprise Linux release 8.5 (Ootpa)
새로운 GSSAPI 모듈(mod_auth_kerb 대체)을 사용하여 Kerberos 인증을 사용하여 현재 실행 중인 시스템에서 Apache 가상 호스트를 실행하려고 합니다 .
또한 덕분에 LDAP를 통해 사용자를 인증하도록 LDAP 지시문을 구성했습니다 mod_ldap
.
나의 krb5.conf
:
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = MY.DOMAIN
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
forwardable = yes
[realms]
MY.DOMAIN = {
kdc = ADserver.my.domain
a_server = ADserver.my.domain
default_domain = my.domain
}
[domain_realm]
.kerberos.server = MY.DOMAIN
.my.domain = MY.DOMAIN
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
키탭이 할당된 사용자를 만들었습니다. 내 사용자 이름은 " usersso
" 입니다.
SPN 정보:
C:\Users\me>setspn -L usersso
Registered ServicePrincipalNames for CN=UserSso,OU=Users,DC=MY,DC=DOMAIN:
HTTP/myserver.my.domain
C:\Users\me>setspn -Q HTTP/myserver.my.domain
Checking domain DC=MY,DC=DOMAIN
CN=UserSso,OU=Users,DC=MY,DC=DOMAIN
HTTP/myserver.my.domain
Existing SPN found!
내 키탭을 내 아파치 서버로 보냈습니다.
[root@myserver conf.d]# klist -ek /etc/httpd/usersso.keytab
Keytab name: FILE:/etc/httpd/usersso.keytab
KVNO Principal
---- --------------------------------------------------------------------------
4 HTTP/[email protected] (aes256-cts-hmac-sha1-96)
키탭 테스트:
[root@myserver httpd]# kinit -V -kt /etc/httpd/usersso.keytab -p HTTP/[email protected]
Using default cache: /tmp/krb5cc_0
Using principal: HTTP/[email protected]
Using keytab: /etc/httpd/usersso.keytab
Authenticated to Kerberos v5
[root@myserver httpd]# klist -Af
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: HTTP/[email protected]
Valid starting Expires Service principal
16/06/2022 13:03:23 16/06/2022 23:03:23 krbtgt/[email protected]
renew until 17/06/2022 13:03:23, Flags: FPRIA
키탭은 괜찮은 것 같습니다.
이제 내 virtualhost 구성은 다음과 같습니다.
<VirtualHost 192.168.168.168:80>
ServerName myserver.my.domain
ErrorLog /var/log/httpd/myserver.my.domain_error.log
TransferLog /var/log/httpd/myserver.my.domain_access.log
LogLevel debug
<Location />
AuthType GSSAPI
AuthName "GSSAPI Single Sign On Login"
GssapiBasicAuth On
GssapiBasicAuthMech krb5
GssapiAllowedMech krb5
GssapiCredStore keytab:/etc/httpd/usersso.keytab
GssapiLocalName On
BrowserMatch Windows gssapi-no-negotiate
AuthLDAPURL ldap://ldapserver:10400/ou=users,o=enterprise,dc=city,dc=fr?uid?sub?(objectclass=person)
AuthLDAPGroupAttribute member
AuthLDAPBindDN "cn=apache,ou=users,o=enterprise,dc=city,dc=fr"
AuthLDAPBindPassword "XXXX"
AuthzSendForbiddenOnFailure On
Require ldap-group cn=group_to_authenticate_users,ou=Groupe,ou=Profil,o=enterprise,dc=city,dc=fr
</Location>
# tag::TLSClient[]
SSLProxyEngine on
SSLProxyProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLProxyCipherSuite HIGH:!aNULL:!MD5
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
SSLProxyVerifyDepth 10
SSLOCSPEnable off
# end::TLSClient[]
ProxyPass / https://anotherserver:443/
ProxyPassReverse / https://anotherserver:443/
</VirtualHost>
내 가상 호스트에 액세스하려고 하면 다음으로 직접 전송되지 않습니다.anotherserver
Google Chrome 브라우저에 인증 창 프롬프트가 표시됩니다(이는 Kerberos 인증이 제대로 작동하지 않음을 의미함).
Access_log는 다음과 같이 말합니다.
10.10.10.10(me) - - [16/Jun/2022:11:53:21 +0200] "GET / HTTP/1.1" 401 381
오류 로그 내용은 다음과 같습니다.
[Thu Jun 16 12:49:42.867213 2022] [authz_core:debug] [pid 8154:tid 139726585538304] mod_authz_core.c(820): [client 10.10.10.10:62252] AH01626: authorization result of Require ldap-group cn=group_to_authenticate_users,ou=Groupe,ou=Profil,o=enterprise,dc=city,dc=fr: denied (no authenticated user yet)
[Thu Jun 16 12:49:42.867231 2022] [authz_core:debug] [pid 8154:tid 139726585538304] mod_authz_core.c(820): [client 10.10.10.10:62252] AH01626: authorization result of <RequireAny>: denied (no authenticated user yet)
[Thu Jun 16 12:49:42.867256 2022] [auth_gssapi:debug] [pid 8154:tid 139726585538304] mod_auth_gssapi.c(901): [client 10.10.10.10:62252] URI: /, no main, no prev
[Thu Jun 16 12:49:42.867273 2022] [auth_gssapi:info] [pid 8154:tid 139726585538304] [client 10.10.10.10:62252] NO AUTH DATA Client did not send any authentication headers
마지막으로 프롬프트 자격 증명 Chrome 브라우저를 통해 자격 증명을 입력하면 내 LDAP 그룹에 성공적으로 인증되고 내 그룹에 액세스할 수 있습니다.anotherserver
Kerberos GSSAPI 덕분에 SSO가 작동하지 않으므로 자격 증명을 수동으로 입력해야 합니다. .. :(
curL 결과 : WWW-authenticate : Negotiate
응답 헤더가 있습니다.
curl -k -L http://myserver.my.domain/ -v
* Trying 192.168.168.168:80...
* TCP_NODELAY set
* Connected to myserver.my.domain (192.168.168.168) port 80 (#0)
> GET / HTTP/1.1
> Host: myserver.my.domain
> User-Agent: curl/7.65.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 401 Unauthorized
< Date: Thu, 16 Jun 2022 10:57:31 GMT
< Server: Apache/2.4.37 (Red Hat Enterprise Linux) OpenSSL/1.1.1k mod_auth_gssapi/1.6.1
< WWW-Authenticate: Negotiate
< WWW-Authenticate: Basic realm="GSSAPI Single Sign On Login"
< Content-Length: 381
< Content-Type: text/html; charset=iso-8859-1
<
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>401 Unauthorized</title>
</head><body>
<h1>Unauthorized</h1>
<p>This server could not verify that you
are authorized to access the document
requested. Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn't understand how to supply
the credentials required.</p>
</body></html>
* Connection #0 to host myserver.my.domain left intact
누군가 이 문제에 대해 저를 도와줄 수 있나요?
감사해요 !
편집하다 :
마침내 해결책을 찾았습니다!
- 나는 지웠다 "
BrowserMatch Windows gssapi-no-negotiate
내 Apache conf에서 - 그리고 중지 + 비활성화
gssproxy
그리고 RHEL8.6에서 여전히 작업할 수 없기 때문에 서비스를 - 그런 다음 Apache 오류 로그를
Environment=GSS_USE_PROXY
방지하려면 0으로 변경하는 것을 잊지 마십시오 ."gss_localname() input error"