PostgreSQL密碼安全策略

来源:https://www.cnblogs.com/Jingkunliu/archive/2020/04/20/12738794.html
-Advertisement-
Play Games

引用地址:https://blog.csdn.net/weixin_34143774/article/details/89561946 請以原文為主,引用註明出處。問題:今天公司進行軟體測評,在測評期間,測評人員問起PostgreSQL登錄失敗導致用戶鎖定的次數,密碼輸錯幾次賬戶會被鎖定?網上查了一... ...


引用地址:https://blog.csdn.net/weixin_34143774/article/details/89561946  請以原文為主,引用註明出處。


問題:今天公司進行軟體測評,在測評期間,測評人員問起PostgreSQL登錄失敗導致用戶鎖定的次數,密碼輸錯幾次賬戶會被鎖定?

網上查了一圈,oracle和mysql都有相關設置,只有pg庫沒有找到相關的設置參數。偶然發現網上的帖子,結果發現PG庫尚不支持相關設置。

image

下麵引用一下:

資料庫密碼管理是資料庫安全的重要環節之一。密碼管理及配置策略主要包括:

  • 密碼加密存儲
  • 密碼有效期
  • 密碼複雜度
  • 密碼驗證失敗延遲
  • 密碼驗證失敗次數限制,失敗後鎖定, 以及解鎖時間
  • 設置密碼時防止密碼被記錄到資料庫日誌中
    下麵會依次講解在PostgreSQL中如何實現密碼相關的安全性配置。

1、密碼加密存儲

pg中密碼始終以加密方式存儲在系統目錄中。ENCREPED 關鍵字沒有任何效果, 但被接受向後相容。加密方式可以通過password_encryption參數配置。

postgres=# show password_encryption;
password_encryption 
---------------------
md5
(1 row)
postgres=# select * from pg_shadow where usename='test';
usename | usesysid | usecreatedb | usesuper | userepl | usebypassrls | passwd | valuntil | usec
onfig 
---------+----------+-------------+----------+---------+--------------+-------------------------------------+------------------------+-----
------
test | 49156 | f | f | f | f | md52d308906cb4ea734a22f76e7927c046b | 2019-04-10 16:58:00+08 |

2、密碼有效期

pg支持密碼有效期配置,可以通過配置密碼有效期,制定密碼更換周期。

伺服器端設置有效期
postgres=# alter role test valid until '2019-04-10 16:58:00';
ALTER ROLE
postgres=# select * from pg_user where usename='test';
usename | usesysid | usecreatedb | usesuper | userepl | usebypassrls | passwd | valuntil | useconfig 
---------+----------+-------------+----------+---------+--------------+----------+------------------------+-----------
test | 49156 | f | f | f | f | ******** | 2019-04-10 16:58:00+08 | 
(1 row)
客戶端連接測試
[postgres@pg2 ~]$ date
Wed Apr 10 17:11:49 CST 2019
[postgres@pg2 ~]$ psql -h 192.168.6.12 -U test -d postgres -p 5432
Password for user test: 
psql: FATAL: password authentication failed for user "test"

註意:

  • pg密碼有效期僅針對客戶端有效,伺服器端不受限制。
  • 網路訪問控制文件中不能配置為trust認證方式

3、密碼複雜度策略

passwordcheck.so模塊可以實現密碼複雜度要求,此模塊可以檢查密碼,如果密碼太弱,他會拒絕連接
創建用戶或修改用戶密碼時,強制限制密碼的複雜度,限制密碼不能重覆使用
例如密碼長度,包含數字,字母,大小寫,特殊字元等,同時排除暴力破解字典中的字元串

3.1、啟用模塊

添加'$libdir/passwordcheck'到參數shared_preload_libraries,重啟生效
預設so文件都存放在$libdir目錄下

[pg@pg ~]$ ls -atl $LD_LIBRARY_PATH/passwordcheck*
-rwxr-xr-x 1 pg pg 8640 Feb 1 14:23 /opt/postgres/lib/passwordcheck.so
postgres=# select name,setting from pg_settings where name like '%dynamic%';
name | setting 
----------------------------+---------
dynamic_library_path | $libdir
dynamic_shared_memory_type | posix
(2 rows)
postgres=# alter system set shared_preload_libraries=pg_pathman,pg_stat_statements,passwordcheck;
ALTER SYSTEM
postgres=# 
重啟生效
shared_preload_libraries參數使用參考“Postgresql共用庫預載入(Shared Library Preloading)”
3.2、複雜度功能驗證

密碼複雜度檢查模塊Passwordcheck

  • 驗證創建的用戶密碼是否符合規則。
    密碼:最少8個字元;必須包含數字和字母;密碼中不能含有用戶名欄位。
postgres=# alter role test with password 'test';
ERROR: password is too short
postgres=# alter role test password '12345678';
ERROR: password must contain both letters and nonletters
postgres=# alter role test with password 'test1234';
ERROR: password must not contain user name
postgres=# alter role test with password 'tttt1234';
ALTER ROLE

4、密碼驗證失敗延遲

auth_delay.so模塊會導致伺服器在報告身份驗證失敗之前短暫停留,這個主要用於防止暴力破解. 驗證失敗後, 延遲一個時間視窗才能繼續驗證。請註意, 它不會阻止拒絕服務攻擊, 甚至可能會加劇這些攻擊, 因為在報告身份驗證失敗之前等待的進程仍將使用連接插槽。

4.1、啟用模塊

需要配置以下參數,實現密碼驗證延遲失敗延遲

so文件存儲在$libdir下
[pg@pg lib]$ ls -atl $LD_LIBRARY_PATH/auth_delay*
-rwxr-xr-x 1 pg pg 8432 Feb 1 14:23 /opt/postgres/lib/auth_delay.so
參數修改
shared_preload_libraries --預載入模塊
auth_delay.milliseconds (int) --指定延遲時間
postgres=# alter system set shared_preload_libraries=pg_pathman, pg_stat_statements, passwordcheck,auth_delay;
ALTER SYSTEM
重啟生效
postgres=# alter system set auth_delay.milliseconds=5000;
ALTER SYSTEM
reload生效
4.2、驗證
[pg@pg ~]$ psql -h 192.168.6.12 -U test -p 5432 -d postgres
Password for user test: 
--5s
psql: FATAL: password authentication failed for user "test"
[pg@pg ~]$
輸入密碼後,如果密碼不正確,會等待5s,然後返回密碼失敗提示
[pg@pg ~]$ psql -h 192.168.6.12 -U test -p 5432 -d postgres
Password for user test: 
psql (10.4)
Type "help" for help.
postgres=> 
輸入密碼後,如果密碼正確,沒有等待。

5、密碼驗證失敗次數限制,失敗後鎖定, 以及解鎖時間

目前PostgreSQL不支持這個安全策略, 目前只能使用auth_delay來延長暴力破解的時間.

6、設置密碼時防止密碼被記錄到資料庫日誌中

密碼的配置命令可能會被記錄到history文件及csvlog日誌文件中(如果開啟了DDL或更高級別審計log_statement),這些文件明文記錄了密碼,可能造成密碼泄露風險。

6.1、密碼記錄到兩個地方
HISTFILE
The file name that will be used to store the history list. If unset, the file name is taken from the PSQL_HISTORY environment variable. If that is not set either, the default is ~/.psql_history, or %APPDATA%\postgresql\psql_history on Windows. For example, putting:
\set HISTFILE ~/.psql_history- :DBNAME
in ~/.psqlrc will cause psql to maintain a separate history for each database.
Note
This feature was shamelessly plagiarized from Bash. --??!!
csvlog 
資料庫錯誤日誌

事例:

如以下命令,會記錄到HISTFILE和csvlog日誌中
postgres=# alter role test with password 'tttt1234';
ALTER ROLE
history file記錄
[pg@pg ~]$ cat ~/.psql_history |grep tttt1234
alter role test with password 'tttt1234';
[pg@pg ~]$ 
csvlog記錄
[pg@pg ~]$ cat $PGDATA/postgresql.conf |grep log_statement
#log_statement = 'none'         # none, ddl, mod, all
log_statement = 'ddl'
#log_statement_stats = off
[pg@pg ~]$ 
[pg@pg ~]$ cat $PGDATA/pg_log/postgresql-2019-04-12_092557.csv |grep tttt1234
2019-04-12 09:33:23.036 CST,"pg","postgres",1309,"[local]",5cafeadb.51d,3,"idle",2019-04-12 09:33:15 CST,3/21,0,LOG,00000,"statement: alter role test with password 'tttt1234';",,,,,,,,,"psql"
6.2、解決方式
  1. 使用createuser命令行工具-W選項提示輸入密碼。
  2. 使用pg_md5工具生成密碼, 在psql中使用ALTER ROLE填入md5值。
    與上面類似, pg_md5是pgpool提供的一個工具, 實際上就是調用上面的函數。
[pg@pg ~]$ createuser -l -h 127.0.0.1 -p 5432 -U pg -W tuser
Password: 
[pg@pg ~]$ 
[pg@pg ~]$ cat $PGDATA/pg_log/postgresql-2019-04-12_092557.csv |grep tuser
2019-04-12 11:17:48.348 CST,"pg","postgres",1574,"localhost:42560",5cb0035c.626,3,"idle",2019-04-12 11:17:48 CST,3/236,0,LOG,00000,"statement: CREATE ROLE tuser NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN;",,,,,,,,,"createuser"

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 由於小編在本學期有一門課程需要學習hadoop,需要在ubuntu的linux系統下搭建Hadoop環境,在這個過程中遇到一些問題,寫下這篇博客來記錄這個過程,並把分享給大家。 Hadoop的安裝方式 單機模式:Hadoop預設模式為非分散式模式(本地模式),無需 進行其他配置即可運行。非分散式即單 ...
  • load average 字面意思:平均負載 查看一下手冊中的描述,可知 load average 後面三個數值是CPU在最近1分鐘、5分鐘、15分鐘的平均負載。當CPU完全空閑時,平均負載為0;當CPU工作量飽和的時候,平均負載為1。 很明顯,平均負載越低越好。 當平均負載大於1,意味著CPU資源 ...
  • 在這裡我給大家繼續分享一些關於HDFS分散式文件的經驗哈,其中包括一些hdfs的基本的shell命令的操作,再加上hdfs java程式設計。在前面我已經寫了關於如何去搭建hadoop這樣一個大數據平臺,還沒搭好環境的童鞋可以轉到我寫的這篇文章 "Hadoop在Ubuntu的安裝" ,接下來就開始我 ...
  • 壓縮和解壓縮命令 zip unzip gzip gunzip bzip2 bunzip2 tar zip (.zip格式的壓縮文件) 英文原意:package and compress (archive) files 功能:壓縮文件或目錄 語法:zip 選項[ r] 壓縮包名 源文件或源目錄 unz ...
  • 基本的操作方法:本文假設你的apahce安裝目錄為/usr/local/apache2,這些方法適合任何情況apahce啟動命令:推薦/usr/local/apache2/bin/apachectl start apaceh啟動apache停止命令/usr/local/apache2/bin/apa ...
  • 命令格式 [root@localhost ~]# scp [參數] [原路徑] [目標路徑] 命令功能 scp是 secure copy的縮寫, scp是linux系統下基於ssh登陸進行安全的遠程文件拷貝命令。linux的scp命令可以在linux伺服器之間複製文件和目錄。 命令參數 -1 強制s ...
  • Parallels Desktop是一款運行在 Mac 電腦上的極為優秀的虛擬機軟體。用戶可以在 Mac OS X 下非常方便運行 Windows、Linux 等操作系統及應用。用戶不必繁瑣重覆地重啟電腦即可在 Win 與 Mac 之間切換甚至同時使用它們。 Parallels Desktop15的 ...
  • 好幾年前寫了一篇《SSIS利用Microsoft Connector for Oracle by Attunity組件進行ETL!》,IT技術真是日新月異,這種方式對於新的SQL SERVER 資料庫版本已不適用了,比如SQL SERVER 2016 的SSIS不需要安裝任何插件就可以抽取Share ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...