配置文件:/etc/ssh/sshd_config
html
Note: 更改ssh相關配置後須要重啓sshd服務 systemctl restart sshd
linux
參考文檔:https://man.openbsd.org/ssh.1算法
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
HostbasedAuthentication no
MaxAuthTries 4 # 等保三要求該值小於等於 4
ClientAliveInterval 300 # 小於等於300s ClientAliveCountMax 3 # 存活用戶數小於等於3
Linux-PAM(linux可插入認證模塊)是一套共享庫,使本地系統管理員能夠隨意選擇程序的認證方式.。換句話說,不用(從新編寫)從新編譯一個包含PAM功能的應用程序,就能夠改變它使用的認證機制。這種方式下,就算升級本地認證機制,也不用修改程序。centos
PAM使用配置 /etc/pam.d/
下的文件,來管理對程序的認證方式。應用程序調用相應的配置文件,從而調用本地的認證模塊。模塊放置在 /lib/security
下,以加載動態庫的形式進,像咱們使用su命令時,系統會提示你輸入root用戶的密碼,這就是su命令經過調用PAM模塊實現的。緩存
PAM配置文件有兩種寫法:bash
配置文件示例: 服務器
由上圖能夠將配置文件內容劃分爲四列:session
Linux-PAM有四種模塊類型,分別表明四種不一樣的任務,它們是:ssh
一個類型可能有多行,它們按順序依次由PAM模塊調用 。
管理方式 | 說明 |
---|---|
auth | 用來對用戶的身份進行識別。如:提示用戶輸入密碼,或判斷用戶是否爲root等。 |
account | 對賬號的各項屬性進行檢查。如:是否容許登陸,是否達到最大用戶數,或是root用戶是否容許在這個終端登陸等。 |
session | 這個模塊用來定義用戶登陸前的,及用戶退出後所要進行的操做。如:登陸鏈接信息,用戶數據的打開與關閉,掛載文件系統等。 |
password | 使用用戶信息來更新。如:修改用戶密碼。 |
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_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 | 設置認證限制(見實例) |
配置密碼複雜度和認證方式(同時修改文件 /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:強制使用先前的密碼,不提示用戶輸入新密碼(不容許用戶修改密碼)
配置文件位置:/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 # 密碼過時前警告天數
useradd -D -f 30
chage --inactive 30 <user>
將郵件傳輸代理配置爲僅限本地模式:
/etc/postfix/main.cf
文件, inet_interfaces = localhost
;只記錄指定日誌 /etc/rsyslog.conf
:
# 默認 *.* @@remote-host:514
等保要求:
編輯配置文件 /etc/grub.d/40_custom
添加以下配置:
password xxxxxxxx
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