簡體   English   中英

日志:啟動處理期間連接失敗:用戶=數據庫=致命:用戶“postgres”的 GSSAPI 身份驗證失敗

[英]LOG: connection failed during start up processing: user= database= FATAL: GSSAPI authentication failed for user "postgres"

我正在嘗試為 GSSAPI 配置 Kerberos 目前我有兩個節點,一個是 KDC 服務器(windows server 2016),另一個是 Postgres-server(Ubuntu)。 我在 kdc-server 上創建了 Active Directory,並創建了名為 postgres 的用戶,並選擇了“密碼永不過期”選項。

然后我安裝了 MIT 的 kerbrose 客戶端。 這是 kdc 服務器上的 krb5.ini。

[libdefaults]
    default_realm = HIGHGO.CA

# The following krb5.conf variables are only for MIT Kerberos.
    kdc_timesync = 1
    ccache_type = 4
    forwardable = true
    proxiable = true

# The following encryption type specification will be used by MIT Kerberos
# if uncommented.  In general, the defaults in the MIT Kerberos code are
# correct and overriding these specifications only serves to disable new
# encryption types as they are added, creating interoperability problems.
#
# The only time when you might need to uncomment these lines and change
# the enctypes is if you have local software that will break on ticket
# caches containing ticket encryption types it doesn't know about (such as
# old versions of Sun Java).

#   default_tgs_enctypes = des3-hmac-sha1
#   default_tkt_enctypes = des3-hmac-sha1
#   permitted_enctypes = des3-hmac-sha1

# The following libdefaults parameters are only for Heimdal Kerberos.
    fcc-mit-ticketflags = true

[realms]
    HIGHGO.CA = {
        kdc = kdc.highgo.ca
        admin_server = kdc.highgo.ca
    }
    ATHENA.MIT.EDU = {
        kdc = kerberos.mit.edu
        kdc = kerberos-1.mit.edu
        kdc = kerberos-2.mit.edu:88
        admin_server = kerberos.mit.edu
        default_domain = mit.edu
    }
    ZONE.MIT.EDU = {
        kdc = casio.mit.edu
        kdc = seiko.mit.edu
        admin_server = casio.mit.edu
    }
    CSAIL.MIT.EDU = {
        admin_server = kerberos.csail.mit.edu
        default_domain = csail.mit.edu
    }
    IHTFP.ORG = {
        kdc = kerberos.ihtfp.org
        admin_server = kerberos.ihtfp.org
    }
    1TS.ORG = {
        kdc = kerberos.1ts.org
        admin_server = kerberos.1ts.org
    }
    ANDREW.CMU.EDU = {
        admin_server = kerberos.andrew.cmu.edu
        default_domain = andrew.cmu.edu
    }
        CS.CMU.EDU = {
                kdc = kerberos-1.srv.cs.cmu.edu
                kdc = kerberos-2.srv.cs.cmu.edu
                kdc = kerberos-3.srv.cs.cmu.edu
                admin_server = kerberos.cs.cmu.edu
        }
    DEMENTIA.ORG = {
        kdc = kerberos.dementix.org
        kdc = kerberos2.dementix.org
        admin_server = kerberos.dementix.org
    }
    stanford.edu = {
        kdc = krb5auth1.stanford.edu
        kdc = krb5auth2.stanford.edu
        kdc = krb5auth3.stanford.edu
        master_kdc = krb5auth1.stanford.edu
        admin_server = krb5-admin.stanford.edu
        default_domain = stanford.edu
    }
        UTORONTO.CA = {
                kdc = kerberos1.utoronto.ca
                kdc = kerberos2.utoronto.ca
                kdc = kerberos3.utoronto.ca
                admin_server = kerberos1.utoronto.ca
                default_domain = utoronto.ca
    }

[domain_realm]
    .mit.edu = ATHENA.MIT.EDU
    mit.edu = ATHENA.MIT.EDU
    .media.mit.edu = MEDIA-LAB.MIT.EDU
    media.mit.edu = MEDIA-LAB.MIT.EDU
    .csail.mit.edu = CSAIL.MIT.EDU
    csail.mit.edu = CSAIL.MIT.EDU
    .whoi.edu = ATHENA.MIT.EDU
    whoi.edu = ATHENA.MIT.EDU
    .stanford.edu = stanford.edu
    .slac.stanford.edu = SLAC.STANFORD.EDU
        .toronto.edu = UTORONTO.CA
        .utoronto.ca = UTORONTO.CA

創造原則

setspn -A postgres/pg.highgo.ca@HIGHGO.CA postgres

創建原理后,我使用以下命令對其進行了測試

c:\Users\administrator\Desktop>kinit postgres
Password for postgres@HIGHGO.CA:

這工作正常。

這就是我創建密鑰選項卡的方式

ktpass -out pgkt.keytab -princ postgres/pg.highgo.ca@HIGHGI.CA
-mapUser enterprisedb -pass Casper@12 -crypto all -ptype KRB5_NT_PRINCIPAL

並在 postgres 服務器中復制此文件,並使用以下權限將其替換為文件 /etc/krb5.keytab。

chmod 600 /etc/krb5.keytab

這是我在 linux 和 windows 上的 /etc/host 條目。

192.168.100.112 pg.highgo.ca
192.168.100.114 kdc.highgo.ca

我在 postgress.conf 中輸入了一個條目。

krb_server_keyfile = '/etc/krb5.keytab'

這是 pg_hba.conf 條目。

 host     all             all              0.0.0.0/0               gss include_realm=0

之后我嘗試使用以下命令訪問 postgress 服務器。

psql -U postgres -d postgress -h 192.168.100.114

作為回應,我在 windows 上收到以下錯誤。

psql: error: could not connect to server: SSPI continuation error: The specified target is unknown or unreachable
 (80090303)

並查看了 posgtes 上的日志。

2020-08-18 05:49:36.534 PDT [5086] [unknown]@[unknown] LOG:  connection failed during start up processing: user= database=
2020-08-18 05:49:36.541 PDT [5087] postgres@postgres FATAL:  GSSAPI authentication failed for user "postgress"
2020-08-18 05:49:36.541 PDT [5087] postgres@postgres DETAIL:  Connection matched pg_hba.conf line 97: "host     all             all              0.0.0.0/0               gss include_realm=0 "

我已經檢查了很多教程,但沒有機會解決它。

(注意:相同的命令適用於 MD5 身份驗證)

謝謝提前。

這是早期版本的 Postgres 和 EDB Postgres v.12 中遇到的常見問題,因為已添加 GSSAPI 加密,但存在錯誤。 該錯誤已在提交 79e594cf04754d55196d2ce54fc869ccad5fa9c3 中修復,在79e594cf04754d55196d2ce54fc869ccad5fa9c3中發布。 如果您可以升級到 12.3 版,則可能可以解決此問題。

如果您出於某種原因需要使用較舊的客戶端,請確保在您的連接字符串中設置PGGSSAPIENCMODE=disable gssencmode=disable在您的環境中設置 PGGSSAPIENCMODE=disable。

我在同事的幫助下解決了這個問題,這是在新環境中完成的。 腳步:

(注意:PG-Server機器上不需要kerbrose客戶端(我的是Ubuntu 18.xx))

  1. Active Directory 在 Windows 2016 MYDOMAIN.CA 上設置,兩台機器上都安裝了 EPAS Server 11 或 12。 活動目錄設置鏈接
  2. 確保兩台機器上的時區和時間相同。
  • /etc/主機

  • Windows機器的IP為192.168.100.19,Linux為192.168.100.17。

    還假設 Windows 機器名稱是“client”,所以它的全名是“client.mydomain.ca”。

    在 linux 上的 /etc/hosts 中輸入以下內容(注釋掉其他條目)

 192.168.100.19 client.mydomain.ca client 192.168.100.17 pg.mydomain.ca pg
  • 在c中輸入以下內容:\Windows\System32\Drivers\etc\hosts on Windows
 192.168.100.19 client.mydomain.ca 192.168.100.17 pg.mydomain.ca

驗證主機是否正在通過 ping 進行通信。

在 Active Directory 中創建用戶(Windows 機器)

  • 假設您以管理員身份登錄,在“服務器管理器”中單擊“工具”和 select“Active Directory 用戶和計算機”

  • 你的域下“MYDOMAIN.CA” select users 顯示所有用戶

    右擊管理員和select“復制”

  • 在“名字”和“用戶登錄名”字段中輸入“pguser”。 點擊下一步。 域“MYDOMAIN.CA”應顯示在“用戶登錄名”的組合框中

  • 輸入用戶密碼並取消選中“密碼永不過期”復選框。 -> 單擊下一步 -> 單擊完成。 用戶帳戶已創建。

  • 在用戶列表中雙擊此用戶或右鍵單擊此用戶和 select 屬性。

  • 在帳戶選項卡中,在帳戶選項下選中“此帳戶支持 kerberos AES 256 位加密”復選框,然后單擊確定。

  • 注銷 Windows 並使用“pguser”用戶登錄。

創建密鑰表

  • Windows 機器:以管理員身份打開命令提示符並輸入以下命令以創建 Keytab。
 ktpass -out krb5.keytab -mapUser pguser@MYDOMAIN.CA +rndPass -mapOp set +DumpSalt -crypto AES256-SHA1 -ptype KRB5_NT_PRINCIPAL -princ POSTGRES/pg.mydomain.ca@MYDOMAIN.CA
  • 請注意,此命令不應給出任何錯誤或警告。 如果您看到錯誤或警告並且生成了密鑰表,則此密鑰表將不起作用。

  • 如果密鑰表創建成功,您可以通過打開 pguser 用戶屬性,帳戶選項卡查看“用戶登錄名”已更改為 postgres/pg.mydomain.ca。

  • 現在您已經創建了密鑰表文件“krb5.keytab”。

  • Linux 機器:將此文件作為“/etc/krb5.keytab”復制到 Linux 機器。

//假設文件在Linux機器上用戶edb的桌面上。 su 成為根。

光盤/等/

cp /home/edb/Desktop/krb5.keytab。

chown enterprisedb:enterprisedb krb5.keytab

chmod 600 krb5.keytab

  • 打開 postgresql.conf 文件並將 krb_server_keyfile 設置為“/etc/krb5.keytab”(取消注釋此行,因為它默認被注釋掉)

krb_server_keyfile = '/etc/krb5.keytab'

  • 打開 pg_hba.conf 文件並添加以下行(注釋掉除“local all enterprisedb trust/md5”之外的所有其他行,以便任何遠程用戶只能使用 gss 進行連接)

本地所有企業數據庫信任

托管所有所有 0.0.0.0/0 gss

  • 重啟服務器。
  • 創建用戶“pguser@MYDOMAIN.CA”。

創建用戶“pg1postgres@HIGHGO.CA” 超級用戶已創建DB CREATEROLE;

來自 Windows 的 PSQL 命令

發出此命令以連接到 Linux 上的 D

psql -U pgUSER@MYDOMAIN.CA -d edb -h pg.mydomain.ca

問候,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM