【系統優化】新裝Linux系統注意事項增加系統安全

1、系統安裝最小化

1)根據經驗,選擇安裝包時應該按最小化原則,即不需要的或者不確定是否需要的就不安裝,這樣可以最大程度上確保系統安全。

2)如果安裝過程落了部分包組或者其他夥伴安裝時沒選,再安裝後可以按如下方式補上安裝時未安裝的包組:

yum groupinstall "Compatibility libraries" "Base" "Development tools"

yum groupinstall "debugging Tools" "Dial-up Networking Support"

可以通過yum groupinfo 包組查看具體安裝的組件。

注意:不要使用yum的刪除功能刪除軟件,會刪除相關依賴,導致意外問題。

3) 安裝系統補裝工具命令

安裝系統後還會有一些基本的工具沒裝,這時可以根據需求yum來安裝下,啥時用啥時裝也可。例如:

yum install tree nmap sysstat lrzsz dos2unix -y

如果需要更新補丁則執行

yum update

2、系統權限最小化

linux/unix是一個多用戶、多任務的操作系統。

超級管理員(root): root默認在unix/linux操作系統中擁有最高的管理權限。比喻:皇帝。

普通用戶:管理員或者具備管理權限的用戶創建的。權限:系統管理僅可以讀、看,不能增、刪、改。

權限越大,責任越大。

可使用如下命令添加一個普通用戶賬號,併爲其設置口令:

[root@oldboy ~]# useradd luffy

[root@ oldboy ~]# passwd luffy ###問你新的密碼,然後你輸入 交互設置密碼

Changing password for user luffy.

New password:

BAD PASSWORD: it is too simplistic/systematic #ç提示密碼太簡單了,但可以不理會。

BAD PASSWORD: is too simple

Retype new password:

passwd: all authentication tokens updated successfully.

提示:

非交互式設置密碼:還可通過下面的命令一步到位地設置密碼(其中,luffy爲用戶名,密碼爲123456)。

echo "123456"|passwd --stdin luffy && history -c

嘗試切換用戶角色,命令如下:

[root@ oldboy ~]# su - luffy <==由root管理員,切換到普通用戶luffy

[luffy@ oldboy ~]whoami<==查看當前用戶是什麼luffy[luffy@oldboy ] su - root <==切回到root用戶

Password:

說明:

1)超級用戶root切換到普通用戶下面,無需輸入對應用戶密碼,這相當於“皇帝”去“大臣”家裏。

2)普通用戶切換到root或其他普通用戶下,需要輸入切換的對應用戶密碼。

3)普通用戶的權限比較小,只能進行基本的系統信息查看等操作,無法更改系統配置和管理服務。

4)符號是普通用戶的命令行提示符,#符號是超級管理員的提示符。示例如下: [luffy@ oldboy ~] #普通用戶luffy對應的提示符

[root@ oldboy ~]# #超級管理員root對應的提示符

5)提示符@前面的字符代表當前用戶(可用whoami查詢),後面的爲主機名(可用hostname查詢),~所在的位置是窗口當前用戶所在的路徑。示例如下:

[luffy@ oldboy ~]#luffy爲當前用戶,Oldboy爲主機名,~表示當前目錄,即家目錄。 6)Linux命令提示符由PS1環境變量控制。示例如下: [root@ oldboy ~]# echoPS1

[\u@\h \W]$

這裏的PS1='[\u@\h \W]′,可以通過全局變量配置/etc/profile文件調整PS1=′[\u@\h\W\t] '。

注意:PS1必須大寫的。

參數 含義

\d 代表日期,格式爲weekday month date。

\H 完整的主機名稱。

\h 僅取主機的第一個名字。

\t 顯示時間爲24小時格式,如HHMMSS。

\T 顯示時間爲12小時格式。

\A 顯示時間爲24小時格式HHMM。

\u 當前用戶的賬號名稱。

\v BASH的版本信息。

\w 完整的工作目錄名稱。家目錄會以~顯示

\W 利用basename取得工作目錄名稱,所以只會列出最後一個目錄

\# 下達的第幾個命令

$ 提示字符,如果是root時,提示符爲# ,普通用戶則爲變量(放東西查看變量的內容)PS1−−−變量的名字−−−−−−藏經閣裏面的武功祕籍(葵花寶典)祕籍名字(書名)PS1---查看變量裏面的內容---手端着書(葵花寶典) 看書的內容(讀書) PS1=新的內容 ---向變量裏面放入東西----修改書的內容(升級書) 欲練此功,必先自宮,若不自宮,也能成功。 linux變量名字(書名)大寫的一般是自己用(linux環境變量),在哪裏都可以用的變量

3、關閉SELinux       

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

關閉方式如下

永久關閉selinux

# 備份

cp /etc/selinux/config /etc/selinux/config.bak

# sed修改,看看結果,不加-i

sed 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

# 確認並使用 sed -i 修改文件內容

sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

# 檢查結果

grep "disabled" /etc/selinux/config

臨時關閉selinux

setenforce 0

# 數字0表示Permissive,即給出警告提示,但不會阻止操作,相當於disabled。

# 數字1表示Enforcing,即表示SElinux爲開啓狀態。

getenforce # 查看命令

命令說明:

setenforce:用於命令行管理SELinux的級別,後面的數字表示設置對應的級別。

getenforce:查看SELinux當前的級別狀態。

提示:修改配置SElinux後,要想使其生效,必須要重啓系統。因此,可配合使用setenforce 0這個臨時使其關閉的命令,這樣在重啓前後都可以使得SElinux關閉生效了,也就是說無須立刻重啓服務器了,在生產場景下Linux機器是不能隨意重啓的(不要給自己找任何理由重啓)。

4、關閉iptables(C6)或Firewalld(C7)防火牆

關閉防火牆的目的是爲了讓初學者學習更方便,將來在學了iptables技術後可再統一開啓。 在企業環境中,一般只有配置外網IP的linux服務器才需要開啓防火牆,但即使是有外網IP,對於高併發高流量的業務服務器仍是不能開的,因爲會有較大性能損失,導致網站訪問很慢,這種情況下只能在前端加更好的硬件防火牆了。 關閉防火牆的具體操作過程如下:

CentOS 6.x

關閉防火牆

[root@oldboyedu ~]# /etc/init.d/iptables stop 

[root@oldboyedu ~]# /etc/init.d/iptables stop #<==重複執行下確認已關閉。

查看是否關閉

[root@oldboyedu ~]# /etc/init.d/iptables status 

iptables: Firewall is not running.

關閉開機自啓動命令,前面已經關閉這裏就無需執行。

[root@oldboyedu ~]# chkconfig iptables off 

[root@oldboyedu ~]# chkconfig --list|grep ipt

iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off

CentOS7.x

關閉防火牆

[root@oldboyedu ~]# systemctl stop firewalld

關閉開機自啓動

[root@oldboyedu ~]# systemctl disable firewalld

查看防火牆狀態

[root@oldboyedu ~]# systemctl is-active firewalld #是否正在運行

[root@oldboyedu ~]# systemctl is-enabled firewalld #是否開機自啓動

關閉NetworkManager

[root@oldboyedu ~]# systemctl stop NetworkManager

[root@oldboyedu ~]# systemctl disable NetworkManager

5、更改SSH遠程默認的22端口

sed -i 's#\#Port 22#Port 7777#g' /etc/ssh/sshd_config

service sshd restart

6、使用國內鏡像做yum源

默認國外的yum源(軟件倉庫)比較慢,所以換成國內的。

備份

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

下載新的CentOS-Base.repo 到/etc/yum.repos.d/

CentOS 5

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo

或者

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo

CentOS 6

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

或者

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

CentOS 7

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

或者

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

之後運行yum makecache生成緩存,此步驟可以不執行。

7、epel源的安裝

備份(如有配置其他epel源)

mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup

mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup

下載新repo 到/etc/yum.repos.d/

epel(RHEL 7)

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

epel(RHEL 6)

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

epel(RHEL 5)

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-5.repo

更換查看幫助的網站mirrors.aliyun.com

8、關於網絡下載命令

curl

在Linux中curl是一個利用URL規則在命令行下工作的文件傳輸工具,可以說是一款很強大的http命令行工具。它支持文件的上傳和下載,是綜合傳輸工具,但按傳統,習慣稱url爲下載工具。

常用參數

-o --output,把輸出寫到該文件中

-O --remote-name,把輸出寫到該文件中,保留遠程文件的文件名

-I --head,只顯示傳輸文檔,經常用於測試連接本身

-s --silent,靜默模式,不輸出任何東西

-T --upload-file,上傳文件

-V --version,顯示版本信息

-f --fail,只輸出錯誤信息

-# --progress-bar,用進度條顯示當前的傳送狀態

-H --header,自定義標題傳遞到服務器

-v --verbose,詳細顯示請求報文結構和響應報文結構信息

wget 主要用於下載文件

wget支持HTTP,HTTPS和FTP協議,可以使用HTTP代理。所謂的自動下載是指,wget可以在用戶退出系統的之後在後臺執行。這意味這你可以登錄系統,啓動一個wget下載任務,然後退出系統,wget將在後臺執行直到任務完成

wget 可以跟蹤HTML頁面上的鏈接依次下載來創建遠程服務器的本地版本,完全重建原始站點的目錄結構。這又常被稱作”遞歸下載”。

常用參數

-V --version,顯示 Wget 的版本信息並退出。

-h --help,打印此幫助。

-b --background,啓動後轉入後臺。

-O --output-document=FILE,將文檔寫入 FILE。

-q --quiet,安靜模式(無信息輸出)。

-v --verbose,詳盡的輸出(此爲默認值)。

9、安裝常用軟件

爲了使用方便,可以安裝一些常用的軟件。

yum -y install tree nmap sysstat lrzsz dos2unix telnet bash-completion bash-completion-extras vim nc lsof net-tools rsync

10、升級具有典型漏洞的軟件版本

諸如openssl、openssh、bash爆出很多軟件漏洞,在企業場景需要進行修復漏洞操作,步驟如下:

首先查看相關軟件的版本號。

[root@Oldboy ~]# rpm -qa openssl openssh bash

openssl-1.0.1e-30.el6.x86_64

bash-4.1.2-29.el6.x86_64

openssh-5.3p1-104.el6.x86_64

執行升級已知漏洞的軟件版本到最新,命令如下:

[root@Oldboy ~]# yum install openssl openssh bash -y

[root@Oldboy ~]# rpm -qa openssl openssh bash

openssh-5.3p1-104.el6_6.1.x86_64

bash-4.1.2-29.el6.x86_64

openssl-1.0.1e-30.el6_6.5.x86_64

11、時間同步

echo '#Timing synchronization time' >/var/spool/cron/root

echo '*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' >/var/spool/cron/root

crontab -l

12、加大文件描述

echo '* - nofile 65535 ' >>/etc/security/limits.conf 

tail -1 /etc/security/limits.conf

13、別名和環境變量優化

cat>>/etc/profile.d/color.sh<<EOF

alias ll='ls -l --color=auto --time-style=long-iso'

PS1='

\e[32;1m

[\u@\h \W]$

\e[0m

'

export HISTTIMEFORMAT='%F-%T '

EOF

14、內核優化

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

EOF

sysctl -p

15、修改主機名和IP腳本

[root@oldboy ~]# cat /server/scripts/hostname_ip.sh 

#!/usr/bin/sh

if [ # -ne 2 ];then   echo "/bin/sh0 hostname PartIP"

exit 1

fi

hostnamectl set-hostname $1

sed -i "s#100#$2#g" /etc/sysconfig/network-scripts/ifcfg-eth[01]

systemctl restart network

16、更改Linux特殊變量

臨時生效:

export TMOUT=10        賬號超時時間控制檯變量(類似於Windows的鎖屏)

export HISTSIZE=5          命令行歷史記錄數量(歷史記錄越少越好)

export HISTFILESIZE=5   命令行命令對應文件的記錄數~/.bash_history

永久生效:

echo 'export TMOUT=300' >>/etc/profile

echo 'export HISTSIZE=5' >>/etc/profile

echo 'export HISTFILESIZE=5' >>/etc/profile

source /etc/profile

17、隱藏Linux版本信息

cat /etc/issue

>/etc/issue

>/etc/issue.net

這時候就沒有任何版本信息了

18、如何防止顯示中文亂碼(該優化初期建議不優化,直接強制看英文)

此項優化爲可選項,即調整Linux系統的字符集設置,那麼,什麼是字符集呢?

簡單的說,字符集就是一套文字符號及其編碼。目前Linux下常用的字符集有:

GBK:定長,雙字節,不是國際標準,支持的系統不少,實際企業用的不多。

UTF-8:非定長,1~4字節,廣泛支持,MYSQL也使用UTF-8,企業廣泛使用。 可通過快捷的命令方式在/etc/sysconfig/i18n中添加如下內容,使其支持中文顯示:

CentOS 6.x修過過程

[root@ oldboy ~]# echo LANG                ###查看系統當前的字符集 en_US.UTF-8 [root@ oldboy ~]# cat /etc/sysconfig/i18n   #####系統字符集配置文件的位置 LANG="en_US.UTF-8" SYSFONT="latarcyrheb-sun16" [root@Oldboy ~]# cp /etc/sysconfig/i18n /etc/sysconfig/i18n.ori  ####備份 [root@Oldboy ~]# echo 'LANG="zh_CN.UTF-8"'  >/etc/sysconfig/i18n ####修改配置文件 #→相當於用vi /etc/sysconfig/i18n 添加LANG="zh_CN.UTF-8"內容 [root@Oldboy ~]# source /etc/sysconfig/i18n #→使上文修改生效    ###讓配置文件生效 [root@Oldboy ~]# echoLANG ###查看系統當前的字符集

zh_CN.UTF-8

CentOS 7.x修過過程

修改/etc/locale.conf這個文件

提示:

亂碼的核心解決方法:

系統字符集(utf-8)

xshell軟件的字符集保持一致(utf-8)

文件使用的字符集一致

zh_CN.GBK

注意“zh_CN.UTF-8”的大小寫字母。

這個中文顯示配置要跟你自己的SSH客戶端的配置一致。

Linux基礎優化與安全重點小結

不用root登錄管理系統,而以普通用戶登錄通過sudo授權管理。

更改默認的遠程連接SSH服務端口,禁止root用戶遠程連接,甚至要更改SSH服務只監聽內網IP。

定時自動更新服務器的時間,使其和互聯網時間同步。

配置yum更新源,從國內更新源下載安裝軟件包。

關閉SELinux及iptables(在工作場景中,如果有外部IP一般要打開iptables,高併發高流量的服務器可能無法開啓)。

調整文件描述符的數量,進程及文件的打開都會消耗文件描述符數量。

定時自動清理郵件臨時目錄垃圾文件,防止磁盤的inodes數被小文件佔滿(注意Centos6和Centos5要清除的目錄不同)。

精簡併保留必要的開機自啓動服務(如crond、sshd、network、rsyslog、sysstat)。

Linux內核參數優化/etc/sysctl.conf,執行sysctl -p生效。

更改系統字符集爲“zh_CN.UTF-8”,使其支持中文,防止出現亂碼問題。

鎖定關鍵系統文件如/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow、/etc/inittab,處理以上內容後把chattr、lsattr改名爲luffy,轉移走,這樣就安全多了。

清空/etc/issue、/etc/issue.net,去除系統及內核版本登錄前的屏幕顯示。

清除多餘的系統虛擬用戶賬號。

爲grub引導菜單加密碼。

禁止主機被ping。

打補丁並升級有已知漏洞的軟件。 新系統 yum –y install 已經在線上用的服務器 web服務器能夠停止。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章