CentOS系統的優化 優化之前,首先查看版本信息 # cat /etc/redhat-release CentOS release 6.7 (Final) # 系統版本信息 # uname –r 2.6.32-573.el6.x86_64 # 內核版本信息 # uname -m x86_64 #表 ...
CentOS系統的優化
優化之前,首先查看版本信息
# cat /etc/redhat-release CentOS release 6.7 (Final) # 系統版本信息 # uname –r 2.6.32-573.el6.x86_64 # 內核版本信息 # uname -m x86_64 #表示為64位系統 # uname –a # 顯示全部信息 Linux hostname2.6.32-573.el6.x86_64 #1 SMP Thu Jul 23 15:44:03 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
Linux基礎優化與安全重點小結
1 不用root登錄管理系統,而以普通用戶登錄通過sudo授權管理
2 更改預設的遠程連接SSH服務埠,禁止root用戶遠程連接,甚至要更改SSH服務只監聽內網IP
3 定時自動更新伺服器時間,使其和互聯網同步
4 配置yum更新源,從國內更新源下載安裝軟體包
5 關閉SELinux及iptables
6 定時自動清理郵件臨時目錄垃圾文件,防止磁碟inodes數被小文件占滿
7 調整文件描述符的數量,進程及文件的打開都會消耗文件描述符的數量
8 精簡並保留必要的開機啟動服務
9 Linux內核參數優化/etc/sysctl.config,執行sysetl –p生效
10 更改系統字元集, 為“zh_CN.UTF-8”,使其支持中文,防止出現亂碼問題。
11 鎖定關鍵文件,如: passwd、/etc/shadow/、/etc/group/、/etc/gshadow、/etc/inittab,處理以上內容後把chattr、lsattr、改名為root,轉移走,這樣就安全多了。
12 清空/etc/issue /etcissue.net,去除系統及內核版本登錄前的屏幕顯示
13 清除多餘的系統虛擬用戶賬號
14 為grub引導菜單加密碼
15 禁止主機被ping
16 打補丁並升級有已知漏洞的軟體
拓展
掌握Linux系統的7種運行級別。
1 運行級別0:系統停機狀態,系統預設運行級別不能設為0,否則不能正常啟動
2 運行級別1:單用戶工作狀態,root許可權,用於系統維護,禁止遠程登陸
3 運行級別2:多用戶狀態(沒有NFS)
4 運行級別3:完全的多用戶狀態(有NFS),登陸後進入控制台命令行模式
5 運行級別4:系統未使用,保留
6 運行級別5:X11控制台,登陸後進入圖形GUI模式
7 運行級別6:系統正常關閉並重啟,預設運行級別不能設為6,否則不能正常啟動
掌握Linux系統從開機到登錄之前的啟動流程。是由etc/inittab控制的
1. 使用阿裡雲鏡像做樣本源
預設國外的yum源比較慢,所以換成國內的。
1 # cd /etc/yum.repos.d/ 2 # ls 3 CentOS-Base.repo CentOS-Media.repo 4 CentOS-Debuginfo.repo CentOS-Vault.repo 5 CentOS-fasttrack.repo 6 # cp CentOS-Base.repo CentOS-Base.repo.ori 更改配置文件之前進行備份 7 # wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo centos6系統 8 # echo "192.168.14.200 mirrors.aliyun.com" >>/etc/hosts 公網地址換成內網地址 9 # yum -y install tree nmap sysstat lrzsz dos2unix telnet 安裝必要的軟體包(tree)
2. 關閉SELinux功能
1) 修改配置文件,使關閉SELinux永久生效:
l 第一種方法
1 # vim /etc/selinux/config 2 然後找到SELINUX=enforcing改成SELINUX=disabled 3 ESC:wq結束
l 第二種方法
1 sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config 2 sed -i 's#SELINUX=enforcing#SELINUX=disabled#' /etc/selinux/config
2) 臨時關閉SELinux,可在命令行執行如下命令:
1 [root@rootedu ~]# getenforce <--查看現在狀態 2 3 Enforcing 4 5 [root@rootedu ~]# setenforce 6 7 usage: setenforce [ Enforcing | Permissive | 1 | 0 ] 8 9 [root@rootedu ~]# setenforce 0 <-- 臨時將selinux調成下麵的狀態 10 11 [root@rootedu ~]# getenforce 12 13 Permissive
命令說明:setenforce:用於命令行管理SELinux的級別,
getenforce:查看SELinux當前級別
提示:修改配置SELinux後,要想其生效,必須要重啟系統。再生產場景中不能隨意重啟系統。
3) 關閉iptables防火牆
l 臨時關閉,關機之後會重新啟動
1 /etc/init.d/iptables status <-- 查看看是否開啟 2 /etc/init.d/iptables stop <-- 關閉防火牆
l 關閉開機自啟動的防火牆
第一種方法
1 [root@rootedu ~]# chkconfig --list|grep ipt <-- 查看狀態 2 iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off 3 [root@rootedu ~]# chkconfig iptables off <--下一次系統開啟不運行防火牆 4 [root@rootedu ~]# chkconfig --list|grep ipt 5 iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
第二種方法
1 /etc/init.d/iptables stop <--當前關閉防火牆 2 chkconfig iptables off <--關閉開機自啟動命令
4) 設置運行級別為3(文本模式)
1 設定運行級別(runlevel)為3(一般安裝系統後預設為3)即表示使用文本命令模式管理linux 2 3 grep 3:initdefault /etc/inittab <-- 檢查命令 4 runlevel <--另一種簡單方法 5 init 3 <--切換運行級別
5) 精簡開機系統啟動
1)系統開機必須要開啟的服務
l sshd
遠程連接linux伺服器時需要用到這個服務程式,所以必須開啟
l rsyslog
日誌相關軟體,
l network
網路服務
l crond
會周期的執行系統和用戶配置的任務計劃。
l sysstat
sysstat是一個軟體包,包含檢測系統性能及效率的一組工具.\
2)設置開啟自啟動服務的方法
手動關閉用setup
chkconfig --list|grep 3:on <--查看開機自啟動的項目
第一種快速處理方法:先全關閉,再開啟需要保留的。
操作思路:先將3級別文本模式下預設開啟的服務都關閉,然後開啟需要開啟的服務。
操作命令如下:
1 LANG=en 2 for root in `chkconfig --list|grep 3:on|awk '{print $1}'`;do chkconfig --level 3 $root off;done 3 for root in crond network rsyslog sshd sysstat ;do chkconfig --level 3 $root on;done 4 chkconfig --list|grep 3:on
第二種快速處理方法
1 for root in `chkconfig --list|grep "3:on"|awk '{print $1}'|grep -vE "crond|network|sshd|rsyslog|sysstat"`;do chkconfig $root off;done
第三種快速處理方法(逼格最高)
chkconfig --list|grep 3:on|grep -vE "crond|sshd|network|rsyslog|sysstat " |awk '{print "chkconfig " $1 " off"}'|bash
6) 添加普通用戶賬號
linux/unix是一個多用戶,多任務的操作系統
超級管理員(root):擁有最高許可權
普通用戶
l 一條命令設置密碼
echo '123456'|passwd --stdin root <--root用戶名,密碼為123456
| 使用命令添加一個普通用戶,命令如下:
1 useradd root <--添加用戶 2 passwd root <--設置用戶密碼
l 嘗試切換用戶角色,命令如下:
1 [root@hostname ~]# su – root <--由root管理員,切換到普通用戶root 2 [root@hostname ~]$ whoami <--查看當前用戶 3 root 4 [root@hostname ~]$ su - <--切到root用戶 5 Password:
l linux命令提示符由PS1環境變數
查看環境變數: echo $PS1
7) 利用sudo控制用戶的使用許可權
為了方便管理,可以給用戶授權,過程:輸入vi sudoers找到98行,在下麵放入如下內容:
oldboy ALL=(ALL) NOPASSWD: ALL <--all表示完全的系統許可權,NOPASSWD表示提示許可權命令時不需要密碼
配置完成後要進行檢查,命令如下:
[oldboy@hostname ~]# grep root /etc/sudoers oldboy ALL=(ALL) NOPASSWD: ALL
此時再以oldboy用戶登錄系統時,就可以通過執行sudo ls –l /root (sudo後面跟正常命令)的命令以root用戶的許可權管理系統了,如下:
[oldboy@hostname ~]$ ls /root/ ls: cannot open directory /root/: Permission denied [oldboy@hostname ~]$ sudo ls /root/ HostKeyDB.txt test.txt 12345 install.log woaini
8) Linux系統安全最小化原則說明
a) 安裝Linux系統最小化,即選包最小化。
b) 開機自啟動服務最小化,即不用的服務不開啟。
c) 操作命令最小化。
d) 登錄Linux用戶最小化。平時沒有特殊需要就用普通用戶登錄即可。
e) 普通用戶授權許可權最小化。只給用戶必要的管理系統的命令。
f) Linux系統文件及目錄的許可權設置最小化。禁止隨意創建,更改,刪除文件。
g) 程式服務運行最小化,即程式服務運行儘量不用root身份進行。
9) 更改SSH服務端遠程登錄的配置
windows伺服器的預設遠程管理埠是3389,管理員用戶是administrator,普通用戶guest。Linux管理用戶是root,遠程連接預設埠port22。
1 [root@hostname ~]#cp /etc/ssh/sshd_config /etc/ssh/sshd_config.ori <--備份配置文件,簡單寫法cp /etc/ssh/sshd_config{,.ori}
2 [root@hostname ~]# vim /etc/ssh/sshd_config
3 進入17行加入:
4 ####by root#2011-11-24##
5 rt 52113
6 PermitRootLogin no
7 PermitEmptyPasswords no
8 UseDNS no
9 GSSAPIAuthentication no
10 ####by root#2011-11-24##
11 /etc/init.d/sshd reload <--reload為平滑重啟,不會影響正在SSH連接的其他用戶,restart直接斷開生效
然後就連不上了,因為埠改了。
然後更改會話選項里的SSH2里的埠還有用戶名。就OK了
10) Linux中文顯示設置
此選項為優化可選項,即調整Linux系統的字元集設置。
簡單的說,字元集就是一套文字元號及其編碼。目前linux下常用的字元集有:
GBK:定長雙位元組
UTF-8:非定常,1~4位元組,廣泛支持
臨時生效,命令:LANG=”zh_CN.UTF-8’
永久生效,可以通過快捷的命令方式在/etc/sysconfig/i18n中添加如下內容,使其支持中文顯示:
1 [root@hostname ~]# echo $LANG 2 en_US.UTF-8 3 [root@hostname ~]# cat /etc/sysconfig/i18n 4 LANG="en_US.UTF-8" 5 SYSFONT="latarcyrheb-sun16" 6 [root@hostname ~]# cp /etc/sysconfig/i18n /etc/sysconfig/i18n.ori 7 [root@hostname ~]#echo ‘LANG=”zh_CN.UTF-8”’>/etc/sysconfig/i18n 8 [root@hostname ~]#source /etc/sysconfig/i18n <--使其生效 9 [root@hostname ~]#echo $LANG 10 zh_CN.UTF-8
11) 設置linux伺服器時間同步
1 ntpdate time.nist.gov<--時間同步 2 ntpdate ntp1.aliyun.com<--國內阿裡雲時間同步伺服器 3 利用定時任務crond把上述命令每5分鐘自動執行一次,命令如下: 4 5 echo '#time sync by root at 2010-2-1' >>/var/spool/cron/root 6 echo '*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1' >>/var/spool/cron/root 7 crontab –l 8 [root@rootedu ~]# crontab -l 9 #time sync by root at 2010-2-1 10 */5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1
12) 歷史記錄數及登錄超時環境
1.設置閑置賬號超時時間,命令如下,此處為臨時生效
export TMOUT=10 <--設置連接會話的超時時間
2.設置Linux的命令行歷史記錄數, 命令如下,此處為臨時生效
1 export HISTSIZE=5 2 export TMOUT=10 連接的超時時間控制變數。 3 4 export HISTSIZE=5 命令行的歷史記錄數量變數。 5 export HISTFILESIZE=10 歷史記錄文件的命令數量變數(~/.bash_history)。
13) 調整Linux系統描述符數量和最大進程數
系統描述符
先用ulimit –n查看有幾個描述符,規則是“軟(soft)”或“硬(hard)”
對於高併發的業務Linux伺服器來說,預設的設置值是不夠的,需要調整
調整方法:
執行vim /etc/security/limits.conf再文件結尾加上如下一行(全局) * - nofile 65535
或者直接執行下麵的命令
1 echo '* - nofile 65535 ' >>/etc/security/limits.conf 2 tail -4 /etc/security/limits.conf <--查看文件最後4行 3 [root@rootedu tmp]# ulimit –n <--查看是否生效 4 65535
總結:
1 臨時生效 ulimit -SHn 65535 2 永久生效 echo '* - nofile 65535 ' >>/etc/security/limits.conf 3 或者: 4 cat /etc/security/limits.conf 5 * soft nofile 65536 6 * hard nofile 65536
最大線程數
ulimit -a
max user processes (-u) #系統限制某用戶下最多可以運行多少進程或線程
root 賬號下 ulimit -u 出現的max user processes 的值預設是 # cat /proc/sys/kernel/threads-max的值/2,即系統線程數的一半
普通賬號下 ulimit -u 出現的max user processes的值 預設是 /etc/security/limits.d/20-nproc.conf(centos6 是90-nproc.conf) 文件中的
1.在/etc/security/limits.conf文件里添加如下內容:
* soft nproc 65535 # 打開進程數 * hard nproc 65535 # 打開進程數 操作方法:1 echo "* soft nproc 65535" >> /etc/security/limits.conf 2 echo "* hard nproc 65535" >> /etc/security/limits.conf
註意:修改這裡,普通用戶 max user process值是不生效的,需要修改/etc/security/limits.d/20-nproc.conf文件中的值。或者90-nproc.conf
如果使用*號讓全局用戶生效是受文件/etc/security/limits.d/20-nproc.conf中nproc值大小制約的,而如果僅僅是針對某個用戶,那麼就不受該文件nproc值大小的影響。
2.修改 /etc/security/limits.d/20-nproc.conf
因為普通用戶受這個文件里的值影響
修改為:
* soft nproc 65535
3.系統總限制
其實上面的 max user processes 65535 的值也只是表象,普通用戶最大進程數無法達到65535 ,因為用戶的max user processes的值,最後是受全局的kernel.pid_max的值限制。也就是說kernel.pid_max=1024 ,那麼你用戶的max user processes的值是127426 ,用戶能打開的最大進程數還是1024。
查看全局的pid_max方法: 方法一:cat /proc/sys/kernel/pid_max
方法二:
# sysctl kernel.pid_max kernel.pid_max = 32768
修改這個值方法:
echo 65535 > /proc/sys/kernel/pid_max 所以以上都操作完成後,才算是正確修改了max user processes 的值 上面只是臨時生效,重啟機器後會失效 永久生效方法: 在/etc/sysctl.conf中添加kernel.pid_max = 655351 # vim /etc/sysctl.conf 2 kernel.pid_max = 65535 3 或者: 4 echo "kernel.pid_max = 65535" >> /etc/sysctl.conf然後重啟機器。
14)linux伺服器內核參數優化
優化的方法
1 cat>>/etc/sysctl.conf<<EOF 2 net.ipv4.tcp_fin_timeout = 2 3 net.ipv4.tcp_tw_reuse = 1 4 net.ipv4.tcp_tw_recycle = 1 5 net.ipv4.tcp_syncookies = 1 6 net.ipv4.tcp_keepalive_time = 600 7 net.ipv4.ip_local_port_range = 4000 65000 8 net.ipv4.tcp_max_syn_backlog = 16384 9 net.ipv4.tcp_max_tw_buckets = 36000 10 net.ipv4.route.gc_timeout = 100 11 net.ipv4.tcp_syn_retries = 1 12 net.ipv4.tcp_synack_retries = 1 13 net.core.somaxconn = 16384 14 net.core.netdev_max_backlog = 16384 15 net.ipv4.tcp_max_orphans = 16384 16 net.nf_conntrack_max = 25000000 17 net.netfilter.nf_conntrack_max = 25000000 18 net.netfilter.nf_conntrack_tcp_timeout_established = 180 19 net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120 20 net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60 21 net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120 22 EOF
然後用sysctl –p使其生效
然後vimdiff /etc/sysctl.conf /etc/sysctl.conf.ori 更改的文件與拷貝的文件對比
15) 隱藏Linux版本信息顯示
登錄後執行如下命令,顯示其實際存放內容
1 [root@rootedu ~]# cat /etc/issue <--查看當前主機信息 2 CentOS release 6.7 (Final) 3 Kernel \r on an \m 4 [root@rootedu ~]# uname -r 5 2.6.32-573.el6.x86_64 6 [root@rootedu ~]# uname -m 7 x86_64
執行以下命令清除系統版本及內核信息(清空就好,不用刪除)
>/etc/issue <--清空 >/etc/issue.net <--清空
cat /etc/redhat-release(需要的情況,能過內部其它文件還是可以查到)
16) 鎖定關鍵系統文件,防止提權被篡改(可選)
要鎖定關鍵系統文件,必須對賬號密碼及啟動文件加鎖,防止被篡改。上鎖命令如下
chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab
提示:上鎖後,所有用戶都不能對文件進行修改
解鎖:chattr -i
17) 清除多餘的系統虛擬賬號(可選)
操作前要先根據公司系統提供的服務確定那些賬號不需要使用,如果不確定就不要操作了,一般情況下,一個規範的系統提供的服務都比較少,因此,系統中預設的絕大多數虛擬用戶都是可以刪除掉的(不直接刪除,註釋即可)。
18) 為grub菜單加密碼(可選)
為grup菜單加密碼的目的是防止他人修改grup做內核等啟動設置,以及用單用戶模式啟動破解root密碼等做操作。也可以在安裝系統過程中設定。
流程:
1)先用/sbin/grup-crypt產生一個MD5密碼串
2)修改grup.conf文件
3)重啟生效
可以在安裝過程中設定.
19) 禁止Linux系統被ping(可選)
此優化項從安全形度,禁止ping會增加系統安全,但是我們自己也會通過ping來檢查伺服器是否異常,所以這不是一個好方法,不建議使用。
比較好一點的是通過iptabies設置讓特定的IP可以ping.
禁止ping的命令如下:
1 echo “net.ipv4.icmp_echo_ignore_all=1” >> /etc/sysctl.conf <--禁止ping 2 tail -1 / etc/sysctl.conf <--查看 3 sysctl -p <--生效 4 echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all <--臨時ping不通 5 echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all <--臨時還原的方法
20) 升級具有典型漏洞的軟體版本
步驟
1)查看相關軟體的版本號
[root@rootedy ~]# rpm -qa openssl openssl-1.0.1e-42.el6_7.4.x86_64
2)執行升級已知漏洞的軟體版本到最新
[root@rootedy ~]# yum install openssl -y Loaded plugins: fastestmirror, security Setting up Install Process Determining fastest mirrors * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com base | 3.7 kB 00:00 extras | 3.4 kB 00:00 updates | 3.4 kB 00:00 updates/primary_db | 5.2 MB 00:22 Package openssl-1.0.1e-42.el6_7.4.x86_64 already installed and latest version Nothing to do