




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、相比mysql單一的f,postgresql的訪問認證配置主要涉及到兩個主要的配置文件:postgresql.conf和 pg_hba.conf,本文從安全設置角度講述這兩個配置文件的配置選項。部分文字、樣例摘抄自postgresql的中文手冊。postgresql.confpostgresql.conf包含了許多的選項,這些選項控制了postgresql.conf的方方面面,中間影響訪問認證的選項是:unix_socket_group設置 Unix 域套接字的組所有人,(套接字的所有權用戶總是啟動 postmaster 的用戶)與 UNIX_SOCKET_PERMISSIONS 選項一起使用
2、可以給這種套接字類型增加額外的訪問控制機制,缺省時是一個空字串,也就是使用當前用戶的缺省的組, 這個選項只能在服務器啟動時設置。unix_socket_permissions給 Unix 域套接字設置訪問權限,Unix 域套接字使用通常的 Unix 文件系統權限集。可選的值可以是一個 chmod 和 umask 系統調用可以接受的數字模式。(要使用客戶化的八進制格式,該數字必須以 0 (零)開頭)缺省權限是 0777,意即任何人都可以聯接,合理的選則可能是0770 (只有用戶和組, 參閱UNIX_SOCKET_GROUP)和 0700 (只有用戶)。(請注意對于 Unix 套接字而言,實際上只
3、有寫權限有意義,而且 也沒有辦法設置或者取消讀或執行權限)這個選項只能在服務器啟動時設置。pg_hba.conf是設置訪問認證的主要文件,格式為每條記錄一行,每行指定一條訪問認證。設定一條訪問認證包含了7個部分:連接方式(type)、數據庫(database)、用戶名(user)、ip地址(ip-address)、子網掩碼(ip-mask)、認證方法(authentication method)、認證配置(authentication-option),以下是這7個部分的詳細說明:連接方式(type)連接方式共有三種:local、host、hostssllocal這條記錄匹配通過 Unix 域套
4、接字進行的聯接企圖, 沒有這種類型的記錄,就不允許 Unix 域套接字的聯接。host這條記錄匹配通過 TCP/IP 網絡進行的聯接嘗試,請注意,除非服務器是 帶著 -i 選項或者打開了 postgresql.conf 里面的 tcpip_socket 配置參數集啟動的,否則 TCP/IP 聯接是被禁止掉的。hostssl這條記錄匹配通過在 TCP/IP 上進行的 SSL 聯接企圖, host 記錄可以匹配 SSL 和非 SSL 的聯接企圖, 但 hostssl 記錄需要 SSL 聯接。數據庫(database)聲明記錄所匹配的數據庫。值 all 表明該記錄匹配所有數據庫, 值 sameuse
5、r表示如果被請求的數據庫和請求的用戶同名,則匹配。 samegroup 表示請求的用戶必須是一個與數據庫同名的組中的成員。 在其他情況里,這就是一個特定的 PostgreSQL 的名字。我們可以通過用逗號分隔的方法聲明多個數據庫。 一個包含數據庫名的文件可以 通過對該文件前綴 來聲明該文件必需和 pg_hba.conf 在同一個目錄。用戶名(user)為這條記錄聲明所匹配的 PostgreSQL 用戶,值 all 表明它匹配 于所有用戶。否則,它就是特定 PostgreSQL 用戶的名字,多個用戶名可以通過用逗號分隔的方法聲明,組名字 可以通過用 + 做組名字前綴來聲明。一個包含用戶名的文件可
6、以 通過在文件名前面前綴 來聲明,該文件必需和 pg_hba.conf 在同一個目錄。ip地址(ip-address)子網掩碼(ip-mask)這兩個字段包含標準的點分十進制表示的 IP地址/掩碼值。 (IP地址只能用數字的方式聲明,而不能用域名或者主機名)它們倆放在一起,聲明了這條記錄匹配的客戶機的 IP 地址。 準確的邏輯是:(actual-IP-address xor IP-address-field) and IP-mask-field對于要匹配的記錄必需為零。如果連接方式是host或者hostssl的話,這兩項必須指定,否則可以不填。認證方法(authentication metho
7、d)trust無條件地允許聯接,這個方法允許任何可以與PostgreSQL 數據庫聯接的用戶以他們期望的任意 PostgreSQL 數據庫用戶身份進行聯接,而不需要口令。reject聯接無條件拒絕,常用于從一個組中過濾某些主機。md5要求客戶端提供一個 MD5 加密的口令進行認證,這個方法是允許加密口令存儲在pg_shadow里的唯一的一個方法。crypt類似 md5 方法,只是用的是老式的 crypt 加密認證, 用于 7.2 以前的客戶端,對于 7.2 以及以后的客戶端,我們建議使用 md5。password和md5一樣,但是口令是以明文形式在網絡上傳遞的,我們不應該在不安全的網絡上使用這
8、個方式。krb4用 Kerberos V4 認證用戶,只有在進行 TCP/IP 聯接的時候才能用。(譯注:Kerberos,克爾波洛斯,故希臘神話冥王哈得斯的多頭看門狗,FF8中“反擊的狼煙”。Kerberos 是 MIT 開發出來的基與對稱加密算法的認證協議和/或密鑰交換方法,其特點是需要兩個不同用途的服務器,一個用于認證身份,一個用于通道兩端用戶的密鑰交換。同時 Kerberos 對網絡時間同步要求比較高,以防止回放攻擊,因此通常伴隨 NTP 服務。)krb5用 Kerberos V5 認證用戶只有在進行 TCP/IP 聯接的時候才能用。(譯注:Kerberos V5 是上面 V4 的改良
9、,主要是不再依賴 DES 算法, 同時增加了一些新特性。)ident獲取客戶的操作系統名(對于 TCP/IP 聯接,用戶的身份是通過與運行在客戶端上的 ident 服務器聯接進行判斷的,對于本地聯接,它是從操作系統獲取的。) 然后檢查一下,看看用戶是否允許以要求的數據庫用戶進行聯接, 方法是參照在 ident 關鍵字后面聲明的映射。如果你使用了 sameuser 映射,那么假設用戶名是相等的。如果沒有聲明這個關鍵字,則在 $PGDATA/pg_ident.conf 文件中找出映射名。如果這個文件里包含一條記錄標識著ident提供的用戶名 和請求的 PostgreSQL 用戶名的映射, 那么聯接
10、被接受。對于本地聯接,只有在系統支持Unix域套接字信任證的情況下 才能使用(目前是 Linux, FreeBSD, NetBSD, 和 BSD/OS)。pam使用操作系統提供的可插入的認證模塊服務 (Pluggable Authentication Modules) (PAM)來認證。認證配置(authentication-option)這個可選的字段的含義取決與選擇的認證方法。了解了以上的內容以后,我們可以開始設置自己的訪問認證。和mysql一樣,postgresql默認安裝的訪問認證是不安全的,當我第一次安裝好我的 postgresql以后,我發現只要輸入psql -U pgsql -d
11、 template1就可以不需要任何密碼的進入我的數據庫,并且使用的是pgsql用戶(數據庫的最高權限),即使在我使用ALTER USER為我的數據庫用戶添加了密碼以后情況也沒有得到改善,經過一番查找,我發現我的pg_hba.conf內容如下:local all all trusthost all all 0.0.0.0 0.0.0.0 trust這說明無論在本地還是通過tcp/ip,任何人都可以不加任何限制的使用任何他想用的身份訪問我的數據庫,于是我為所有的訪問都使用了md5認證方法,我的pg_hba.conf變為:local all all md5host all all 0.0.0.0
12、0.0.0.0 md5事情似乎得到了解決,任何人想訪問我的數據庫都需要通過密碼這一關,我的數據庫安全了。但是當我有一天重新啟動計算機的以后發現我的 postgresql并沒有被正常的啟動,在終端前我發現啟動到postgresql服務啟動腳本時,提示需要輸入密碼,原來在設置了md5認證方式以后我的pgsql需要密碼才能夠啟動服務,為了不每次啟動都跑到終端前去輸入一次密碼,我的pgsql用戶的認證方法必須為trust:local pgsql all trustlocal all all md5host all all 0.0.0.0 0.0.0.0 md5在隨后的檢測中我發現,雖然通過網絡得到了保
13、護,但是如果在本地通過Unix域套接字進行連接的話,任何人都還是可以使用psql -U pgsql -d template1的方式輕松的進入我的數據庫,這樣做顯而易見不是我想要的結果,現在我需要unix_socket_permissions的協助,當我把這個項設置為0700以后,就只有套接字的所有人,即系統用戶pgsql可以使用套接字進行連接,另外如果我的數據庫有幾個管理員需要最高權限的話,0770也是一個選擇,不過暫時只有我一個管理員,所以我選擇了0700,現在我的pg_hba.conf改變為:local pgsql all trusthost all all 0.0.0.0 0.0.0.0
14、 md5結合了unix_socket_permissions以后,現在只有系統用戶pgsql可以無任何限制的連接(當然,偉大的root例外),并且我也不用每次啟動的時候都跑到終端前去輸入一次密碼了,而其他人只能通過網絡連接,即使登錄到了本地計算機上,其他用戶也只能使用psql -U xx -d template1 -h 127.0.0.1的方式連接,這種連接是受到密碼認證的保護的,這一切正是我想要的。pg_hda.conf看看pg_hda.conf的:# TYPE DATABASE USER CIDR-ADDRESS METHOD順序一定不要搞錯了,我的前面關于認證設置的文章是網上照搬的,將d
15、atabase和user順序設反了,導致我一直出現錯誤。汗顏!注意到type:包含local和host兩種。意思是本機(local)和遠程調用(host)對于一個user,最好給本機和遠程都給權限。然后看method:有trust(不需要安全認證);md5(md5加密認證);password(明碼認證)。依然存在問題:我對用戶使用md5和password方式,使用psql命令輸入密碼都提示密碼錯誤。不知道是什么原因。問題分析中。待續eg:對globus用戶,rftDatabase數據庫的授權:local all globus trusthost rftDatabase globus 202.1
16、98.30.65 255.255.255.128 trust這個是保證GT4的container和使用psql命令都能簡單進入的方式,不過使用password和md5方式就出現錯誤了。順便說一句,container聯接數據庫的配置文件是:$GLOBUS_LOCATION/etc/globus_wsrf_rft/jndi-config.xml在dbConnection部分指定數據庫,用戶名和密碼。pg_hba.conf 文件客戶端認證是由一個配置文件控制的,通常其文件名是 pg_hba.conf, 存放在數據庫集群的數據目錄里。 (HBA 的意思是 host-based authenticati
17、on:基于主機的認證。) 在initdb初始化數據目錄的時候,它會安裝一個缺省的文件。 不過我們也可以把認證配置文件放在其它地方;參閱 hba_file 配置參數。文件 pg_hba.conf 的常用格式是一套記錄, 每行一條??瞻仔行斜缓雎?,井號( # )開頭的注釋也被忽略。 一條記錄是由若干用空格和/或 tab 分隔的字段組成。 如果字段用引號包圍,那么它可以包含空白。記錄不能跨行存在。每條記錄聲明一種聯接類型,一個客戶端 IP 地址范圍(如果和聯接類型相關的話),一個數據庫名,一個用戶名字, 以及對匹配這些參數的聯接使用的認證方法。 第一條匹配聯接類型,客戶端地址和聯接企圖請求的數據庫名
18、和用戶名的記錄將用于執行認證。 這個處理過程沒有跨越或者回頭的說法:如果選擇了一條記錄而且認證失敗, 那么將不考慮后面的記錄。如果沒有匹配的記錄,那么訪問將被拒絕。每條記錄可以下面七種格式之一local database user auth-method auth-optionhost database user CIDR-address auth-method auth-optionhostssl database user CIDR-address auth-method auth-optionhostnossl database user CIDR-address auth-method
19、 auth-optionhost database user IP-address IP-mask auth-method auth-optionhostssl database user IP-address IP-mask auth-method auth-optionhostnossl database user IP-address IP-mask auth-method auth-option各個字段的含義如下:local這條記錄匹配通過 Unix 域套接字進行的聯接企圖。 沒有這種類型的記錄,就不允許 Unix 域套接字的聯接。host這條記錄匹配通過 TCP/IP 進行的聯接嘗試
20、。 host 記錄匹配 SSL 和非 SSL 的連接請求。注意: 除非服務器帶著合適的 listen_addresses 配置參數值啟動,否則將不可能進行遠程的 TCP/IP 連接, 因為缺省的行為是只監聽本地自環地址 localhost 的連接。hostssl這條記錄匹配使用 TCP/IP 的 SSL 聯接企圖。 但必須是使用 SSL 加密的聯接。要使用這個選項,制作服務器的時候必須打開 SSL 支持。而且在服務器啟動的時候, 必須SSL選項通過配置選項ssl打開。 hostnossl這個記錄與 hostssl 有著正相反的邏輯: 它只匹配那些在 TCP/IP 上不使用 SSL 的連接請求。
21、database聲明記錄所匹配的數據庫名稱。值 all 表明該記錄匹配所有數據庫, 值 sameuser表示如果被請求的數據庫和請求的用戶同名,則匹配。 samerole 表示請求的用戶必須是一個與數據庫同名的組中的成員。 (samegroup 是一個已經廢棄了的,但仍然被接受的 samerole 的同義詞。) 在其他情況里,這就是一個特定的 PostgreSQL 的名字。 我們可以通過用逗號分隔的方法聲明多個數據庫。 可以通過對該文件前綴 來聲明一個獨立的包含數據庫名的文件。user為這條記錄聲明所匹配的數據庫用戶。值 all 表明它匹配于所有用戶。 否則,它就是特定數據庫用戶的名字?;蛘呤?/p>
22、一個前綴 + 的組名稱。 (請注意,在 PostgreSQL 里,用戶和組沒有真正的區別, + 實際上只是意味著匹配任何直接或者間接屬于這個角色的成員, 而沒有 + 記號的名字只匹配指定的角色。) 多個用戶名可以通過用逗號分隔的方法聲明。 一個包含用戶名的文件可以通過在文件名前面前綴 來聲明。CIDR-address聲明這條記錄匹配的客戶端機器的 IP 地址范圍。它包含一個標準的點分十進制的 IP 地址和一個 CIDR 掩碼長度。 (IP 地址只能用數值聲明,不能用域或者主機名。) 掩碼長度表示客戶端 IP 地址必須匹配的高位二進制位數。 在給出的 IP 地址里,這個長度的右邊的二進制位必須為
23、零。 在 IP 地址,/,和 CIDR 掩碼長度之間不能有空白。典型的 CIDR 地址是 172.20.143.89/32,這表明一個主機, 或者 172.20.143.0/24 表示一個網絡。 要聲明單個主機,給 IPv4 地址聲明 CIDR 掩碼 32,給 IPv6 地址聲明 128。以 IPv4 格式給出的 IP 地址會匹配那些擁有對應地址的 IPv6 連接,比如 127.0.0.1 將匹配 IPv6 地址 :ffff:127.0.0.1。 一個以 IPv6 格式給出的記錄將只匹配 IPv6 連接,即使對應的地址在 IPv4-in-IPv6 范圍內。請注意如果系統的 C 庫不支持 IPv
24、6 地址,那么 IPv6 的格式將被拒絕。這個域只適用于 host,hostssl 和 hostnossl 記錄。IP-addressIP-mask這些方法可以用于作為 CIDR-address 表示法的替補。 它不是聲明掩碼的長度,而是在另外一個字段里聲明實際的掩碼。 比如,255.0.0.0 表示 IPv4 CIDR 掩碼長度 8,而 255.255.255.255 表示 CIDR 掩碼長度 32。 同樣的匹配邏輯將用于一個點分的 IP-mask。這些字段只適用于 host, hostssl, 和 hostnossl 記錄。auth-method(認證方法)聲明通過這條記錄聯接的時候使用的
25、認證方法。 可能的選擇在下面簡介。trust無條件地允許聯接。這個方法允許任何可以與PostgreSQL 數據庫服務器聯接的用戶以他們期望的任意 PostgreSQL 數據庫用戶身份進行聯接,而不需要口令。reject聯接無條件拒絕。常用于從一個組中過濾某些主機。md5要求客戶端提供一個 MD5 加密的口令進行認證 cryptNote: 這個選項只有在與 7.2 以前的客戶端進行通訊的時候才建議使用。要求客戶端提供一個 crypt() 加密的口令用于認證。 現在我們建議使用 md5。 password要求客戶端提供一個未加密的口令進行認證。 因為口令是以明文形式在網絡上傳遞的, 所以我們不應該
26、在不安全的網絡上使用這個方式。 并且它通常還不能和線程化的客戶端應用一起使用。krb5用 Kerberos V5 認證用戶。只有在進行 TCP/IP 聯接的時候才能用。 (譯注:Kerberos V5 是上面 V4 的改良,主要是不再依賴 DES 算法, 同時增加了一些新特性。)ident獲取客戶的操作系統名(對于 TCP/IP 聯接,用戶的身份是通過與運行在客戶端上的 ident 服務器聯接進行判斷的,對于本地聯接,它是從操作系統獲取的。) 然后檢查一下,看看用戶是否允許以要求的數據庫用戶進行聯接, 方法是參照在 ident 關鍵字后面聲明的映射。pam使用操作系統提供的可插入的認證模塊服務
27、 (Pluggable Authentication Modules) (PAM)來認證auth-option這個可選的字段的含義取決與選擇的認證方法。細節在下面。用 構造包含的文件是當作一列名字讀取的, 這些名字可以用空白或者逗號分隔。注釋用 # 引入, 就像在 pg_hba.conf 里那樣,允許嵌套 構造。 除非跟在 后面的文件名是一個絕對路徑,否則被當作與包含該文件的目錄相對的路徑。因為認證時系統是為每個聯接請求順序檢查 pg_hba.conf 里的記錄的,所以這些記錄的順序是非常關鍵的。 通常,靠前的記錄有比較嚴的聯接匹配參數和比較弱的 認證方法,而靠后的記錄有比較松的匹配參數和比較
28、嚴的認證方法。 比如,我們一般都希望對本地 TCP/IP 聯接使用 trust 認證, 而對遠端的 TCP/IP 聯接要求口令。在這種情況下我們將 trust 認證方法用于來自 127.0.0.1 的聯接,這條記錄將出現在允許更廣泛的客戶端 IP 地址的使用口令認證的記錄前面。在啟動和主服務器進程( postmaster )收到SIGHUP 信號的時候, 系統都會重新裝載 pg_hba.conf 文件。 如果你在活躍的系統上編輯了該文件,你就需要用 kill 向 postmaster 發一個 SIGHUP信號,好讓它重新讀取該文件。在 Example 20-1 里是 pg_hba.conf 記
29、錄的一些例子。 閱讀下文理解不同認證方法的細節。Example 20-1. pg_hba.conf 記錄的例子# 允許在本機上的任何用戶使用 Unix 域套接字(本地連接的缺?。? 以任何數據庫用戶身份聯接任何數據庫# TYPE DATABASE USER CIDR-ADDRESS METHODlocal all all trust# 和上面相同,但是使用的是自環的(loopback)TCP/IP 連接# TYPE DATABASE USER CIDR-ADDRESS METHODhost all all 127.0.0.1/32 trust# 和上面一行相同,但是用的是獨立的掩碼字段# TYPE DATABASE USER IP-ADDRESS METHODhost all all 127.0.0.1 255.255.255.255 trust# 允許 IP 地址為 192.168.93.x 的任何主機與數據庫# postgres 相連,用與他們在自己的主機上相同 ident 的用戶名標識他自己# (通常是他的 Unix 用戶名)# TYPE DATABASE USER CIDR-ADDRESS METHODhost postgres all 192.168.93.0/24 iden
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工程經濟重要知識梳理試題及答案
- 工程項目中合同管理的關注點試題及答案
- 工程經濟市場分析方法試題及答案
- 食品加工工藝與安全衛生管理練習題集合
- 匯聚市政工程考試資料的試題及答案
- 物流運輸車隊協議
- 生物醫學影像診斷技術題庫
- 工程經濟企業財務預測試題及答案
- 經濟法核心知識試題及答案
- 經濟法的學術研究與試題及答案
- 2024年新疆澤普縣事業單位公開招聘村務工作者筆試題帶答案
- 《網絡素養教育》課件
- 2025年大數據分析師職業技能測試卷:數據采集與處理流程試題解析
- 2025年計算機科學與技術專業考試題及答案
- 脊髓損傷病人的護理查房
- 2025年全國特種設備安全管理人員A證考試練習題庫(300題)含答案
- 浙江省9 1高中聯盟2024-2025學年高一下學期4月期中英語試卷(含解析含聽力原文無音頻)
- 人工智能在航空服務中的應用-全面剖析
- 腦區網絡在記憶形成中的作用機制研究-全面剖析
- 2025-2030中國藥食同源行業市場運行分析及市場前景預測研究報告
- 小飯桌轉讓合同協議
評論
0/150
提交評論