天天看點

Linux-centos系統優化Linux作業系統優化

Linux作業系統優化

一、開啟VT和HT

Hyper-Threading(HT)

基本做雲平台的,VT 和 HT 打開都是必須的,超線程技術(HT)就是利用特殊的硬體指令,把兩個邏輯核心模拟

成兩個實體晶片,讓單個處理器都能使用線程級并行計算,進而相容多線程作業系統和軟體,減少了 CPU 的閑置時 間,提高的 CPU 的運作效率。

二、關閉 CPU 節能

關閉節能後,對性能還是有所提升的,是以堅決調整成性能型(Performance)。當然也可以在作業系統級别進行

# 也可以在系統層面進行設定,配置方法如下:
for CPUFREQ in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do [ -f $CPUFREQ ] || continue; echo -n performance > $CPUFREQ; done 
           

三、yum源處理與常用軟體包安裝

# 一:先在測試環境,配置好yum源
預設國外的yum源(軟體倉庫)比較慢,是以換成國内的。
# 1.1、備份
[[email protected] ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

# 1.2、下載下傳新的CentOS-Base.repo 到/etc/yum.repos.d/
[[email protected] ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

# 1.3.添加epel源
[[email protected] ~]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

# 二:然後執行yum update -y,以及安裝常用軟體包,然後執行部署,将部署過程中安裝的包快取區域
[[email protected] ~]# yum update -y  # 剛裝完系統後就立即執行,日後就不要輕易更新了
[[email protected] ~]# yum -y install tree nmap sysstat lrzsz  telnet bash-completion bash-completion-extras vim  lsof  net-tools rsync ntpdate nfs-utils

# 三:将所有主機上的軟體包彙總到一起,做成一個自己的yum源用來後期使用
           

四、規範系統主機名

五、添加hosts檔案

# 編輯好之後,每台機器都發一份
vim /etc/hosts 
172.16.10.11 nc1 ceph-deploy
172.16.10.12 nc2
172.16.10.13 nc3
172.16.10.14 cs1
172.16.10.15 cs2
172.16.10.16 cs3
# 實作叢集主機之間互相用主機名解析
           

六、關閉SELinux

SELinux(Security-Enhanced Linux)是美國國家安全局(NSA)對于強制通路控制的實作,這個功能讓系統管理者又愛又恨,這裡我們還是把它給關閉了吧,至于安全問題,後面通過其他手段來解決,這也是大多數生産環境的做法,如果非要開啟也是可以的。

#臨時關閉
[[email protected] ~]# setenforce  0

#永久關閉,修改完配置後重新開機主機
[[email protected] ~]# sed 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

#檢查結果
[[email protected] ~]# grep "disabled" /etc/selinux/config
           

七、關閉防火牆

關閉防火牆的目的是為了讓初學者學習更友善,将來在學了Firewalld技術後可再統一開啟。 在企業環境中,一般隻有配置外網IP的linux伺服器才需要開啟防火牆,但即使是有外網IP,對于高并發高流量的業務伺服器仍是不能開的,因為會有較大性能損失,導緻網站通路很慢,這種情況下隻能在前端加更好的硬體防火牆了。

# 臨時關閉
[[email protected] ~]# systemctl  stop firewalld

# 設定開機不啟動
[[email protected] ~]# systemctl  disable  firewalld
           

八、配置系統時間

#給定時任務加上注釋
[[email protected] ~]# echo '#Timing synchronization time' >>/var/spool/cron/root

#定時任務
[[email protected] ~]# echo '0 */1 * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' >>/var/spool/cron/root

#檢查結果
[[email protected] ~]# crontab -l
           

九、系統核心優化

1、ulimit指令介紹

我們可以ulimit指令對系統資源進行控制,選項如下

設定使用者級所能打開的最大程序數目:-u選項

設定使用者級所能配置設定到的檔案描述符數量:-n選項

ulimit -n 12
           

2、控制使用者開啟的最大程序數目

[[email protected] ~~]# useradd egon
[[email protected] ~~]# ulimit -u 3  # 每個使用者能同時開啟的最大程序數均隻有3個
[[email protected] ~~]# su - egon  # 切換到egon使用者下,先執行了一個bash解釋器程序,此外還能再開倆個
[[email protected] ~~]$ sleep 1000 &
[1] 1435
[[email protected] ~~]$ sleep 2000 &
[2] 1436
[[email protected] ~~]$ sleep 3000 &
-bash: fork: retry: 資源暫時不可用
-bash: fork: retry: 資源暫時不可用
-......

# 注意:
1、ulimit -u 3是限制每個使用者能同時開啟的最大程序數均隻有3,而不是累計到一起總共有3個
2、測試的時候sleep後的時間長一點,模拟出同時開啟多個程序的效果,不然執行一條短指令很快就結束了
           

3、檔案描述符

程序每打開一個檔案,作業系統核心就會為該打開的檔案配置設定一個編号(非負整數),該編号稱之為檔案描述符(File Descriptor)或者檔案handle->也有人将其譯為檔案句柄

檔案打開後的處理邏輯:
程序->檔案描述符->作業系統核心->一個具體的檔案
即核心(kernel)就是利用檔案描述符(file descriptor)來通路檔案

在程式設計中,一些涉及底層的程式編寫往往會圍繞着檔案描述符展開。但是檔案描述符這一概念往往隻适用于UNIX、Linux這樣的作業系統。

更多關于描述符的概念:https://www.cnblogs.com/linhaifeng/articles/13959014.html
           

程序每打開一個檔案,作業系統就會為程序配置設定一個對應的檔案描述符。檔案描述符的數目是可以設定的,而一旦設定過小,程序會随着打開的檔案數增多,因為達到了檔案描述的上限而無法打開檔案,進而抛出異常

# 檔案描述符測試代碼
[[email protected] ~~]# cat test1.py 
import os
import time
from threading import Thread

print(os.getpid())

def task(n):
    with open('%s.txt' %n,mode='wt') as f1:
        time.sleep(1000)

if __name__ == "__main__":
    count=1
    while True:
        Thread(target=task,args=(count,)).start()
        count+=1
        time.sleep(3)

[[email protected] ~~]# cat test2.py 
import os
import time
from threading import Thread

print(os.getpid())

def task(n):
    with open('egon%s.txt' %n,mode='wt') as f1:
        time.sleep(1000)

if __name__ == "__main__":
    count=1
    while True:
        Thread(target=task,args=(count,)).start()
        count+=1
        time.sleep(3)


# 測試
[[email protected] ~~]# ulimit -n 12  # 最大的檔案描述符數為12,每個使用者級程序能打開的最大檔案數均隻有12個
[[email protected] ~~]# python test1.py &
[1] 1263
[[email protected] ~~]# 1263

[[email protected] ~~]# python test2.py &
[2] 1266
[[email protected] ~~]# 1266

# 在另外一個終端檢視
[[email protected] ~~]# ll /proc/1263/fd
總用量 0
lrwx------. 1 root root 64 11月 12 18:18 0 -> /dev/pts/0  # 指向目前終端的标準輸入
lrwx------. 1 root root 64 11月 12 18:18 1 -> /dev/pts/0  # 指向目前終端的标準正确輸出
lrwx------. 1 root root 64 11月 12 18:18 2 -> /dev/pts/0  # 指向目前終端的标準錯誤輸出
l-wx------. 1 root root 64 11月 12 18:18 3 -> /root/1.txt
l-wx------. 1 root root 64 11月 12 18:18 4 -> /root/2.txt
l-wx------. 1 root root 64 11月 12 18:18 5 -> /root/3.txt
l-wx------. 1 root root 64 11月 12 18:18 6 -> /root/4.txt
l-wx------. 1 root root 64 11月 12 18:18 7 -> /root/5.txt
[[email protected] ~~]# ll /proc/1266/fd
lrwx------. 1 root root 64 11月 12 18:18 0 -> /dev/pts/0
lrwx------. 1 root root 64 11月 12 18:18 1 -> /dev/pts/0
lrwx------. 1 root root 64 11月 12 18:18 2 -> /dev/pts/0
l-wx------. 1 root root 64 11月 12 18:18 3 -> /root/egon1.txt
l-wx------. 1 root root 64 11月 12 18:18 4 -> /root/egon2.txt
l-wx------. 1 root root 64 11月 12 18:18 5 -> /root/egon3.txt
l-wx------. 1 root root 64 11月 12 18:18 6 -> /root/egon4.txt
l-wx------. 1 root root 64 11月 12 18:18 7 -> /root/egon5.txt

# 觀察1263與1266這倆程序各自一旦打開的檔案數目到達了12,就都會報錯
[[email protected] ~~]# Exception in thread Thread-10:
Traceback (most recent call last):
  File "/usr/lib64/python2.7/threading.py", line 812, in __bootstrap_inner
  File "/usr/lib64/python2.7/threading.py", line 765, in run
  File "test1.py", line 8, in task
IOError: [Errno 24] Too many open files: '10.txt'

Exception in thread Thread-11:
Traceback (most recent call last):
  File "/usr/lib64/python2.7/threading.py", line 812, in __bootstrap_inner
  File "/usr/lib64/python2.7/threading.py", line 765, in run
  File "test1.py", line 8, in task
IOError: [Errno 24] Too many open files: '11.txt'

Exception in thread Thread-10:
Traceback (most recent call last):
  File "/usr/lib64/python2.7/threading.py", line 812, in __bootstrap_inner
  File "/usr/lib64/python2.7/threading.py", line 765, in run
  File "test2.py", line 8, in task
IOError: [Errno 24] Too many open files: 'egon10.txt'
           

了解:系統級最大的檔案描述符個數,即核心程式最大可以打開的檔案數

Linux的/proc/sys/fs/file-max決定了目前核心可以打開的最大的檔案句柄數。

# 檢視目前的值:
cat /proc/sys/fs/file-max

這個值在kernel的文檔裡是這樣描述的:
The value  in  file-max  denotes  the  maximum number of file handles that the
Linux kernel will allocate. When you get a lot of error messages about running
out of  file handles, you might want to raise this limit. The default value is
10% of  RAM in kilobytes.  To  change it, just  write the new number  into the
file:

意思是file-max一般為記憶體大小(KB)的10%來計算,如果使用shell,可以這樣計算:
grep -r MemTotal /proc/meminfo | awk '{printf("%d",$2/10)}'

一般我們不需要主動設定這個值,因為該值會随着記憶體大小的變化而自動配置設定到記憶體的10%左右,除非這個值确實較小(可能有各種其他原因導緻file-max沒有設定為記憶體的10%),我們才需要設定

# 如何檢視目前kernel的句柄:
[[email protected] ~~]# cat /proc/sys/fs/file-nr
608	0	94306

file-nr在核心文檔裡得解釋如下:
Historically, the three values in file-nr denoted the number of allocated file
handles,  the number of  allocated but  unused file  handles, and  the maximum
number of file handles. Linux 2.6 always  reports 0 as the number of free file
handles -- this  is not an error,  it just means that the  number of allocated
file handles exactly matches the number of used file handles.
過去,filenr中的三個值表示已配置設定的檔案句柄數、已配置設定但未使用的檔案句柄數以及最大檔案句柄數。Linux2.6總是報告0作為空閑檔案句柄的數量——這不是一個錯誤,它隻是意味着配置設定的檔案句柄的數量與使用的檔案句柄的數量完全比對。
           

4、永久設定與優化

ulimit指令的設定都是臨時生效的,可以了解一下它的一些選項如下

-H選項和-S選項分别表示對給定資源的硬限制(hard limit)和軟限制(soft limit)進行設定。

硬限制(hard limit)一旦被設定以後就不能被非root使用者修改
軟限制(soft limit)可以增長達到硬限制(hard limit)。
硬限制(hard limit)一旦被設定以後就不能被非root使用者修改,軟限制(soft limit)可以增長達到硬限制(hard limit)

如果既沒有指定-H選項也沒有指定-S選項,那麼硬限制(hard limit)和軟限制(soft limit)都會被設定。

ulimit設定的值可以是一個數值,也可以是一些特定的值,比如:hard,soft,unlimited,分别代表目前硬體限制、目前軟體限制、不限制。

如果limit參數被省略,除非指定-H選項,否則資源目前的軟限制(soft limit)将會被列印出來。

如果既沒有指定-H選項也沒有指定-S選項,那麼硬限制(hard limit)和軟限制(soft limit)都會被設定。
           

若想永久設定,需要修改配置檔案

配置檔案2:/etc/security/limits.conf,該檔案可用于控制使用者最多同時打開的程序數目與檔案數目

#配置檔案介紹
<domain> <type>  <item>  <value>

<domain>表示要限制的使用者

<type>設定類型

<item>表示可選的資源

<value>表示要限制的值

#加大檔案描述符與最大打開的程序數
cat >>/etc/security/limits.conf<<EOF
* soft nofile 102400
* hard nofile 102400
* soft nproc 102400
* hard nproc 102400
EOF

#重新開機檢視
[[email protected] ~]# ulimit -n  # 檢視最大打開的檔案數目
65535
[[email protected] ~]# ulimit -u # 檢視最大打開的程序數目
           

配置檔案2:/etc/security/limits.d/20-nproc.conf ,該檔案隻用于控制使用者最多同時打開的程序數目,優先級高于/etc/security/limits.conf,出現沖突後,以自己的為準。

[[email protected] ~]# cat /etc/security/limits.d/20-nproc.conf 
egon1      soft    nproc     3  # 使用者egon1最多同時開3個程序
egon2      soft    nproc     4  # 使用者egon2最多同時開4個程序
*          soft    nproc     5  # 其他使用者最多同時開5個程序
root       soft    nproc     unlimited  # root使用者無限制

#重新開機生效,直接切換到egon1、egon2、其他使用者裡測試即可驗證優先級
           

5、調整Kernel pid max

This  file  (new in Linux 2.5) specifies the value at which PIDs  wrap around (i.e., the value in this file is  one  greater  than the  maximum  PID).   The  default  value  for this file, 32768,results in the same range of PIDs as  on  earlier  kernels.   On 32-bit  platfroms,  32768  is the maximum value for pid_max.  On 64-bit systems, pid_max can be set  to  any  value  up  to  2^22 (PID_MAX_LIMIT, approximately 4 million).

這個檔案(linux2.5中的新檔案)指定了PIDs環繞的值(即,這個檔案中的值比最大PID大一個)。此檔案的預設值32768将産生與早期核心相同的pid範圍。在32位平台上,32768是pid最大值。在64位系統上,pid最大值可以設定為2^22等于4194304(pid最大值限制,大約400萬)。
           

預設是

[[email protected] ~~]# cat /proc/sys/kernel/pid_max 
131072
           

通常夠用,可以酌情調整, 以減少滾動翻轉問題

臨時 調整為:

echo 4194303 > /proc/sys/kernel/pid_max 
           

永久生效

echo "kernel.pid_max= 4194303" | tee -a /etc/sysctl.conf 
sysctl -p
           

6、調整swappiness

調整swappiness, 主要控制系統對 swap 的使用,這個參數的調整最先見于 UnitedStack 公開的文檔中:

swappiness參數值可設定範圍在0到100之間。 此參數值越低,就會讓Linux系統盡量少用swap分區,多用記憶體。設定為100可能會影響整體性能,如果記憶體充足,就可以将這個值設定很低,甚至為0,以避免系統進行swap而影響性能,不建議設定成0,建議設定成10即可,詳解請看:https://www.cnblogs.com/linhaifeng/articles/13960093.html

[[email protected] ~~]# cat /proc/sys/vm/swappiness 
60
[[email protected] ~~]# echo "vm.swappiness = 10" | tee -a /etc/sysctl.conf
           

7、其他核心優化

#設定
[[email protected] ~]# cat >>/etc/sysctl.conf<<EOF
net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.ip_local_port_range = 4000    65000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_orphans = 16384
net.ipv4.ip_forward = 1
EOF

#生效
[[email protected] ~]# sysctl  -p

syncookies開啟後用來防止syn洪水攻擊,了解請看https://www.cnblogs.com/linhaifeng/articles/13959796.html
           

十、網絡優化

1、NetworkManager

在CentOS系統上,目前有NetworkManager和network兩種網絡管理工具。如果兩種都配置會引起沖突,而且NetworkManager在網絡斷開的時候,會清理路由,如果一些自定義的路由,沒有加入到NetworkManager的配置檔案中,路由就被清理掉,網絡連接配接後需要自定義添加上去。

network:對網卡的配置

NetworkManager:這個服務由幾個部分組成;一個是管理系統網絡連接配接;一個是允許使用者管理網絡連接配接的用戶端程式,使用它可以更好的管理網絡

#臨時關閉
[[email protected] ~]# systemctl  stop  NetworkManager

#永久關閉
[[email protected] ~]# systemctl  disable  NetworkManager
           

2、Jumbo frames

萬兆網卡MTU=9000,交換機也要設定,而且對端的MTU也要=9000,否則會出錯誤

最大傳輸單元,以太網(走arp協定,通過mac通信)内一般為1500,這樣發送大檔案就需要經過:切片-》發送–》重組。

請看https://www.cnblogs.com/linhaifeng/articles/13959997.html

MTU越小分片數越多,對網絡cpu壓力都會變大,如果升高MTU值,切片數目就會變小,傳輸效率會升高,但是為什麼MTU最大值為9000位元組?

從理論上計算,4 bytes的CRC最大支援12000 bytes大小的位元組,超過了就沒有辦法檢查了。另外還有其他一些協定如NFS等的限制。

最後需要注意的是,在經過交換網絡裝置時,僅僅修改主機端的MTU值是不行的,還需要交換網絡裝置上開啟jumbo frames功能。
           

3、網卡綁定

網卡綁定bond模式4(lacp),team模式lacp,teamd綁定模式:這個運作程式可用于兩種負載平衡,即主動和被動負載平衡。在主動模式中,通過使用最新流量統計不斷進行流量再平衡,

以便盡可能平均配置設定流量。在靜态模式中,流量會在可用連結之間随機配置設定。鑒于較低的處理開銷,這樣有速度優勢。

在高流量應用程式中通常首選此方式,因為流量通常由多個要在可用連結間随機配置設定的流組成,使用這種方式時,無需 teamd 介入即可完成負載分布。

所有網卡綁定都采用被動模式,既不配置"tx_balancer": {“name”: “basic”}。如果配置為主動模式,會有網路延遲産生,

4、禁用ping

禁止主機被ping。echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

十一、安全優化

Linux系統安全最小原則說明

最小化原則 對Linux系統安全來說極其重要,即多一事不如少一事 。具體包括如下幾個方面:

  • 安裝Linux系統最小化,即選包最小化,yum安裝軟體包也要最小化,無用的包不裝。
  • 開機自啟動服務最小化,即無用的服務不開啟。
  • 操作指令最小化。例如:能用“rm-f test.txt”就不用“rm-fr test.txt”。
  • 登入Linux使用者最小化。平時沒有特殊需求不登入root,用普通使用者登入即可。
  • 普通使用者授權權限最小化,即隻給使用者必需的管理系統的指令。
  • Linux系統檔案及目錄的權限設定最小化,禁止随意建立、更改、删除檔案。

1、單使用者

進入後輸入
chroot /sysroot

然後修改密碼
passwd root

# 注意:事先關閉selinux
           

2、grub加密

centos7.2 + 中引入了新的實用程式“ grub2-setpassword ”

1) 執行 grub2-setpassword 指令
# grub2-setpassword
Enter password:
Confirm password:
    
2)如果現在重新啟動系統并嘗試修改引導條目,系統将要求提供憑據,但是可以在沒有憑據的情況下修改引導條目。為了阻止未經授權的修改和未經授權的啟動,我們需要對 /boot/grub2/grub.cfg 檔案進行更改

打開檔案并使用密碼搜尋需要保護的啟動條目,它以menuentry開頭。找到條目後,從中删除 --unrestricted 參數

3) reboot 重新開機驗證,隻有當輸入正确的使用者名和密碼時,才能進入 grub 菜單或者修改引導條目。
           

3、CD光牒修複模式

#1、進入bios、從CD光牒啟動
#2、點選Troubleshooting
#3、進入到Troubleshooting界面
選擇:Rescue a CentOS Linux system

#4、三:進入到Rescue選項   按 ENTER鍵 選1 ,其他選項意思如下
1)continue:救援模式程式會自動查找系統中已有的檔案系統,并可讀寫挂載到/mnt/sysimage目錄下。
2)Read-Only:會以隻讀的方式挂載已有的檔案系統。
3)Skip to shell: 手動挂載
    
#5、sh切換bash模式
chroot /mnt/sysimage/

#6、執行指令
passwd root
           

4、ssh秘鑰登入

# 生成私鑰和公鑰
[[email protected] ~]# ssh-keygen 

# 檢視生成的私鑰和公鑰
[[email protected] ~]# ls /root/.ssh/
id_rsa  id_rsa.pub

# 把自己的公鑰上傳到對方,這樣就可以秘鑰登入對方了
[[email protected] ~]# ssh-copy-id -i [email protected]

# 對方檢視自己的公鑰
[[email protected] ~]# ls /root/.ssh
authorized_keys

# 确認公鑰的内容
[[email protected] ~]# cat /root/.ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFanQ4hTrzf67hTqZQvjNO4xtSS/rKJtZxOTVJ+PYqqLnHoE4Sjw4mAQPXHe/uhbSkrvKMxlMohMdUIFzuMrS5l0qorPylppyAdebo3W/Zwmcl1KrjuKldHXdnv6DONpyy8Wdp4+ArlCq3W67g8/4uUnpnUbfJ1d5fKxEMmOy99LKsWBKkTYCrklP94ANYUH1f8qTlLQ516NH5A/yo6mlELwaE5/4Uh4K+Tag0UmcEB6ktMJvM+2ADKDlC4QAQup80xcpCFm2SP9pa8flikcBA2Y3fFybyUS2LTA+JE3W/Jx6YtF5JX7D5BRE2zViFZhffzvjAApeylhVvOO9hA7Kf [email protected]

[[email protected] ~]# cat /root/.ssh/authorized_keys 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFanQ4hTrzf67hTqZQvjNO4xtSS/rKJtZxOTVJ+PYqqLnHoE4Sjw4mAQPXHe/uhbSkrvKMxlMohMdUIFzuMrS5l0qorPylppyAdebo3W/Zwmcl1KrjuKldHXdnv6DONpyy8Wdp4+ArlCq3W67g8/4uUnpnUbfJ1d5fKxEMmOy99LKsWBKkTYCrklP94ANYUH1f8qTlLQ516NH5A/yo6mlELwaE5/4Uh4K+Tag0UmcEB6ktMJvM+2ADKDlC4QAQup80xcpCFm2SP9pa8flikcBA2Y3fFybyUS2LTA+JE3W/Jx6YtF5JX7D5BRE2zViFZhffzvjAApeylhVvOO9hA7Kf [email protected]

# 免密登入連接配接成功
[[email protected] ~]# ssh [email protected]

# 非互動式遠端執行指令
[[email protected] ~]# ssh [email protected] hostname
web02
[[email protected] ~]# ssh [email protected] ifconfig eth0 | awk 'NR==2{print $2}'
10.0.0.8
[[email protected] ~]# ssh [email protected] ifconfig eth0 | awk 'NR==2{print $2}' | tee a.txt
10.0.0.8
[[email protected] ~]# cat a.txt
10.0.0.8
           
# 修改sshd配置不可以用密碼登入。改為no
[[email protected] ~]# vim /etc/ssh/sshd_config 
#PasswordAuthentication yes
#PermitEmptyPasswords no
PasswordAuthentication no

[[email protected] ~]# systemctl restart sshd
           

5、更改SSH服務端遠端登入設定

#禁止DNS進行反向解析
[[email protected] ~]# sed -i 's/#UseDNS yes/UseDNS no/g'  /etc/ssh/sshd_config

#禁止GSS認證,減少連接配接時産生的延遲
[[email protected] ~]# sed -i 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/g'  /etc/ssh/sshd_config

#修改預設端口:ssh預設端口22,你知我知黑客也知,是以需要修改
[[email protected] ~~]# sed -i 's/#Port.*/Port 6666/' /etc/ssh/sshd_config 

#其他修改:禁用root登入,以及空密碼登入
[[email protected] ~]#cp /etc/ssh/sshd_config /etc/ssh/sshd_config.ori 
<-- 更改配置前進行備份,是系統管理者的一個良好的習慣。
[[email protected] ~]#vi /etc/ssh/sshd_config  
<-- 編輯sshd_config
##########
Port 6666  # 已改
UseDNS no  # 已改
GSSAPIAuthentication no  # 已改

PermitRootLogin no
PermitEmptyPasswords no
##########

# 生效
[[email protected] ~]# systemctl    restart   sshd


#測試
ssh [email protected] -p 6666
           

除了前面介紹的安全知識以外,還有更進階的SSH安全政策,具體如下。

1)更改SSH監聽的IP,使其僅監聽内網IP。指令如下:

[[email protected] ~]# cat /etc/ssh/sshd_config  

############

Port 52113

PermitRootLogin no

PermitEmptyPasswords no

UseDNS no

GSSAPIAuthentication no

ListenAddress 10.0.0.7  <-- 企業僅指定監聽本機内網IP位址				

############
           

2)通過防火牆限制僅能使用内網IP連接配接此伺服器。限制指令如下:

iptables -I INPUT -p tcp --dport 52113 -s 10.0.0.0/24 -j ACCEPT
<-- 預設規則為DROP時的限制SSH指令
           

3)通過撥号到VPN伺服器,然後從區域網路通路這些伺服器,提升安全性

十二、開機優化

1、設定運作級别為3

systemctl set-default multi-user.target
           

2、精簡開機啟動項

企業環境新裝Linux系統之後有必要保留的開機自啟動服務有5個,具體如下。
sshd:遠端連接配接Linux伺服器時需要用到這個服務程式,是以必須要開啟,否則Linux伺服器就無法提供遠端連接配接服務了。
rsyslog:日志相關軟體,這是作業系統提供的一種機制,系統的守護程式通常會使用rsyslog程式将各種資訊寫到各個系統日志檔案中,在CentOS 6以前此服務的名字為syslog。
network:系統啟動時,若想激活/關閉各個網絡接口,則應(必須)考慮開啟此服務。
crond:該服務用于周期性地執行系統及使用者配置的任務計劃。有要周期性執行的任務時,就要開啟,此服務幾乎是生産場景必須要用的一個軟體。
sysstat:sysstat是一個軟體包,包含監測系統性能及效率的一組工具,這些工具對于我們收集系統性能資料很有幫助,比如CPU使用率、硬碟和網絡吞吐資料等,對這些資料的收集和分析,有利于判斷系統運作是否正常,是以它是提高系統運作效率、安全運作伺服器的得力助手。
sysstat軟體包內建的主要工具為:
iostat工具提供CPU使用率及硬碟吞吐效率的資料。
mpstat工具提供與單個或多個處理器相關的資料。
sar工具負責收集、報告并存儲系統活躍的資訊。
           

開機啟動項目優化

# 1、使用 systemctl list-unit-files 可以檢視啟動項 
# 2、systemctl list-unit-files | grep enable 過濾檢視啟動項如下
abrt-ccpp.service                   enabled abrt為auto bug report的縮寫 用于bug報告 關閉
abrt-oops.service                   enabled ---------------------- 
abrt-vmcore.service                 enabled ----------------------
abrt-xorg.service                   enabled ----------------------
abrtd.service                       enabled   ----------------------
auditd.service                      enabled 安全審計 保留
[email protected].service                     enabled 登陸相關 保留
crond.service                                  enabled 定時任務 保留
dbus-org.freedesktop.NetworkManager.service    enabled 桌面網卡管理 關閉
dbus-org.freedesktop.nm-dispatcher.service     enabled ----------------------
[email protected].service                                 enabled tty控制台相關 保留
irqbalance.service                             enabled 優化系統中斷配置設定 保留
kdump.service                                  enabled 核心崩潰資訊捕獲 自定
microcode.service                              enabled 處理器穩定性增強 保留
NetworkManager-dispatcher.service              enabled 網卡守護程序 關閉
NetworkManager.service                         enabled ----------------------
postfix.service                                enabled 郵件服務 關閉
rsyslog.service                                enabled 日志服務 保留
snmpd.service                                  enabled snmp監控 資料抓取 保留
sshd.service                                   enabled ssh登陸 保留
systemd-readahead-collect.service              enabled 核心調用--預讀取 保留
systemd-readahead-drop.service                 enabled ----------------------
systemd-readahead-replay.service               enabled ----------------------
tuned.service                                  enabled 
default.target                              enabled 預設啟動項 multi-user.target的軟連接配接 保留
multi-user.target                           enabled 啟動使用者指令環境 保留
remote-fs.target                            enabled 集合遠端檔案挂載點 自定
runlevel2.target                            enabled 運作級别 用于相容6的SysV 保留
runlevel3.target                            enabled ----------------------
runlevel4.target                            enabled ----------------------

 

# 3、關閉一下開機啟動服務
systemctl disable abrt-ccpp.service
systemctl disable abrt-oops.service
systemctl disable abrt-vmcore.service
systemctl disable abrt-xorg.service
systemctl disable abrtd.service
systemctl disable accounts-daemon.service
systemctl disable atd.service
systemctl disable auditd.service
systemctl disable [email protected].service
systemctl disable avahi-daemon.service
systemctl disable bluetooth.service
systemctl disable cups.service
systemctl disable dbus-org.bluez.service
systemctl disable dbus-org.fedoraproject.FirewallD1.service
systemctl disable dbus-org.freedesktop.Avahi.service
systemctl disable dbus-org.freedesktop.ModemManager1.service
systemctl disable dbus-org.freedesktop.NetworkManager.service
systemctl disable dbus-org.freedesktop.nm-dispatcher.service
systemctl disable display-manager.service
systemctl disable dmraid-activation.service
systemctl disable firewalld.service
systemctl disable gdm.service
systemctl disable irqbalance.service
systemctl disable iscsi.service
systemctl disable ksm.service
systemctl disable ksmtuned.service
systemctl disable libstoragemgmt.service
systemctl disable libvirtd.service
systemctl disable lvm2-monitor.service
systemctl disable mcelog.service
systemctl disable mdmonitor.service
systemctl disable microcode.service
systemctl disable ModemManager.service
systemctl disable multipathd.service
systemctl disable NetworkManager-dispatcher.service
systemctl disable NetworkManager.service
systemctl disable postfix.service
systemctl disable qemu-guest-agent.service
systemctl disable rngd.service
systemctl disable rtkit-daemon.service
systemctl disable smartd.service
systemctl disable spice-vdagentd.service
systemctl disable systemd-readahead-collect.service
systemctl disable systemd-readahead-drop.service
systemctl disable systemd-readahead-replay.service
systemctl disable tuned.service
systemctl disable vgauthd.service
systemctl disable vmtoolsd.service

 
# 4、systemctl 用法:

顯示服務狀态:systemctl status docker.service

列出服務層級和依賴關系:systemctl list-dependencies docker.service

啟動服務:systemctl start docker.service

關閉服務:systemctl stop docker.service

重新開機服務:systemctl restart docker.service

設定服務自啟動:systemctl enable docker.service

禁止服務自啟動:systemctl disable docker.service

檢視服務是否自啟動:systemctl is-enabled docker.service

列出系統所有服務的啟動情況:systemctl list-units --type=service

列出所有自啟動服務:systemctl list-unit-files|grep enabled

 

對應的舊指令(chkconfig、service)
顯示服務狀态:service docker status
列出服務層級和依賴關系:systemctl list-dependencies docker.service

啟動服務:service docker start
關閉服務:service docker stop
重新開機服務:service docker restart

設定服務自啟動:chkconfig --level 3 docker on
禁止服務自啟動:chkconfig --level 3 docker off

檢視服務是否自啟動:chkconfig --list docker
列出系統所有服務的啟動情況:chkconfig --list
           

注意

到底将哪些服務作為開機自啟動服務合适?
其實這個問題沒有唯一的正确答案,隻要不影響系統及服務的運作,多開點少開點都是可以的。但作為一名優秀的Linux系統管理者,我們應該遵守這樣一個原則——最小化原則。就是盡量不安裝不使用的軟體,盡量不開啟不需要開啟的服務。即隻要不用就不開啟,這樣系統的性能和安全性才是最好的。若随着業務的運作,因安裝了軟體而需要開機自啟動就設定為開機啟動即可。一句話,要清楚每個服務的角色,不用的絕對不安裝,預設安裝了的絕不開機自啟動。 
           

3、别名及環境變量優化

#設定
cat>/etc/profile.d/color.sh<<'EOF'
alias ll='ls -l --color=auto --time-style=long-iso'
PS1="\[\e[37;40m\][\[\e[32;1m\]\u\[\e[37;40m\]@\\h \[\e[36;40m\]\w\[\e[0m\]]\[\e[32;1m\]\\$ \[\e[0m\]"
export HISTTIMEFORMAT='%F-%T ' 
EOF

#生效
[[email protected] ~]# source  /etc/profile
           

4、登入和歡迎資訊

/etc/motd				登入成功後顯示的資訊
           

示例

[[email protected] ~]# cat /etc/motd 
+--------------------------------------------+
|                                            |
|    你目前登入的是支付業務背景資料庫服務    		|
|    請不要删庫                                | 
|                                            |
+--------------------------------------------+
           

了解

通常我們會清空/etc/issue、/etc/issue.net的内容,去除系統及核心版本登入前的螢幕顯示

/etc/issue 				登入畫面顯示的資訊(重新開機機器後,在本機看到的登入界面内容)
/etc/issue.net			它提供給telnet遠端登入程式使用的。預設情況下/etc/issue檔案和/etc/issue.Net内容一樣,如需要,可根據自己需要修改。

$ telnet 192.168.12.17 22  # 測試端口
Trying 192.168.12.17...
Connected to 192.168.12.17.
Escape character is '^]'. -----》表示已打開,其他情況表示端口未打開
SSH-2.0-OpenSSH_7.4
^]
telnet> quit

ps: telnet由于不安全已經很少使用了,都是以ssh代替。
           

十三、硬碟問題

一台伺服器的硬碟數過多,可能會有盤符飄逸問題,單塊盤做raid0可解決伺服器盤符飄逸問題

按照經驗來看,通過1T容量的硬碟要對應1G的記憶體,可以按照這個比例來購買主機

.xfs檔案系統用ssd做日志盤,無需格式化,裸盤就可以,

日志盤大小=(網絡帶寬與硬碟帶寬取小*髒資料最大同步時間)*2

繼續閱讀