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

sshd配置

配置文件:/etc/ssh/sshd_confightml

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

參考文檔: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須要建立一個超級管理員。shell

openssh主機認證

HostbasedAuthentication no

限制用戶認證次數

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

ssh空閒超時

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

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

pam 簡介

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

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

pam 配置文件介紹

  • PAM配置文件有兩種寫法:bash

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

    由上圖能夠將配置文件內容劃分爲四列:session

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

pam 模塊類型

Linux-PAM有四種模塊類型,分別表明四種不一樣的任務,它們是:ssh

  • 認證管理(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

在該配置中我標記了其順序分別爲tag一、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
相關文章
相關標籤/搜索