Linux系統安全與優化配置(未完成待續,敬請關注)
Linux 系統安全與優化配置
版權 © 2011, 2012, 2013 http://netkiller.github.io
摘要
Linux 系統安全問題
我的系列文件
目錄
1. Openssh 安全配置1.1. 禁止root使用者登入1.2. 限制SSH驗證重試次數1.3. 禁止證照登陸1.4. 使用證照替代密碼認證1.5. 圖形視窗客戶端記憶密碼的問題1.6. 關閉 GSSAPI1.7. 禁止SSH埠對映1.8. IP地址限制2. Shell 安全2.1. .history 檔案2.2. sudo 安全問題2.3. 臨時檔案安全2.4. 執行許可權3. 防火牆3.1. 策略3.2. 防止成為跳板機4. Linux 系統資源調配4.1. /etc/security/limits.conf4.2. 關閉寫磁碟I/O功能5. PAM 外掛認證加固配置5.1. pam_tally2.so5.2. pam_listfile.so5.3. pam_access.so5.4. pam_wheel.so
這節主要講與SSH有關的安全配置
證照登陸非常安全,但是很有可能正常使用者在你不知道情況下,給你安裝了一個證照,他隨時都可能進入你的系統
任何一個有許可權的使用者都能很方便的植入一個證照到 .ssh/authorized_keys 檔案中
PubkeyAuthentication no AuthorizedKeysFile /dev/null
是不是自相矛盾? 這個跟上面講的正好相反,這裡只允許使用key檔案登陸。
PasswordAuthentication no
這種方式比起密碼要安全的多,唯一要注意的地方就是證照被拷貝 ,建議你給證照加上 passphrase。
證照的 passphrase 是可以通過openssl工具將其剝離的,SSH證照我沒有試過,但是遠離都差不多。
當你使用XShell, Xftp, WinSCP, SecureCRT, SecureFX ……等等軟體登入時,該軟體都提供記住密碼的功能,使你下次再登陸的時候無須輸入密碼就可以進入系統。這樣做的確非常方便,
但是你是否想過你的電腦一旦丟失或者被其他人進入,那有多麼危險。我之前每天揹著膝上型電腦上班,上面安裝著XShell並且密碼全部記憶在裡面。這使我意識到一點電腦丟失,有多麼可怕。
禁止SSH客戶端記住密碼,你不要要求別人那麼做。你也無法控制,最終我找到了一種解決方案。
ChallengeResponseAuthentication yes
每次登陸都回提示你輸入密碼。密碼儲存也無效。
GSSAPIAuthentication no #GSSAPIAuthentication yes #GSSAPICleanupCredentials yes #GSSAPICleanupCredentials yes #GSSAPIStrictAcceptorCheck yes #GSSAPIKeyExchange no
SA的操作記錄問題
通過~/.bash_history檔案記錄系統管理員的操作記錄,定製.bash_history格式
HISTSIZE=1000 HISTFILESIZE=2000 HISTTIMEFORMAT="%Y-%m-%d-%H:%M:%S " export HISTTIMEFORMAT
看看實際效果
$ history | head 1 2012-02-27-09:10:45 do-release-upgrade 2 2012-02-27-09:10:45 vim /etc/network/interfaces 3 2012-02-27-09:10:45 vi /etc/network/interfaces 4 2012-02-27-09:10:45 ping www.163.com
/etc/sudoers
Cmnd_Alias WEBMASTER = /srv/nginx/sbin/nginx, /srv/php/sbin/php-fpm, !/srv/mysql/bin/* www localhost = NETWORKING, SERVICES, DELEGATING, PROCESSES, WEBMASTER Cmnd_Alias Database = /usr/bin/mysqldump, /srv/mysql/bin/mysql, /u01/oracle/10.x.x/bin/sqlplus mysql localhost = NETWORKING, SERVICES, DELEGATING, PROCESSES, WEBMASTER, Database
使用www使用者測試登入,無誤後修改SSH配置檔案,禁止root登入。
vim /etc/ssh/sshd_config PermitRootLogin no
然後在測試從www sudo 執行命令, 可能成功啟動nginx 與 php-fpm
臨時檔案不應該有執行許可權
/tmp
/dev/sda3 /tmp ext4 nosuid,noexec,nodev,rw 0 0
同時使用符號連線將/var/tmp 指向 /tmp
/dev/shm
none /dev/shm tmpfs defaults,nosuid,noexec,rw 0 0
開啟防火牆
lokkit --enabled
預設INPUT,FORWARD,OUTPUT 三個都是ACCEPT
-P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT
從安全的角度出發,INPUT,FORWARD,OUTPUT 三個都是DROP最安全,但配置的時候會給你帶來非常多的不可預料的麻煩。
-P INPUT DROP -P FORWARD DROP -P OUTPUT DROP
折中的方案,也是打多少硬體防火牆廠商所採用的方案,他們都是採用INPUT預設禁用所有,OUTPUT預設允許所有,你只要關注INPUT規則即可。
-P INPUT DROP -P FORWARD ACCEPT -P OUTPUT ACCEPT
很多資料上是這麼寫的
* soft nofile 65535 * hard nofile 65535
這樣做是偷懶,會帶來很多問題,如果你的伺服器被攻擊,由於你的設定,系統將耗光你的資源,直到沒有任何響應為止,你可能鍵盤輸入都成問題,你不得不重啟伺服器,但你會發現重啟只能維持短暫幾分鐘,又會陷入無響應狀態。
nobody soft nofile 4096 nobody hard nofile 8192
為什麼會設定為nobody使用者呢?因為root使用者啟動系統後web 伺服器會使用nobody使用者建立子程式,socket連線實際上是nobody使用者在處理。root 僅僅是守護父程式。
mysql soft nofile 2048 mysql hard nofile 2048
針對 mysql 做限制
提示
關於 nofile 即開啟檔案數,這個跟socket有非常緊密的關係,在linux系統中任何裝置都被看做是一個檔案(字元裝置),你連線一個滑鼠,鍵盤,攝像頭,硬碟等等都被看作開啟一個裝置檔案,所以預設1024是遠遠不夠的。
配置檔案
ls /etc/pam.d/ chfn crond login passwd remote runuser-l smtp ssh-keycat sudo-i system-auth-ac chsh fingerprint-auth newrole password-auth run_init smartcard-auth smtp.postfix su su-l config-util fingerprint-auth-ac other password-auth-ac runuser smartcard-auth-ac sshd sudo system-auth
認證外掛
ls /lib64/security/
此模組的功能是,登陸錯誤輸入密碼3次,5分鐘後自動解禁,在未解禁期間輸入正確密碼也無法登陸。
在配置檔案 /etc/pam.d/sshd 頂端加入
auth required pam_tally2.so deny=3 onerr=fail unlock_time=300
檢視失敗次數
# pam_tally2 Login Failures Latest failure From root 14 07/12/13 15:44:37 192.168.6.2 neo 8 07/12/13 15:45:36 192.168.6.2
重置計數器
# pam_tally2 -r -u root Login Failures Latest failure From root 14 07/12/13 15:44:37 192.168.6.2 # pam_tally2 -r -u neo Login Failures Latest failure From neo 8 07/12/13 15:45:36 192.168.6.2
pam_tally2 計數器日誌儲存在 /var/log/tallylog 注意,這是二進位制格式的檔案
例 1. /etc/pam.d/sshd – pam_tally2.so
# cat /etc/pam.d/sshd #%PAM-1.0 auth required pam_tally2.so deny=3 onerr=fail unlock_time=300 auth required pam_sepermit.so auth include password-auth account required pam_nologin.so account include password-auth password include password-auth # pam_selinux.so close should be the first session rule session required pam_selinux.so close session required pam_loginuid.so # pam_selinux.so open should only be followed by sessions to be executed in the user context session required pam_selinux.so open env_params session optional pam_keyinit.so force revoke session include password-auth
以上配置root使用者不受限制, 如果需要限制root使用者,參考下面
auth required pam_tally2.so deny=3 unlock_time=5 even_deny_root root_unlock_time=1800
將下面一行新增到 /etc/pam.d/sshd 中,這裡採用白名單方式,你也可以採用黑名單方式
auth required pam_listfile.so item=user sense=allow file=/etc/ssh/whitelist onerr=fail
將允許登陸的使用者新增到 /etc/ssh/whitelist,除此之外的使用者將不能通過ssh登陸到你的系統
# cat /etc/ssh/whitelist neo www
例 2. /etc/pam.d/sshd – pam_listfile.so
# cat /etc/pam.d/sshd #%PAM-1.0 auth required pam_listfile.so item=user sense=allow file=/etc/ssh/whitelist onerr=fail auth required pam_tally2.so deny=3 onerr=fail unlock_time=300 auth required pam_sepermit.so auth include password-auth account required pam_nologin.so account include password-auth password include password-auth # pam_selinux.so close should be the first session rule session required pam_selinux.so close session required pam_loginuid.so # pam_selinux.so open should only be followed by sessions to be executed in the user context session required pam_selinux.so open env_params session optional pam_keyinit.so force revoke session include password-auth
sense=allow 白名單方式, sense=deny 黑名單方式
auth required pam_listfile.so item=user sense=deny file=/etc/ssh/blacklist onerr=fail
更多細節請檢視手冊 $ man pam_listfile
編輯 /etc/pam.d/sshd 檔案,加入下面一行
account required pam_access.so
儲存後重啟sshd程式
編輯 /etc/security/access.conf 檔案
cat >> /etc/security/access.conf << EOF - : root : ALL EXCEPT 192.168.6.1 EOF
只能通過 192.168.6.1 登陸, 新增多個IP地址
- : root : ALL EXCEPT 192.168.6.1 192.168.6.2
測試是否生效
限制普通使用者通過su命令提升許可權至root. 只有屬於wheel組的使用者允許通過su切換到root使用者
編輯 /etc/pam.d/su 檔案,去掉下面的註釋
auth required pam_wheel.so use_uid
修改使用者組別,新增到wheel組
# usermod -G wheel www # id www uid=501(www) gid=501(www) groups=501(www),10(wheel)
沒有加入到wheel組的使用者使用su時會提示密碼不正確。
$ su - root Password: su: incorrect password
相關文章
- Linux系統配置(系統優化)Linux優化
- linux系統相關概念與配置Linux
- Linux 系統優化Linux優化
- iptables配置-Linux系統安全防火牆Linux防火牆
- Linux系統Tomcat安裝與配置。LinuxTomcat
- linux系統配置及相關檔案Linux
- 在docker中做php優化的發現(未完待續)DockerPHP優化
- 如何最佳化Linux系統安全?Linux學習Linux
- Linux基礎優化與安全歸納總結Linux優化
- 倒數計時三天|技術嘉年華的範兒即將拉滿,敬請關注
- linux系統關於kernel.sem調優Linux
- Apache網頁優化與安全優化Apache網頁優化
- 【系統】打造自己最喜愛的 Windows10 —— 系統與軟體配置優化篇Windows優化
- Linux 檔案許可權、系統優化Linux優化
- Nosql——Redis配置與優化SQLRedis優化
- Nginx安全優化與效能調優Nginx優化
- Linux系統調優Linux
- git安裝與使用,未完待續... ...Git
- (mysql優化-3) 系統優化MySql優化
- 2023 CDO必須關注的系統
- linux系統中 SElinux安全子系統Linux
- next主題配置與優化優化
- Laravel 團隊任務管理系統(持續開發、優化)Laravel優化
- 與其他系統相比,Linux系統有什麼優點和缺點?Linux
- 資料安全,是陪玩遊戲系統時刻關注的問題遊戲
- Apache網頁與安全優化Apache網頁優化
- Linux是什麼系統?Linux系統有何優勢?Linux
- windows10系統右下角顯示正在優化設定,請稍後如何關閉Windows優化
- Linux 安裝 MySQL 8 的錯誤整理(待續)LinuxMySql
- 自動化客服系統:定義與優勢
- iOS12系統4個值得關注的新功能 讓裝置更加安全iOS
- 第一週作業Linux基礎(未完待續,週日繼續)Linux
- 請不要設定目標!而是專注於系統 - jamesclear
- 系統優化怎麼做-Tomcat優化優化Tomcat
- MySQL優化之系統變數優化MySql優化變數
- linux系統基礎的優化以及常用命令Linux優化
- Linux系統配置本地yum源Linux
- linux 主機mail 系統配置.LinuxAI
- Linux系統下網路配置Linux