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作業系統中擁有最高的管理權限。比喻:皇帝。
普通使用者:管理者或者具備管理權限的使用者建立的。權限:系統管理僅可以讀、看,不能增、删、改。
權限越大,責任越大。
可使用如下指令添加一個普通使用者賬号,并為其設定密碼:
[[email protected] ~]# useradd luffy
[[email protected] 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
嘗試切換使用者角色,指令如下:
[[email protected] oldboy ~]# su - luffy <==由root管理者,切換到普通使用者luffy
[[email protected] oldboy ~]whoami<==檢視目前使用者是什麼luffy[[email protected] ] su - root <==切回到root使用者
Password:
說明:
1)超級使用者root切換到普通使用者下面,無需輸入對應使用者密碼,這相當于“皇帝”去“大臣”家裡。
2)普通使用者切換到root或其他普通使用者下,需要輸入切換的對應使用者密碼。
3)普通使用者的權限比較小,隻能進行基本的系統資訊檢視等操作,無法更改系統配置和管理服務。
4)符号是普通使用者的指令行提示符,#符号是超級管理者的提示符。示例如下: [[email protected] oldboy ~] #普通使用者luffy對應的提示符
[[email protected] oldboy ~]# #超級管理者root對應的提示符
5)提示符@前面的字元代表目前使用者(可用whoami查詢),後面的為主機名(可用hostname查詢),~所在的位置是視窗目前使用者所在的路徑。示例如下:
[[email protected] oldboy ~]#luffy為目前使用者,Oldboy為主機名,~表示目前目錄,即家目錄。 6)Linux指令提示符由PS1環境變量控制。示例如下: [[email protected] oldboy ~]# echoPS1
[\[email protected]\h \W]$
這裡的PS1='[\[email protected]\h \W]′,可以通過全局變量配置/etc/profile檔案調整PS1=′[\[email protected]\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
關閉防火牆
[[email protected] ~]# /etc/init.d/iptables stop
[[email protected] ~]# /etc/init.d/iptables stop #<==重複執行下确認已關閉。
檢視是否關閉
[[email protected] ~]# /etc/init.d/iptables status
iptables: Firewall is not running.
關閉開機自啟動指令,前面已經關閉這裡就無需執行。
[[email protected] ~]# chkconfig iptables off
[[email protected] ~]# chkconfig --list|grep ipt
iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
CentOS7.x
關閉防火牆
[[email protected] ~]# systemctl stop firewalld
關閉開機自啟動
[[email protected] ~]# systemctl disable firewalld
檢視防火牆狀态
[[email protected] ~]# systemctl is-active firewalld #是否正在運作
[[email protected] ~]# systemctl is-enabled firewalld #是否開機自啟動
關閉NetworkManager
[[email protected] ~]# systemctl stop NetworkManager
[[email protected] ~]# 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爆出很多軟體漏洞,在企業場景需要進行修複漏洞操作,步驟如下:
首先檢視相關軟體的版本号。
[[email protected] ~]# 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
執行更新已知漏洞的軟體版本到最新,指令如下:
[[email protected] ~]# yum install openssl openssh bash -y
[[email protected] ~]# 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
[\[email protected]\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腳本
[[email protected] ~]# 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修過過程
[[email protected] oldboy ~]# echo LANG ###檢視系統目前的字元集 en_US.UTF-8 [[email protected] oldboy ~]# cat /etc/sysconfig/i18n #####系統字元集配置檔案的位置 SYSFONT="latarcyrheb-sun16" [[email protected] ~]# cp /etc/sysconfig/i18n /etc/sysconfig/i18n.ori ####備份 [[email protected] ~]# echo '' >/etc/sysconfig/i18n ####修改配置檔案 #→相當于用vi /etc/sysconfig/i18n 添加内容 [[email protected] ~]# source /etc/sysconfig/i18n #→使上文修改生效 ###讓配置檔案生效 [[email protected] ~]# 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伺服器能夠停止。