W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
GSSAPI是用于 RFC 2743 中定義的安全認(rèn)證的一個(gè)工業(yè)標(biāo)準(zhǔn)協(xié)議。 PostgreSQL根據(jù) RFC 1964 支持帶Kerberos認(rèn)證的GSSAPI。 GSSAPI為支持它的系統(tǒng)提供自動(dòng)認(rèn)證(單點(diǎn)登錄)。
認(rèn)證本身是安全的,但通過數(shù)據(jù)庫連接發(fā)送的數(shù)據(jù)將不被加密,除非使用SSL。 PostgreSQL支持GSSAPI用于加密、認(rèn)證層或僅用于認(rèn)證。 GSSAPI 提供自動(dòng)認(rèn)證(single sign-on單點(diǎn)登錄) 給支持該功能的系統(tǒng)。認(rèn)證本身是安全的。
如果使用了GSSAPI 加密(參見 hostgssenc
) 或SSL 加密, 數(shù)據(jù)庫連接發(fā)送的數(shù)據(jù)將被加密,否則將不加密。
當(dāng)編譯PostgreSQL時(shí),GSSAPI 支持必須被啟用,詳見第 16 章。
當(dāng)GSSAPI使用Kerberos時(shí), 它會(huì)使用格式為
的標(biāo)準(zhǔn) principal。 PostgreSQL服務(wù)器將接受該服務(wù)器所使用的 keytab 中包括的任何 principal,但是在從使用 servicename
/hostname
@realm
krbsrvname
連接參數(shù)的客戶端建立連接時(shí)要注意指定正確的 principal 細(xì)節(jié)(另見 第 33.1.2 節(jié))。安裝的默認(rèn)值
postgres
可以在編譯時(shí)使用 ./configure --with-krb-srvnam=
其他值
修改。 在大部分的環(huán)境中,這個(gè)參數(shù)從不需要被更改。某些 Kerberos 實(shí)現(xiàn)可能要求一個(gè)不同的服務(wù)名, 例如 Microsoft Active Directory 要求服務(wù)名是大寫形式(POSTGRES
)。
hostname
是服務(wù)器機(jī)器的被完全限定的主機(jī)名。服務(wù) principal 的 realm 是該服務(wù)器機(jī)器的首選 realm。
客戶端 principal 可以被通過pg_ident.conf
映射到不同的 PostgreSQL數(shù)據(jù)庫用戶名。例如, pgusername@realm
可能會(huì)被映射到pgusername
。 或者,你可以使用完整的username@realm
當(dāng)事人作為
PostgreSQL中的角色而無需任何映射。
PostgreSQL也支持一個(gè)參數(shù)把 realm 從 principal 中剝離。這種方法是為了向后兼容性,并且我們強(qiáng)烈反對(duì)使用它,因?yàn)檫@樣就無法區(qū)分具有相同用戶名卻來自不同 realm 的不同用戶了。要啟用這種方法,可將include_realm
設(shè)置為 0。對(duì)于簡(jiǎn)單的單 realm 安裝,這樣做并且設(shè)置krb_realm
參數(shù)(這會(huì)檢查
principal 的 realm 是否正好匹配krb_realm
中的參數(shù))仍然是安全的。但比起在pg_ident.conf
中指定一個(gè)顯式映射來說,這種方法的能力較低。
確認(rèn)你的服務(wù)器的 keytab 文件是可以被PostgreSQL服務(wù)器帳 戶讀取的(最好是只讀的) (又見第 18.1 節(jié))。密鑰文件的位置由配置 參數(shù)krb_server_keyfile指定。默認(rèn)是
/usr/local/pgsql/etc/krb5.keytab
(或者任何在編譯的時(shí)候作為sysconfdir
的目錄)。 出于安全原因,推薦對(duì)PostgreSQL服務(wù)器使用一個(gè)獨(dú)立 的 keytab而不是開放系統(tǒng) keytab 文件的權(quán)限。
keytab 文件由 Kerberos 軟件生成,詳見 Kerberos 文檔。下面是 MIT 兼容的 Kerberos 5 實(shí)現(xiàn)的例子:
kadmin%
ank -randkey postgres/server.my.domain.org
kadmin%
ktadd -k krb5.keytab postgres/server.my.domain.org
當(dāng)連接到數(shù)據(jù)庫時(shí),確保你有一個(gè)匹配被請(qǐng)求數(shù)據(jù)庫用戶名的 principal 的票據(jù)。例如,對(duì)于數(shù)據(jù)庫用戶名fred
,principal fred@EXAMPLE.COM
將能夠連接。要也允許 principal fred/users.example.com@EXAMPLE.COM
,可使用一個(gè)用戶名映射,如第 20.2 節(jié)中所述。
下列被支持的配置選項(xiàng)用于GSSAPI:
include_realm
如果設(shè)置為 0,在通過用戶名映射之前(第 20.2 節(jié)),來自已認(rèn)證用戶 principal 的 realm 名稱會(huì)被剝離掉。我們不鼓勵(lì)這樣做,這種方法主要是為了向后兼容性而存在的,因?yàn)樗诙?realm 環(huán)境中是不安全的(除非也使用 krb_realm
)。推薦用戶讓
include_realm
設(shè)置為默認(rèn)值(1)并且在pg_ident.conf
中提供一條顯式的映射來把 principal 名稱轉(zhuǎn)換成PostgreSQL用戶名。
map
允許在系統(tǒng)和數(shù)據(jù)庫用戶名之間的映射。詳見第 20.2 節(jié)。 對(duì)于一個(gè) GSSAPI/Kerberos 原則,例如username@EXAMPLE.COM
(或者更不常見的username/hostbased@EXAMPLE.COM
),
用于映射的用戶名會(huì)是username@EXAMPLE.COM
(或者 username/hostbased@EXAMPLE.COM
,相應(yīng)地),除非 include_realm
已經(jīng)被設(shè)置為 0,在那種情況下 username
(或者username/hostbased
)是
映射時(shí)被視作系統(tǒng)用戶名的東西。
krb_realm
設(shè)置 realm 為對(duì)用戶 principal 名進(jìn)行匹配的范圍。 如果這個(gè)參數(shù)被設(shè)置,只有那個(gè) realm 的用戶將被接受。 如果它沒有被設(shè)置,任何 realm 的用戶都能連接,服從任何已完成的用戶名映射。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: