linux-centos7 基於等保3的系統安全體系

sshd配置

配置文件:/etc/ssh/sshd_config

Note: 更改ssh相關配置後需要重啓sshd服務 systemctl restart sshd

參考文檔:https://man.openbsd.org/ssh.1

ssh訪問控制

AllowUsers <userlist> 
AllowGroups <grouplist> 
DenyUsers <userlist> 
DenyGroups <grouplist>

配置加密算法

Ciphers aes256-ctr,aes192-ctr,aes128-ctr  # 使用已批准的加密類型
MACs hmac-sha2-512,hmac-sha2-256          # 使用已批准的Mac算法

密碼驗證

PermitEmptyPasswords no  # 禁止無密碼訪問服務器
PermitRootLogin yes      # 是否禁止使用root登錄(爲方便管理,暫未收回權限)

如果禁用root需要創建一個超級管理員。

openssh主機認證

HostbasedAuthentication no

限制用戶認證次數

MaxAuthTries 4  # 等保三要求該值小於等於 4

ssh空閒超時

ClientAliveInterval 300  # 小於等於300s
ClientAliveCountMax 3    # 存活用戶數小於等於3

用戶認證及密碼強度管理(pam)

pam 簡介

Linux-PAM(linux可插入認證模塊)是一套共享庫,使本地系統管理員可以隨意選擇程序的認證方式.。換句話說,不用(重新編寫)重新編譯一個包含PAM功能的應用程序,就可以改變它使用的認證機制。這種方式下,就算升級本地認證機制,也不用修改程序。

PAM使用配置 /etc/pam.d/ 下的文件,來管理對程序的認證方式。應用程序調用相應的配置文件,從而調用本地的認證模塊。模塊放置在 /lib/security 下,以加載動態庫的形式進,像我們使用su命令時,系統會提示你輸入root用戶的密碼,這就是su命令通過調用PAM模塊實現的。

pam 配置文件介紹

  • PAM配置文件有兩種寫法:
    • 一種是寫在 /etc/pam.conf 文件中,但centos6之後的系統中,這個文件就沒有了。
    • 另一種寫法是,將PAM配置文件放到 /etc/pam.d/ 目錄下,其規則內容都是不包含 service 部分的,即不包含服務名稱,而 /etc/pam.d 目錄下文件的名字就是服務名稱。如: vsftpd,login等。
  • 配置文件示例:

由上圖可以將配置文件內容劃分爲四列:

  • 第一列:代表模塊類型
  • 第二列:代表控制標記
  • 第三列:代表模塊路徑
  • 第四列:代表模塊參數

 

pam 模塊類型

Linux-PAM有四種模塊類型,分別代表四種不同的任務,它們是:

  • 認證管理(auth)
  • 賬號管理(account)
  • 會話管理(session)
  • 密碼(password)管理

一個類型可能有多行,它們按順序依次由PAM模塊調用

管理方式

說明

auth

用來對用戶的身份進行識別。如:提示用戶輸入密碼,或判斷用戶是否爲root等。

account

對帳號的各項屬性進行檢查。如:是否允許登錄,是否達到最大用戶數,或是root用戶是否允許在這個終端登錄等。

session

這個模塊用來定義用戶登錄前的,及用戶退出後所要進行的操作。如:登錄連接信息,用戶數據的打開與關閉,掛載文件系統等。

password

使用用戶信息來更新。如:修改用戶密碼。

pam 控制標記

PAM使用控制標記來處理和判斷各個模塊的返回值。(在此只說明簡單的認證標記)

控制標記

說明

required

表示即使某個模塊對用戶的驗證失敗,也要等所有的模塊都執行完畢後,PAM 才返回錯誤信息。這樣做是爲了不讓用戶知道被哪個模塊拒絕,如果對用戶驗證成功,所有的模塊都會返回成功信息。

requisite

與required相似,但是如果這個模塊返回失敗,則立刻嚮應用程序返回失敗,表示此類型失敗,不再進行同類型後面的操作。

sufficient

表示如果一個用戶通過這個模塊的驗證,PAM結構就立刻返回驗證成功信息(即使前面有模塊fail了,也會把 fail結果忽略掉),把控制權交回應用程序。後面的層疊模塊即使使用requisite或者required 控制標誌,也不再執行。如果驗證失敗,sufficient 的作用和 optional 相同

optional

表示即使本行指定的模塊驗證失敗,也允許用戶接受應用程序提供的服務,一般返回PAM_IGNORE(忽略)。

模塊路徑

模塊路徑,即要調用模塊的位置.。如果是64位系統,一般保存在/lib64/security,如:pam_unix.so。

同一個模塊,可以出現在不同的類型中。它在不同的類型中所執行的操作都不相同。這是由於每個模塊針對不同的模塊類型,編制了不同的執行函數。

模塊參數

模塊參數,即傳遞給模塊的參數。參數可以有多個,之間用空格分隔開,如:

password    requisite     pam_cracklib.so try_first_pass retry=3 minlen=14 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1

常用pam模塊介紹

pam模塊

結合管理類型

說明

pam_unix.so

auth

提示用戶輸入密碼,並與/etc/shadow文件相比對。匹配返回0

 

account

檢查用戶的賬號信息(包括是否過期等)。帳號可用時,返回0

 

password

修改用戶的密碼。將用戶輸入的密碼,作爲用戶的新密碼更新shadow文件

pam_shells.so

auth/account

如果用戶想登錄系統,那麼它的shell必須是在/etc/shells文件中之一的shell

pam_deny.so

account/auth/password/session

該模塊可用於拒絕訪問

pam_permit.so

account/auth/password/session

模塊任何時候都返回成功

pam_securetty.so

auth

如果用戶要以root登錄時,則登錄的tty必須在 /etc/securetty 之中

pam_listfile.so

account/auth/password/session

訪問應用程的控制開關

pam_cracklib.so

password

這個模塊可以插入到一個程序的密碼棧中,用於檢查密碼的強度

pam_limits.so

session

定義使用系統資源的上限,root用戶也會受此限制,可以通過 /etc/security/limits.conf 或 /etc/security/limits.d/*.conf 來設定

pam_tally2.so

auth

設置認證限制(見實例)

實例及參數介紹

實例1:密碼強度及用戶認證方式

配置密碼複雜度和認證方式(同時修改文件 /etc/pam.d/system-auth/etc/pam.d/password-auth ):

#%PAM-1.0
auth        required      pam_faillock.so preauth audit silent deny=5 unlock_time=900
auth        [success=1 default=bad] pam_unix.so
auth        [default=die] pam_faillock.so authfail audit deny=5 unlock_time=900
auth        sufficient    pam_faillock.so authsucc audit deny=5 unlock_time=900
auth       required     pam_tally2.so deny=3 unlock_time=300 even_deny_root root_unlock_time=10

# deny 設置普通用戶和root用戶連續錯誤登陸的最大次數,超過最大次數,則鎖定該用戶
# unlock_time 設定普通用戶鎖定後,多少時間後解鎖,單位是秒;
# root_unlock_time 設定root用戶鎖定後,多少時間後解鎖,單位是秒;
# 此處使用的是 pam_tally2 模塊,如果不支持 pam_tally2 可以使用 pam_tally 模塊。另外,不同的pam版本,設置可能有所不同,具體使用方法,可以參照相關模塊的使用規則


password    requisite     pam_cracklib.so try_first_pass retry=3 minlen=14 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1

# try_first_pass:表明該模塊首先應當使用前一個模塊從用戶那裏得到的密碼,如果該密碼驗證不通過,再提示用戶輸入新的密碼
# minlen:指定密碼最小長度爲14
# dcredit/ucredit/ocredit/lcredit=-1:至少含有1個數字、大寫字母、小寫字母、特殊字符
# retry=3:配置密碼時,提示3次用戶密碼錯誤輸入

# difok=6:配置密碼時,新密碼中至少6個字符與舊密碼不同(默認爲5)

# reject_username:新密碼中不能包含與用戶名稱相同的字段

# maxrepeat=N:拒絕包含超過N個連續字符的密碼,默認值爲0表示此檢查已禁用

# maxsequence=N:拒絕包含大於N的單調字符序列的密碼,例如’1234’或’fedcb’,默認情況下即使沒有這個參數配置,一般大多數這樣的密碼都不會通過,除非序列只是密碼的一小部分

# maxcla***epeat=N:拒絕包含相同類別的N個以上連續字符的密碼。默認值爲0表示此檢查已禁用。

# use_authtok:強制使用先前的密碼,不提示用戶輸入新密碼(不允許用戶修改密碼)

實例2:su權限配置

  • 配置文件位置:/etc/pam.d/su auth required pam_wheel.so use_uid
  • 創建有sudo權限的用戶組 /etc/group : wheel \:x\:10:root,<user list>

上述操作可限定具有sudo權限的用戶。

注意事項

在[pam模塊類型](pam 模塊類型)中有講到各個模塊按順序依次由PAM模塊調用,所以在配置時要嚴格按順序配置,否則可能導致配置不生效,以下面的配置爲例:

# tag1
password    requisite     pam_cracklib.so try_first_pass retry=3 minlen=14 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1
# tag2
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5

在該配置中我標記了其順序分別爲tag1、tag2,pam_cracklib.so用於密碼強度驗證,pam_unix.so用於提示用戶更新密碼並將密碼保存到shadow文件中。

# 密碼過期,登錄時需要更改密碼
You are required to change your password immediately (password aged)
Last login: Fri Nov 16 10:54:11 2018 from host2
Changing password for root.
(current) UNIX password: 
New password: 
Retype new password:

如果將tag1放到tag2後面,會導致遠程更改用戶密碼無法更新到shadow文件,最終因密碼過期等原因無法登錄服務器——後果慘重!!!

參考

更多示例請見:linux中pam模塊

關於各個模塊參數詳解請見:The Linux-PAM System Administrators' Guide

密碼過期時間

  • 命令:chage $ chage -h 用法:chage [選項] 登錄 選項: -d, --lastday 最近日期 將最近一次密碼設置時間設爲“最近日期” -E, --expiredate 過期日期 將帳戶過期時間設爲“過期日期” -h, --help 顯示此幫助信息並推出 -I, --inactive INACITVE 過期 INACTIVE 天數後,設定密碼爲失效狀態 -l, --list 顯示帳戶年齡信息 -m, --mindays 最小天數 將兩次改變密碼之間相距的最小天數設爲“最小天數” -M, --maxdays 最大天數 將兩次改變密碼之間相距的最大天數設爲“最大天數” -R, --root CHROOT_DIR chroot 到的目錄 -W, --warndays 警告天數 將過期警告天數設爲“警告天數”
  • 對應的配置文件 /etc/login.defs : PASS_MAX_DAYS 90 # 密碼過期時間 PASS_MIN_DAYS 0 # 兩次密碼更改時間差最小天數 PASS_MIN_LEN 14 # 密碼最小長度(密碼強度在 /etc/pam.d/password-auth 配置) PASS_WARN_AGE 7 # 密碼過期前警告天數

用戶及密碼活躍性

  • 將默認密碼不活動期限設置爲30天: useradd -D -f 30
  • 將不合規的用戶設置爲失效狀態:chage --inactive 30 <user>

郵件管理

將郵件傳輸代理配置爲僅限本地模式:

  • 編輯 /etc/postfix/main.cf 文件, inet_interfaces = localhost
  • 重啓postfix。

日誌管理

只記錄指定日誌 /etc/rsyslog.conf

# 默認
*.* @@remote-host:514

等保要求:

  • 可以將"*.*"替換爲你實際需要的日誌信息。比如:kern.* ; mail.* 等等;
  • 或者關閉遠程記錄日誌功能(直接註銷即可)。

grub加密

編輯配置文件 /etc/grub.d/40_custom 添加如下配置:

password xxxxxxxx

aide工具

AIDE(Advanced Intrusion Detection Environment,高級入侵檢測環境)是個入侵檢測工具,主要用途是檢查文檔的完整性。AIDE生產一個文件系統狀態的快照,其中包括修改時間,權限和文件哈希值,然後可以其與文件系統的當前狀態進行比較,以檢測對系統的修改。

yum install -y aide

內核管理

檢查可疑數據包是否被記錄,內核配置如下:

# 在 /etc/sysctl.conf 文件中設置以下參數:
net.ipv4.conf.all.log_martians = 1 
net.ipv4.conf.default.log_martians = 1

生效以上配置:

# 開啓並記錄欺騙,源路由和重定向包
$ sysctl -w net.ipv4.conf.all.log_martians=1 
$ sysctl -w net.ipv4.conf.default.log_martians=1 

# 清空路由緩存
$ sysctl -w net.ipv4.route.flush=1

# 更新系統內核配置
$ sysctl -p

(adsbygoogle = window.adsbygoogle || []).push({});

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章