Linux的哲學(xué)

一、常用的指令

1.壓縮命令

tar -czvf 壓縮包名稱.tar.gz 要打包的目錄

2.解壓縮命令

tar -xzvf 壓縮包名稱.tar.gz

3.find命令

如果要想獲取到該目錄中所有以 host 開頭的文件列表,可以執(zhí)行如下命令:

find /etc -name "host*" -print

如果要在整個(gè)系統(tǒng)中搜索權(quán)限中包括 SUID 權(quán)限的所有文件(詳見第 5 章),只需使用-4000 即可:

find / -perm -4000 -print

4.export命令

將一個(gè)變量指定為全局變量

WORKDIR=/home/workdir
export WORKDIR

5.curl ifconfig.me

查詢本機(jī)的公網(wǎng)ip

5.更改文件的所有者

chown -Rf ftp /var/ftp/pub

5.指定文件只能自己查看

chmod 600 auth.smb

二谒所、重定向

1.輸入重定向與管道符

符號(hào) 作用
命令 < 文件 將文件作為命令的標(biāo)準(zhǔn)輸入
命令 << 分界符 從標(biāo)準(zhǔn)輸入中讀入,直到遇見分界符才停止
命令 < 文件 1 > 文件 2 文件 2 將文件 1 作為命令的標(biāo)準(zhǔn)輸入并將標(biāo)準(zhǔn)輸出到文件 2

2.輸出重定向

符號(hào) 作用
命令 > 文件 將標(biāo)準(zhǔn)輸出重定向到一個(gè)文件中(清空原有文件的數(shù)據(jù))
命令 2> 文件 將錯(cuò)誤輸出重定向到一個(gè)文件中(清空原有文件的數(shù)據(jù))
命令 >> 文件 將標(biāo)準(zhǔn)輸出重定向到一個(gè)文件中(追加到原有內(nèi)容的后面)
命令 2>> 文件 將錯(cuò)誤輸出重定向到一個(gè)文件中(追加到原有內(nèi)容的后面)
命令 >> 文件 2>&1或命令 &>> 文件 將標(biāo)準(zhǔn)輸出與錯(cuò)誤輸出共同寫入到文件中(追加到原有內(nèi)容的后面)

3.管道符

將上一個(gè)命令的輸出傳遞給下一個(gè)命令的輸入讯沈,如在重置root的密碼時(shí)

echo "linuxprobe" | passwd --stdin root

4.通配符

星號(hào)(*)代表匹配零個(gè)或多個(gè)字符,問號(hào)(?)代表匹配單個(gè)字符婿奔,中括號(hào)內(nèi)加上數(shù)字[0-9]代表匹配 0~9 之間的單個(gè)數(shù)字的字符缺狠,而中括號(hào)內(nèi)加上字母[abc]則是代表匹配 a、 b萍摊、 c 三個(gè)字符中的任意一個(gè)字符挤茄。

匹配所有在/dev 目錄中且以 sda 開頭的文件:

[root@linuxprobe ~]# ls -l /dev/sda*
brw-rw----. 1 root disk 8, 0 May 4 15:55 /dev/sda
brw-rw----. 1 root disk 8, 1 May 4 15:55 /dev/sda1
brw-rw----. 1 root disk 8, 2 May 4 15:55 /dev/sda2

如果只想查看文件名為 sda 開頭,但是后面還緊跟其他某一個(gè)字符的文件的相關(guān)信息冰木,該怎么操作呢穷劈?這時(shí)就需要用到問號(hào)來進(jìn)行通配了。

[root@linuxprobe ~]# ls -l /dev/sda?
brw-rw----. 1 root disk 8, 1 May 4 15:55 /dev/sda1
brw-rw----. 1 root disk 8, 2 May 4 15:55 /dev/sda2

除了使用[0-9]來匹配 0~9 之間的單個(gè)數(shù)字踊沸,也可以用[135]這樣的方式僅匹配這三個(gè)指定數(shù)字中的一個(gè)囚衔,若沒有匹配到,則不會(huì)顯示出來:

[root@linuxprobe ~]# ls -l /dev/sda[0-9]
brw-rw----. 1 root disk 8, 1 May 4 15:55 /dev/sda1
brw-rw----. 1 root disk 8, 2 May 4 15:55 /dev/sda2
[root@linuxprobe ~]# ls -l /dev/sda[135]
brw-rw----. 1 root disk 8, 1 May 4 15:55 /dev/sda1

5.常用的轉(zhuǎn)義字符

4 個(gè)最常用的轉(zhuǎn)義字符如下所示雕沿。
? 反斜杠(\):使反斜杠后面的一個(gè)變量變?yōu)閱渭兊淖址?br> ? 單引號(hào)(''):轉(zhuǎn)義其中所有的變量為單純的字符串。
? 雙引號(hào)(""):保留其中的變量屬性猴仑,不進(jìn)行轉(zhuǎn)義處理审轮。
? 反引號(hào)(``):把其中的命令執(zhí)行后返回結(jié)果

6.重要的環(huán)境變量

用戶執(zhí)行了一條命令之后肥哎, Linux 系統(tǒng)中到底發(fā)生了什么事情呢?簡單來說疾渣,命令在 Linux 中的執(zhí)行分為 4 個(gè)步驟篡诽。

第1步:判斷用戶是否以絕對(duì)路徑或相對(duì)路徑的方式輸入命令(如/bin/ls),如果是的話則直接執(zhí)行榴捡。

第2步: Linux 系統(tǒng)檢查用戶輸入的命令是否為“別名命令”杈女,即用一個(gè)自定義的命令名稱來替換原本的命令名稱〉趸可以用 alias 命令來創(chuàng)建一個(gè)屬于自己的命令別名达椰,格式為“alias 別名=命令”。若要取消一個(gè)命令別名项乒,則是用 unalias 命令啰劲,格式為“unalias 別名”。

我們之前在使用 rm 命令刪除文件時(shí)檀何,Linux 系統(tǒng)都會(huì)要求我們?cè)俅_認(rèn)是否執(zhí)行刪除操作蝇裤,其實(shí)這就是 Linux系統(tǒng)為了防止用戶誤刪除文件而特意設(shè)置的 rm 別名命令,接下來我們把它取消掉:

[root@linuxprobe ~]# ls
anaconda-ks.cfg Documents initial-setup-ks.cfg Pictures Templates
Desktop Downloads Music Public Videos
[root@linuxprobe ~]# rm anaconda-ks.cfg
rm: remove regular file ‘a(chǎn)naconda-ks.cfg’? y
[root@linuxprobe~]# alias rm
alias rm='rm -i'
[root@linuxprobe ~]# unalias rm
[root@linuxprobe ~]# rm initial-setup-ks.cfg
[root@linuxprobe ~]#

第3步: Bash 解釋器判斷用戶輸入的是內(nèi)部命令還是外部命令频鉴。內(nèi)部命令是解釋器內(nèi)部的指令栓辜,會(huì)被直接執(zhí)行;而用戶在絕大部分時(shí)間輸入的是外部命令垛孔,這些命令交由步驟 4 繼續(xù)處理藕甩。可以使用“type 命令名稱”來判斷用戶輸入的命令是內(nèi)部命令還是外部命令似炎。

第4步:系統(tǒng)在多個(gè)路徑中查找用戶輸入的命令文件辛萍,而定義這些路徑的變量叫作 PATH, 可以簡單地把它理解成是“解釋器的小助手”羡藐,作用是告訴 Bash 解釋器待執(zhí)行的命令可能存放的位置贩毕,然后 Bash 解釋器就會(huì)乖乖地在這些位置中逐個(gè)查找。 PATH 是由多個(gè)路徑值組成的變量仆嗦,每個(gè)路徑值之間用冒號(hào)間隔辉阶,對(duì)這些路徑的增加和刪除操作將影響到 Bash 解釋器對(duì)Linux 命令的查找。

[root@linuxprobe ~]# echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
[root@linuxprobe ~]# PATH=$PATH:/root/bin
[root@linuxprobe ~]# echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin

三瘩扼、軟件的配置

1谆甜、配置yum倉庫

第1步:進(jìn)入到/etc/yum.repos.d/目錄中(因?yàn)樵撃夸洿娣胖?Yum 軟件倉庫的配置文件)。

第2步: 使用 Vim 編輯器創(chuàng)建一個(gè)名為 rhel7.repo 的新配置文件(文件名稱可隨意集绰,但后綴必須為.repo)规辱,逐項(xiàng)寫入下面加粗的配置參數(shù)并保存退出(不要寫后面的中文注釋)。
? 【rhel-media】: Yum 軟件倉庫唯一標(biāo)識(shí)符栽燕,避免與其他倉庫沖突罕袋。
? 【name=linuxprobe】: Yum 軟件倉庫的名稱描述改淑,易于識(shí)別倉庫用處。
? 【baseurl=file://media/cdrom】: 提供的方式包括 FTP(ftp://..)浴讯、 HTTP(http://..)朵夏、本地(file:///..)。
? 【enabled=1】: 設(shè)置此源是否可用榆纽; 1 為可用仰猖, 0 為禁用。
? 【gpgcheck=1】: 設(shè)置此源是否校驗(yàn)文件奈籽; 1 為校驗(yàn)饥侵, 0 為不校驗(yàn)。
? 【gpgkey=file://media/cdrom/RPM-GPG-KEY-redhat-release】: 若上面參數(shù)開啟校驗(yàn)唠摹,那么請(qǐng)指定公鑰文件地址爆捞。

第3步:按配置參數(shù)的路徑掛載光盤,并把光盤掛載信息寫入到/etc/fstab 文件中勾拉。

第4步:使用“yum install httpd -y”命令檢查 Yum 軟件倉庫是否已經(jīng)可用煮甥。進(jìn)入/etc/yum.repos.d 目錄中后創(chuàng)建 Yum 配置文件:

[root@linuxprobe ~]# cd /etc/yum.repos.d/
[root@linuxprobe yum.repos.d]# vim rhel7.repo
[rhel7]
name=rhel7
baseurl=file:///media/cdrom
enabled=1
gpgcheck=0

創(chuàng)建掛載點(diǎn)后進(jìn)行掛載操作,并設(shè)置成開機(jī)自動(dòng)掛載(詳見第 6 章)藕赞。 嘗試使用 Yum 軟件倉庫來安裝 Web 服務(wù)成肘,出現(xiàn) Complete! 則代表配置正確:

[root@linuxprobe yum.repos.d]# mkdir -p /media/cdrom
[root@linuxprobe yum.repos.d]# mount /dev/cdrom /media/cdrom
mount: /dev/sr0 is write-protected, mounting read-only
[root@linuxprobe yum.repos.d]# vim /etc/fstab
/dev/cdrom /media/cdrom iso9660 defaults 0 0
[root@linuxprobe ~]# yum install httpd
Loaded plugins: langpacks, product-id, subscription-manager
………………省略部分輸出信息………………
Dependencies Resolved
===============================================================================
Package Arch Version Repository Size
===============================================================================
Installing:
httpd x86_64 2.4.6-17.el7 rhel 1.2 M
Installing for dependencies:
apr x86_64 1.4.8-3.el7 rhel 103 k
apr-util x86_64 1.5.2-6.el7 rhel 92 k
httpd-tools x86_64 2.4.6-17.el7 rhel 77 k
mailcap noarch 2.1.41-2.el7 rhel 31 k
Transaction Summary
===============================================================================
Install 1 Package (+4 Dependent packages)
Total download size: 1.5 M
Installed size: 4.3 M
Is this ok [y/d/N]: y
Downloading packages:
………………省略部分輸出信息………………
Complete!

四斧蜕、Shell腳本

可以將 Shell 終端解釋器當(dāng)作人與計(jì)算機(jī)硬件之間的“翻譯官”双霍,它作為用戶與 Linux 系統(tǒng)內(nèi)部的通信媒介,除了能夠支持各種變量與參數(shù)外批销,還提供了諸如循環(huán)洒闸、分支等高級(jí)編程語言才有的控制結(jié)構(gòu)特性。

#!/bin/bash
#For Example BY linuxprobe.com
pwd
ls -al

在上面的這個(gè) example.sh 腳本中實(shí)際上出現(xiàn)了三種不同的元素:

  • 第一行的腳本聲明(#!)用來告訴系統(tǒng)使用哪種 Shell 解釋器來執(zhí)行該腳本均芽;
  • 第二行的注釋信息(#)是對(duì)腳本功能和某些命令的介紹信息丘逸,使得自己或他人在日后看到這個(gè)腳本內(nèi)容時(shí),可以快速知道該腳本的作用或一些警告信息掀宋;
  • 第三深纲、四行的可執(zhí)行語句也就是我們平時(shí)執(zhí)行的 Linux 命令了。

1. 接收用戶的參數(shù)

腳本:
#!/bin/bash
echo "當(dāng)前腳本名稱為$0"
echo "總共有$#個(gè)參數(shù)劲妙,分別是$*湃鹊。 "
echo "第 1 個(gè)參數(shù)為$1,第 5 個(gè)為$5镣奋。 "

運(yùn)行:
[root@linuxprobe ~]# sh example.sh one two three four five six
當(dāng)前腳本名稱為 example.sh
總共有 6 個(gè)參數(shù)币呵,分別是 one two three four five six。
第 1 個(gè)參數(shù)為 one侨颈,第 5 個(gè)為 five余赢。

2. 判斷用戶的參數(shù)

按照測(cè)試對(duì)象來劃分掸驱,條件測(cè)試語句可以分為 4 種:
? 文件測(cè)試語句;
? 邏輯測(cè)試語句没佑;
? 整數(shù)值比較語句;
? 字符串比較語句温赔。

文件測(cè)試所用的參數(shù):

運(yùn)算符 作用
-d 測(cè)試文件是否為目錄類型
-e 測(cè)試文件是否存在
-f 判斷是否為一般文件
-r 測(cè)試當(dāng)前用戶是否有權(quán)限讀取
-w 測(cè)試當(dāng)前用戶是否有權(quán)限寫入
-x 測(cè)試當(dāng)前用戶是否有權(quán)限執(zhí)行

可用的整數(shù)比較運(yùn)算符

運(yùn)算符 作用
-eq 是否等于
-ne 是否不等于
-gt 是否大于
-lt 是否小于
-le 是否等于或小于
-ge 是否大于或等于

流程控制語句

1. if 條件測(cè)試語句

雙分支的測(cè)試語句:

#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
if [ $? -eq 0 ]
then
echo "Host $1 is On-line."
else
echo "Host $1 is Off-line."
fi

多分支的測(cè)試語句:

#!/bin/bash
read -p "Enter your score(0-100): " GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; then
echo "$GRADE is Excellent"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ; then
echo "$GRADE is Pass"
else
echo "$GRADE is Fail"
fi
[root@linuxprobe ~]# bash chkscore.sh
Enter your score(0-100): 88
88 is Excellent
[root@linuxprobe ~]# bash chkscore.sh
Enter your score(0-100): 80
80 is Pass
[root@linuxprobe ~]# bash chkscore.sh
Enter your score(0-100): 30
30 is Fail
[root@linuxprobe ~]# bash chkscore.sh
Enter your score(0-100): 200
200 is Fail

2. for 條件循環(huán)語句

#!/bin/bash
read -p "Enter The Users Password : " PASSWD
for UNAME in `cat users.txt`
do
id $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "Already exists"
else
useradd $UNAME &> /dev/null
echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "$UNAME , Create success"
else
echo "$UNAME , Create failure"
fi
fi
done

運(yùn)行上面的腳本:

[root@linuxprobe ~]# bash Example.sh
Enter The Users Password : linuxprobe
andy , Create success
barry , Create success
carl , Create success
duke , Create success
eric , Create success
george , Create success

3. while 條件循環(huán)語句

#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
TIMES=0
echo "商品實(shí)際價(jià)格為 0-999 之間蛤奢,猜猜看是多少? "
while true
do
read -p "請(qǐng)輸入您猜測(cè)的價(jià)格數(shù)目: " INT
let TIMES++
if [ $INT -eq $PRICE ] ; then
echo "恭喜您答對(duì)了陶贼,實(shí)際價(jià)格是 $PRICE"
echo "您總共猜測(cè)了 $TIMES 次"
exit 0
elif [ $INT -gt $PRICE ] ; then
echo "太高了啤贩! "
else
echo "太低了! "
fi
done

4.case 條件測(cè)試語句

#!/bin/bash
read -p "請(qǐng)輸入一個(gè)字符拜秧,并按 Enter 鍵確認(rèn): " KEY
case "$KEY" in
[a-z]|[A-Z])
echo "您輸入的是 字母痹屹。 "
;;
[0-9])
echo "您輸入的是 數(shù)字。 "
;;
*)
echo "您輸入的是 空格枉氮、功能鍵或其他控制字符志衍。 "
esac

運(yùn)行以上腳本:

[root@linuxprobe ~]# bash Checkkeys.sh
請(qǐng)輸入一個(gè)字符,并按 Enter 鍵確認(rèn): 6
您輸入的是 數(shù)字聊替。
[root@linuxprobe ~]# bash Checkkeys.sh
請(qǐng)輸入一個(gè)字符楼肪,并按 Enter 鍵確認(rèn): p
您輸入的是 字母。
[root@linuxprobe ~]# bash Checkkeys.sh
請(qǐng)輸入一個(gè)字符惹悄,并按 Enter 鍵確認(rèn): ^[[15~
您輸入的是 空格春叫、功能鍵或其他控制字符。

計(jì)劃任務(wù)服務(wù)程序

計(jì)劃任務(wù)分為一次性計(jì)劃任務(wù)與長期性計(jì)劃任務(wù):
? 一次性計(jì)劃任務(wù):今晚 11 點(diǎn) 30 分開啟網(wǎng)站服務(wù)泣港。
? 長期性計(jì)劃任務(wù):每周一的凌晨 3 點(diǎn) 25 分把/home/wwwroot 目錄打包備份為backup.tar.gz暂殖。

例如,使用下述命令將系統(tǒng)設(shè)置為在今晚 23:30 分自動(dòng)重啟網(wǎng)站服務(wù)当纱。

[root@linuxprobe ~]# at 23:30
at > systemctl restart httpd
at > 此處請(qǐng)同時(shí)按下 Ctrl + D 組合鍵來結(jié)束編寫計(jì)劃任務(wù)
job 3 at Mon Apr 27 23:30:00 2017
[root@linuxprobe ~]# at -l

如果想挑戰(zhàn)一下難度更大但簡捷性更高的方式呛每,可以把前面學(xué)習(xí)的管道符(任意門)放到兩條命令之間,讓 at 命令接收前面 echo 命令的輸出信息惫东,以達(dá)到通過非交互式的方式創(chuàng)建計(jì)劃一次性任務(wù)的目的

[root@linuxprobe ~]# echo "systemctl restart httpd" | at 23:30
job 4 at Mon Apr 27 23:30:00 2017
[root@linuxprobe ~]# at -l
3 Mon Apr 27 23:30:00 2017 a root
4 Mon Apr 27 23:30:00 2017 a root

如果我們不小心設(shè)置了兩個(gè)一次性計(jì)劃任務(wù)莉给,可以使用下面的命令輕松刪除其中一個(gè):

[root@linuxprobe ~]# atrm 3
[root@linuxprobe ~]# at -l
4 Mon Apr 27 23:30:00 2017 a root

定時(shí)語句的語法:

使用 crond 設(shè)置任務(wù)的參數(shù)字段說明:

運(yùn)算符 作用
取值為 0~59 的整數(shù)
時(shí) 取值為 0~23 的任意整數(shù)
取值為 1~31 的任意整數(shù)
取值為 1~12 的任意整數(shù)
星期 取值為 0~7 的任意整數(shù),其中 0 與 7 均為星期日
命令 要執(zhí)行的命令或程序腳本

假設(shè)在每周一廉沮、三颓遏、五的凌晨 3 點(diǎn) 25 分,都需要使用 tar 命令把某個(gè)網(wǎng)站的數(shù)據(jù)目錄進(jìn)行打包處理滞时,使其作為一個(gè)備份文件叁幢。我們可以使用 crontab -e 命令來創(chuàng)建計(jì)劃任務(wù)。為自己創(chuàng)建計(jì)劃任務(wù)無需使用-u 參數(shù)坪稽,具體的實(shí)現(xiàn)效果的參數(shù)如 crontab -l 命令結(jié)果所示:

[root@linuxprobe ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@linuxprobe ~]# crontab -l
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot

需要說明的是曼玩,除了用逗號(hào)(,)來分別表示多個(gè)時(shí)間段鳞骤,例如“8,9,12”表示 8 月、 9 月和 12 月黍判。還可以用減號(hào)(-)來表示一段連續(xù)的時(shí)間周期(例如字段“日”的取值為“12-15”豫尽,則表示每月的 12~15 日)。以及用除號(hào)(/)表示執(zhí)行任務(wù)的間隔時(shí)間(例如“/2”表示每隔2 分鐘執(zhí)行一次任務(wù))顷帖。如果在 crond 服務(wù)中需要同時(shí)包含多條計(jì)劃任務(wù)的命令語句美旧,應(yīng)每行僅寫一條。尤其需要注意的是贬墩,在 crond 服務(wù)的計(jì)劃任務(wù)參數(shù)中榴嗅,所有命令一定要用絕對(duì)路徑的方式來寫,如果不知道絕對(duì)路徑陶舞,請(qǐng)用 whereis 命令進(jìn)行查詢嗽测。*

注意點(diǎn):

? 在 crond 服務(wù)的配置參數(shù)中,可以像 Shell 腳本那樣以#號(hào)開頭寫上注釋信息肿孵,這樣
在日后回顧這段命令代碼時(shí)可以快速了解其功能唠粥、需求以及編寫人員等重要信息。
? 計(jì)劃任務(wù)中的“分”字段必須有數(shù)值颁井,絕對(duì)不能為空或是*號(hào)厅贪,而“日”和“星期”字
段不能同時(shí)使用,否則就會(huì)發(fā)生沖突

五雅宾、用戶和組

1. 常用的一些命令

useradd 命令:

參數(shù) 作用
-d 指定用戶的家目錄(默認(rèn)為/home/username)
-e 賬戶的到期時(shí)間养涮,格式為 YYYY-MM-DD.
-u 指定該用戶的默認(rèn) UID
-g 指定一個(gè)初始的用戶基本組(必須已存在)
-G 指定一個(gè)或多個(gè)擴(kuò)展用戶組
-N 不創(chuàng)建與用戶同名的基本用戶組
-s 指定該用戶的默認(rèn) Shell 解釋器

實(shí)例:

[root@linuxprobe ~]# useradd -d /home/linux -u 8888 -s /sbin/nologin linuxprobe
[root@linuxprobe ~]# id linuxprobe
uid=8888(linuxprobe) gid=8888(linuxprobe) groups=8888(linuxprobe)

groupadd 命令:

groupadd 命令用于創(chuàng)建用戶組,格式為“groupadd [選項(xiàng)] 群組名”眉抬。

[root@linuxprobe ~]# groupadd ronny

usermod 命令:

usermod 命令用于修改用戶的屬性贯吓,格式為“usermod [選項(xiàng)] 用戶名”孝情。

參數(shù) 作用
-c 填寫用戶賬戶的備注信息
-d -m 參數(shù)-m 與參數(shù)-d 連用帅涂,可重新指定用戶的家目錄并自動(dòng)把舊的數(shù)據(jù)轉(zhuǎn)移過去
-e 賬戶的到期時(shí)間坦辟,格式為 YYYY-MM-DD
-g 變更所屬用戶組
-G 變更擴(kuò)展用戶組
-L 鎖定用戶禁止其登錄系統(tǒng)
-U 解鎖用戶纽绍,允許其登錄系統(tǒng)
-s 變更默認(rèn)終端
-u 修改用戶的 UID

將用戶 linuxprobe 加入到 root 用戶組中,這樣擴(kuò)展組列表中則會(huì)出現(xiàn) root 用戶組的
字樣铣揉,而基本組不會(huì)受到影響抄罕,如下:

[root@linuxprobe ~]# usermod -G root linuxprobe
[root@linuxprobe ~]# id linuxprobe
uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe),0(root)

passwd 命令:

passwd 命令用于修改用戶密碼屁药、過期時(shí)間寒瓦、認(rèn)證信息等情屹,格式為“passwd [選項(xiàng)] [用戶名]”。

參數(shù) 作用
-l 鎖定用戶杂腰,禁止其登錄
-u 解除鎖定垃你,允許用戶登錄
--stdin 允許通過標(biāo)準(zhǔn)輸入修改用戶密碼,如 echo "NewPassWord" | passwd --stdin Username
-d 使該用戶可用空密碼登錄系統(tǒng)
-e 強(qiáng)制用戶在下次登錄時(shí)修改密碼
-S 顯示用戶的密碼是否被鎖定,以及密碼所采用的加密算法名稱
[root@linuxprobe ~]# passwd
Changing password for user root.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@linuxprobe ~]# passwd linuxprobe
Changing password for user linuxprobe.
New password:
Retype new password:
passwd: all authentication tokens updated successfully

假設(shè)您有位同事正在度假惜颇,而且假期很長皆刺,那么可以使用 passwd 命令禁止該用戶登錄系統(tǒng),等假期結(jié)束回歸工作崗位時(shí)凌摄,再使用該命令允許用戶登錄系統(tǒng)羡蛾,而不是將其刪除。這樣既保證了這段時(shí)間內(nèi)系統(tǒng)的安全锨亏,也避免了頻繁添加林说、刪除用戶帶來的麻煩:

[root@linuxprobe ~]# passwd -l linuxprobe
Locking password for user linuxprobe.
passwd: Success
[root@linuxprobe ~]# passwd -S linuxprobe
linuxprobe LK 2017-12-26 0 99999 7 -1 (Password locked.)
[root@linuxprobe ~]# passwd -u linuxprobe
Unlocking password for user linuxprobe.
passwd: Success
[root@linuxprobe ~]# passwd -S linuxprobe
linuxprobe PS 2017-12-26 0 99999 7 -1 (Password set, SHA512 crypt.)

userdel 命令:

userdel 命令用于刪除用戶,格式為“userdel [選項(xiàng)] 用戶名”屯伞。

參數(shù) 作用
-f 強(qiáng)制刪除用戶
-r 同時(shí)刪除用戶及用戶家目錄

2.文件權(quán)限與歸屬

盡管在 Linux 系統(tǒng)中一切都是文件,但是每個(gè)文件的類型不盡相同豪直,因此 Linux 系統(tǒng)使
用了不同的字符來加以區(qū)分劣摇,常見的字符如下所示。

字符 含義
- 普通文件弓乙。
d 目錄文件末融。
l 鏈接文件。
b 塊設(shè)備文件暇韧。
c 字符設(shè)備文件勾习。
p 管道文件。

對(duì)于一般文件來說懈玻,權(quán)限比較容易理解巧婶;但是,對(duì)于目錄文件來說涂乌,理解其權(quán)限設(shè)置來就不那么容易了艺栈。很多資深 Linux 用戶其實(shí)也沒有真正搞明白。他們的區(qū)別對(duì)比如下表:

字符 文件含義 目錄含義
可讀(r) 表示能夠讀取文件的實(shí)際內(nèi)容湾盒; 表示能夠讀取目錄內(nèi)的文件列表
可寫(w) 表示能夠編輯湿右、新增、修改罚勾、刪除文件的實(shí)際內(nèi)容毅人; 表示能夠在目錄內(nèi)新增、刪除尖殃、重命名文件
可執(zhí)行(x) 表示能夠運(yùn)行一個(gè)腳本程序丈莺。 表示能夠進(jìn)入該目錄

文件權(quán)限的字符與數(shù)字表示:




3.文件的特殊權(quán)限

在復(fù)雜多變的生產(chǎn)環(huán)境中,單純?cè)O(shè)置文件的 rwx 權(quán)限無法滿足我們對(duì)安全和靈活性的需
求分衫,因此便有了 SUID场刑、 SGID 與 SBIT 的特殊權(quán)限位。

SUID

SUID 是一種對(duì)二進(jìn)制程序進(jìn)行設(shè)置的特殊權(quán)限,可以讓二進(jìn)制程序的執(zhí)行者臨時(shí)擁有屬主的權(quán)限(僅對(duì)擁有執(zhí)行權(quán)限的二進(jìn)制程序有效)牵现。例如铐懊,所有用戶都可以執(zhí)行 passwd 命令來修改自己的用戶密碼,而用戶密碼保存在/etc/shadow 文件中瞎疼。

查看 passwd 命令屬性時(shí)發(fā)現(xiàn)所有者的權(quán)限由 rwx 變成了 rws科乎,其中 x 改變成 s 就意味著該文件被賦予了 SUID 權(quán)限。另外有讀者會(huì)好奇贼急,那么如果原本的權(quán)限是 rw-呢茅茂?如果原先權(quán)限位上沒有 x 執(zhí)行權(quán)限,那么被賦予特殊權(quán)限后將變成大寫的 S太抓。

[root@linuxprobe ~]# ls -l /etc/shadow
----------. 1 root root 1004 Jan 3 06:23 /etc/shadow
[root@linuxprobe ~]# ls -l /bin/passwd
-rwsr-xr-x. 1 root root 27832 Jan 29 2017 /bin/passwd

SGID

SGID 主要實(shí)現(xiàn)如下兩種功能:
? 讓執(zhí)行者臨時(shí)擁有屬組的權(quán)限(對(duì)擁有執(zhí)行權(quán)限的二進(jìn)制程序進(jìn)行設(shè)置)
? 在某個(gè)目錄中創(chuàng)建的文件自動(dòng)繼承該目錄的用戶組(只可以對(duì)目錄進(jìn)行設(shè)置)

舉例來說空闲,在早期的 Linux 系統(tǒng)中,/dev/kmem 是一個(gè)字符設(shè)備文件走敌,用于存儲(chǔ)內(nèi)核程序要訪問的數(shù)據(jù)碴倾,權(quán)限為:

cr--r----- 1 root system 2, 1 Feb 11 2017 kmem

大家看出問題了嗎?除了 root 管理員或?qū)儆?system 組成員外掉丽,所有用戶都沒有讀取該文件的權(quán)限跌榔。由于在平時(shí)我們需要查看系統(tǒng)的進(jìn)程狀態(tài),為了能夠獲取到進(jìn)程的狀態(tài)信息捶障,可在用于查看系統(tǒng)進(jìn)程狀態(tài)的 ps 命令文件上增加 SGID 特殊權(quán)限位僧须。查看 ps 命令文件的屬性信息:

-r-xr-sr-x 1 bin system 59346 Feb 11 2017 ps

這樣一來,由于 ps 命令被增加了 SGID 特殊權(quán)限位项炼,所以當(dāng)用戶執(zhí)行該命令時(shí)担平,也就臨
時(shí)獲取到了 system 用戶組的權(quán)限,從而可以順利地讀取設(shè)備文件了锭部。

SGID 的第二個(gè)功能驱闷,即某個(gè)目錄中創(chuàng)建的文件,將會(huì)與該目錄所屬的用戶組一致空免,這樣可以更便捷的賦予權(quán)限空另。

[root@linuxprobe ~]# cd /tmp
[root@linuxprobe tmp]# mkdir testdir
[root@linuxprobe tmp]# ls -ald testdir/
drwxr-xr-x. 2 root root 6 Feb 11 11:50 testdir/
[root@linuxprobe tmp]# chmod -Rf 777 testdir/
[root@linuxprobe tmp]# chmod -Rf g+s testdir/
[root@linuxprobe tmp]# ls -ald testdir/
drwxrwsrwx. 2 root root 6 Feb 11 11:50 testdir/

在testdir創(chuàng)建的文件會(huì)自動(dòng)添加到root組當(dāng)中

chmod 命令:用來設(shè)置文件或目錄的權(quán)限,格式為“chmod[參數(shù)] 權(quán)限 文件或目錄名稱”蹋砚。

[root@linuxprobe ~]# chmod 760 test
[root@linuxprobe ~]# ls -l test
-rwxrw----. 1 linuxprobe root 15 Feb 11 11:50 test

chown 命令:設(shè)置文件或目錄的所有者和所屬組扼菠,其格式為“chown [參數(shù)] 所有者:所屬組 文件或目錄名稱”。

[root@linuxprobe ~]# ls -l test
-rwxrw----. 1 linuxprobe root 15 Feb 11 11:50 test
[root@linuxprobe ~]# chown root:bin test
[root@linuxprobe ~]# ls -l test
-rwxrw----. 1 root bin 15 Feb 11 11:50 test

SBIT

現(xiàn)在坝咐,大學(xué)里的很多老師都要求學(xué)生將作業(yè)上傳到服務(wù)器的特定共享目錄中循榆,但總是有幾個(gè)“破壞分子”喜歡刪除其他同學(xué)的作業(yè),這時(shí)就要設(shè)置 SBIT(Sticky Bit)特殊權(quán)限位了(也可以稱之為特殊權(quán)限位之粘滯位)墨坚。 SBIT 特殊權(quán)限位可確保用戶只能刪除自己的文件秧饮,而不能刪除其他用戶的文件。換句話說,當(dāng)對(duì)某個(gè)目錄設(shè)置了 SBIT 粘滯位權(quán)限后盗尸,那么該目錄中的文件就只能被其所有者執(zhí)行刪除操作了

在linux中柑船,/tmp目錄下的文件默認(rèn)是帶有SBIT特殊權(quán)限位的,如果不是你創(chuàng)建的文件泼各,你是無法刪除的鞍时,如下:

$ rm -rf test
rm: cannot remove ‘test’: Operation not permitted

如果要給文件賦予SBIT特殊權(quán)限位,使用以下指令:

chmod -R o+t linux/

4.文件的隱藏屬性

Linux 系統(tǒng)中的文件除了具備一般權(quán)限和特殊權(quán)限之外扣蜻,還有一種隱藏權(quán)限逆巍,即被隱藏起
來的權(quán)限,默認(rèn)情況下不能直接被用戶發(fā)覺莽使。

chattr 命令

chattr 命令中用于隱藏權(quán)限的參數(shù)及其作用

參數(shù) 作用
i 無法對(duì)文件進(jìn)行修改锐极;若對(duì)目錄設(shè)置了該參數(shù),則僅能修改其中的子文件內(nèi)容而不能新建或刪除文件
a 僅允許補(bǔ)充(追加)內(nèi)容芳肌,無法覆蓋/刪除內(nèi)容(Append Only)
S 文件內(nèi)容在變更后立即同步到硬盤(sync)
s 徹底從硬盤中刪除溪烤,不可恢復(fù)(用 0 填充原文件所在硬盤區(qū)域)
A 不再修改這個(gè)文件或目錄的最后訪問時(shí)間(atime)
b 不再修改文件或目錄的存取時(shí)間
D 檢查壓縮文件中的錯(cuò)誤
d 使用 dump 命令備份時(shí)忽略本文件/目錄
c 默認(rèn)將文件或目錄進(jìn)行壓縮
u 當(dāng)刪除該文件后依然保留其在硬盤中的數(shù)據(jù),方便日后恢復(fù)
t 讓文件系統(tǒng)支持尾部合并(tail-merging)
X 可以直接訪問壓縮文件中的內(nèi)容

一個(gè)簡單示例:

[root@linuxprobe ~]# echo "for Test" > linuxprobe
[root@linuxprobe ~]# chattr +a linuxprobe
[root@linuxprobe ~]# rm linuxprobe
rm: remove regular file ‘linuxprobe’? y
rm: cannot remove ‘linuxprobe’: Operation not permitted

lsattr 命令

一旦使用 lsattr 命令后庇勃,文件上被賦予的隱藏權(quán)限馬上就會(huì)原形畢露。此時(shí)可以按照顯示
的隱藏權(quán)限的類型(字母)槽驶,使用 chattr 命令將其去掉:

[root@linuxprobe ~]# lsattr linuxprobe
-----a---------- linuxprobe
[root@linuxprobe ~]# chattr -a linuxprobe
[root@linuxprobe ~]# lsattr linuxprobe
---------------- linuxprobe
[root@linuxprobe ~]# rm linuxprobe
rm: remove regular file ‘linuxprobe’? y

文件訪問控制列表 ACL

如果希望對(duì)某個(gè)文件的權(quán)限進(jìn)行更精細(xì)的分配责嚷,即本來只能給屬主或?qū)俳M賦予權(quán)限,這時(shí)候想要對(duì)屬主或?qū)俳M賦予rwx的權(quán)限掂铐,就需要用到文件的訪問控制列表(ACL)了罕拂。

setfacl 命令

setfacl 命令用于管理文件的 ACL 規(guī)則,格式為“setfacl [參數(shù)] 文件名稱”全陨。

下面來設(shè)置用戶在/root 目錄上的權(quán)限:

[root@linuxprobe ~]# setfacl -Rm u:linuxprobe:rwx /root
[root@linuxprobe ~]# su - linuxprobe
Last login: Sat Mar 21 15:45:03 CST 2017 on pts/1
[linuxprobe@linuxprobe ~]$ cd /root
[linuxprobe@linuxprobe root]$ ls
anaconda-ks.cfg Downloads Pictures Public
[linuxprobe@linuxprobe root]$ cat anaconda-ks.cfg
[linuxprobe@linuxprobe root]$ exit

設(shè)置用戶ACL訪問控制的權(quán)限格式:setfacl -Rm u:用戶名:權(quán)限 文件爆班,如下:

setfacl -Rm u:linuxprobe:rwx /root

設(shè)置用戶組ACL訪問控制的權(quán)限格式:setfacl -Rm g:組名:權(quán)限 文件,如下:

setfacl –Rm g:linuxprobe:rwx /root

如何知道某個(gè)文件是否賦予了ACL辱姨?

[root@linuxprobe ~]# ls -ld /root
dr-xrwx---+ 14 root root 4096 May 4 2017 /root

如果文件的權(quán)限的最后一個(gè)位變成了+號(hào)柿菩,代表文件被賦予了ACL;

getfacl 命令

getfacl 命令用于顯示文件上設(shè)置的 ACL 信息雨涛,格式為“getfacl 文件名稱”枢舶。


5.su 命令與 sudo 服務(wù)

sudo 命令用于給普通用戶提供額外的權(quán)限來完成原本 root 管理員才能完成的任務(wù),格式
為“sudo [參數(shù)] 命令名稱”替久。

sudo 服務(wù)中的可用參數(shù)以及作用

參數(shù) 作用
-h 列出幫助信息
-l 列出當(dāng)前用戶可執(zhí)行的命令
-u 用戶名或 UID 值 以指定的用戶身份執(zhí)行命令
-k 清空密碼的有效時(shí)間凉泄,下次執(zhí)行 sudo 時(shí)需要再次進(jìn)行密碼驗(yàn)證
-b 在后臺(tái)執(zhí)行指定的命令
-p 更改詢問密碼的提示語

visudo 命令

visudo 命令可用于配置用戶權(quán)限,配置 sudo 命令的配置文件時(shí)蚯根,其操作方法與 Vim 編輯器中用到的方法一致后众,因此在編寫完成后記得在末行模式下保存并退出。在 sudo 命令的配置文件中,按照下面的格式將第 99 行(大約)填寫上指定的信息蒂誉。

誰可以使用 允許使用的主機(jī) =(以誰的身份) 可執(zhí)行命令的列表

六教藻、存儲(chǔ)結(jié)構(gòu)和磁盤劃分

1.幾個(gè)基本概念:

  • 主分區(qū):相當(dāng)于C盤,里面包含了啟動(dòng)的引導(dǎo)文件拗盒,英文名叫做MBR
  • 拓展分區(qū):主分區(qū)以外的分區(qū)
  • 邏輯分區(qū):拓展分區(qū)下面的子分區(qū)怖竭,比如D盤、E盤陡蝇、F盤痊臭,與拓展分區(qū)是包含的關(guān)系,他們的關(guān)系如下圖:


2.linux中目錄的結(jié)構(gòu)

3.linux中常見的物理設(shè)備及名稱

4.掛載硬件設(shè)備

首先要知道一個(gè)問題登夫,為什么我們可以隨意操作文件广匙?

主要原因是這樣的,由于linux是一個(gè)很大的開源生態(tài)系統(tǒng)恼策,所以它的文件系統(tǒng)有很多鸦致,不同的文件系統(tǒng)其讀寫方式肯定是不一樣的,常見的文件系統(tǒng)有這些:Ext3涣楷,Ext4分唾,XFS...,見下圖:


這些文件系統(tǒng)的底層是硬件設(shè)備狮斗,文件系統(tǒng)是硬件設(shè)備的一套規(guī)范绽乔,但這些文件系統(tǒng)最后被VFS這個(gè)操作接口統(tǒng)一了,所以我們的用的cp碳褒,rm等指令都是這個(gè)VFS提供的折砸。

那為什么又要掛載呢?

劉遄老師有一個(gè)最簡單沙峻、最貼切的解釋:當(dāng)用戶需要使用硬盤設(shè)備或分區(qū)中的數(shù)據(jù)時(shí)睦授,需要先將其與一個(gè)已存在的目錄文件進(jìn)行關(guān)聯(lián),而這個(gè)關(guān)聯(lián)動(dòng)作就是“掛載”摔寨。

5.mount 命令

mount 命令用于掛載文件系統(tǒng)去枷,格式為“mount 文件系統(tǒng) 掛載目錄”。

例如是复,要把設(shè)備/dev/sdb2 掛載到/backup 目錄沉填,只需要在 mount 命令中填寫設(shè)備與掛載目錄
參數(shù)就行,系統(tǒng)會(huì)自動(dòng)去判斷要掛載文件的類型佑笋,因此只需要執(zhí)行下述命令即可:

[root@linuxprobe ~]# mount /dev/sdb2 /backup

雖然按照上面的方法執(zhí)行 mount 命令后就能立即使用文件系統(tǒng)了翼闹,但系統(tǒng)在重啟后掛
載就會(huì)失效,也就是說我們需要每次開機(jī)后都手動(dòng)掛載一下蒋纬。

如果想讓硬件設(shè)備和目錄永久地進(jìn)行自動(dòng)關(guān)聯(lián)猎荠,就必須把掛載信息按照指定的填寫格式“設(shè)備文件 掛載目錄 格式類型 權(quán)限選項(xiàng) 是否備份 是否自檢”(各字段的意義見表 6-4)寫入到/etc/fstab 文件中坚弱。這個(gè)文件中包含著掛載所需的諸多信息項(xiàng)目,一旦配置好之后就能一勞永逸了关摇。


[root@linuxprobe ~]# vim /etc/fstab
# #
/etc/fstab
# Created by anaconda on Wed May 4 19:26:23 2017
# #
Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/rhel-root / xfs defaults 1 1
UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot xfs defaults 1 2
/dev/mapper /rhel-swap swap swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0
/dev/sdb2 /backup ext4 defaults 0 0

關(guān)注其中的:/dev/sdb2 /backup ext4 defaults 0 0荒叶,這是要添加的內(nèi)容。

6.fdisk 命令

在 Linux 系統(tǒng)中输虱,管理硬盤設(shè)備最常用的方法就當(dāng)屬 fdisk 命令了些楣。 fdisk 命令用于管理磁盤分區(qū),格式為“fdisk [磁盤名稱]”宪睹,它提供了集添加愁茁、刪除、轉(zhuǎn)換分區(qū)等功能于一身的“一站式分區(qū)服務(wù)”亭病。

7.du 命令

該命令用來查看一個(gè)或多個(gè)文件占用了多大的硬盤空間

[root@linuxprobe Desktop]# du -sh readit.txt 
4.0K    readit.txt

8.軟硬方式鏈接

假如a.txt鏈接到b.txt鹅很,且a.txt中有內(nèi)容,則:

軟連接:b.txt是a.txt的快捷方式罪帖,打開b.txt 就是打開a.txt促煮,刪除a.txt,b.txt將打不開整袁,指令為ln -s a.txt b.txt
硬連接:是一種inode的引用菠齿,打開b.txt 就是打開a.txt,刪除a.txt坐昙,b.txt仍然能打開绳匀,且內(nèi)容就是a.txt的內(nèi)容,指令為ln a.txt b.txt

五民珍、用戶和組

九、網(wǎng)絡(luò)

1盗飒、網(wǎng)卡配置

網(wǎng)卡 IP 地址配置的是否正確是兩臺(tái)服務(wù)器是否可以相互通信的前提嚷量。在 RHEL 5、 RHEL 6 中逆趣,網(wǎng)卡配置文件的前綴為 eth蝶溶,第 1 塊網(wǎng)卡為eth0,第 2 塊網(wǎng)卡為 eth1宣渗;以此類推抖所。而在 RHEL 7 中,網(wǎng)卡配置文件的前綴則以 ifcfg 開始训裆,加上網(wǎng)卡名稱共同組成了網(wǎng)卡配置文件的名字慈参,例如 ifcfg-eno16777736儒洛;好在除了文件名變化外也沒有其他大的區(qū)別。現(xiàn)在有一個(gè)名稱為 ifcfg-eno16777736 的網(wǎng)卡設(shè)備傻粘,我們將其配置為開機(jī)自啟動(dòng)每窖,并且 IP地址、子網(wǎng)弦悉、網(wǎng)關(guān)等信息由人工指定窒典,其步驟應(yīng)該如下所示。

第1步:首先切換到/etc/sysconfig/network-scripts 目錄中(存放著網(wǎng)卡的配置文件)稽莉。

第2步:使用 Vim 編輯器修改網(wǎng)卡文件 ifcfg-eno16777736瀑志,逐項(xiàng)寫入下面的配置參數(shù)并保存退出。由于每臺(tái)設(shè)備的硬件及架構(gòu)是不一樣的污秆,因此請(qǐng)讀者使用 ifconfig 命令自行確認(rèn)各自網(wǎng)卡的默認(rèn)名稱劈猪。
? 設(shè)備類型: TYPE=Ethernet
? 地址分配模式: BOOTPROTO=static
? 網(wǎng)卡名稱: NAME=eno16777736
? 是否啟動(dòng): ONBOOT=yes
? IP 地址: IPADDR=192.168.10.10
? 子網(wǎng)掩碼: NETMASK=255.255.255.0
? 網(wǎng)關(guān)地址: GATEWAY=192.168.10.1
? DNS 地址: DNS1=192.168.10.1

第3步:重啟網(wǎng)絡(luò)服務(wù)并測(cè)試網(wǎng)絡(luò)是否聯(lián)通。進(jìn)入到網(wǎng)卡配置文件所在的目錄混狠,然后編輯網(wǎng)卡配置文件岸霹,在其中填入下面的信息:

[root@linuxprobe ~]# cd /etc/sysconfig/network-scripts/
[root@linuxprobe network-scripts]# vim ifcfg-eno16777736
TYPE=Ethernet
BOOTPROTO=static
NAME=eno16777736
ONBOOT=yes
IPADDR=192.168.10.10
NETMASK=255.255.255.0
GATEWAY=192.168.10.1
DNS1=192.168.10.1

執(zhí)行重啟網(wǎng)卡設(shè)備的命令(在正常情況下不會(huì)有提示信息),然后通過 ping 命令測(cè)試網(wǎng)絡(luò)能否聯(lián)通将饺。由于在 Linux 系統(tǒng)中 ping 命令不會(huì)自動(dòng)終止贡避,因此需要手動(dòng)按下 Ctrl-c 鍵來強(qiáng)行結(jié)束進(jìn)程。

[root@linuxprobe network-scripts]# systemctl restart network
[root@linuxprobe network-scripts]# ping 192.168.10.10
PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data.
64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.081 ms
64 bytes from 192.168.10.10: icmp_seq=2 ttl=64 time=0.083 ms
64 bytes from 192.168.10.10: icmp_seq=3 ttl=64 time=0.059 ms
64 bytes from 192.168.10.10: icmp_seq=4 ttl=64 time=0.097 ms
^C
--- 192.168.10.10 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2999ms
rtt min/avg/max/mdev = 0.059/0.080/0.097/0.013 ms

2予弧、網(wǎng)絡(luò)防火墻

相較于傳統(tǒng)的防火墻管理配置工具刮吧, firewalld 支持動(dòng)態(tài)更新技術(shù)并加入了區(qū)域(zone)的概念。簡單來說掖蛤,區(qū)域就是 firewalld 預(yù)先準(zhǔn)備了幾套防火墻策略集合(策略模板)杀捻,用戶可以根據(jù)生產(chǎn)場景的不同而選擇合適的策略集合,從而實(shí)現(xiàn)防火墻策略之間的快速切換蚓庭。例如致讥,我們有一臺(tái)筆記本電腦,每天都要在辦公室器赞、咖啡廳和家里使用垢袱。按常理來講,這三者的安全性按照由高到低的順序來排列港柜,應(yīng)該是家庭请契、公司辦公室、咖啡廳夏醉。當(dāng)前爽锥,我們希望為這臺(tái)筆記本電腦指定如下防火墻策略規(guī)則:在家中允許訪問所有服務(wù);在辦公室內(nèi)僅允許訪問文件共享服務(wù)畔柔;在咖啡廳僅允許上網(wǎng)瀏覽氯夷。在以往,我們需要頻繁地手動(dòng)設(shè)置防火墻策略規(guī)則靶擦,而現(xiàn)在只需要預(yù)設(shè)好區(qū)域集合肠槽,然后只需輕點(diǎn)鼠標(biāo)就可以自動(dòng)切換了擎淤,從而極大地提升了防火墻策略的應(yīng)用效率。 firewalld 中常見的區(qū)域名稱(默認(rèn)為 public)以及相應(yīng)的策略規(guī)則如表所示秸仙。

區(qū)域 默認(rèn)策略規(guī)則
trusted 允許所有的數(shù)據(jù)包
home 拒絕流入的流量嘴拢,除非與流出的流量相關(guān);而如果流量與 ssh寂纪、 mdns席吴、 ipp-client、amba-client 與 dhcpv6-client 服務(wù)相關(guān)捞蛋,則允許流量《Linux 就該這么學(xué)》
internal 等同于 home 區(qū)域
work 拒絕流入的流量孝冒,除非與流出的流量數(shù)相關(guān);而如果流量與 ssh拟杉、 ipp-client 與
dhcpv6-client 服務(wù)相關(guān)庄涡,則允許流量
public 拒絕流入的流量,除非與流出的流量相關(guān)搬设;而如果流量與 ssh穴店、 dhcpv6-client 服務(wù)相關(guān),則允許流量
external 拒絕流入的流量拿穴,除非與流出的流量相關(guān)泣洞;而如果流量與 ssh 服務(wù)相關(guān),則允許流量
dmz 拒絕流入的流量默色,除非與流出的流量相關(guān)球凰;而如果流量與 ssh 服務(wù)相關(guān),則允許流量
block 拒絕流入的流量腿宰,除非與流出的流量相關(guān)
drop 拒絕流入的流量呕诉,除非與流出的流量相關(guān)
2.1終端管理工具

firewallcmd 是 firewalld 防火墻配置管理工具的 CLI(命令行界面)版本。它的參數(shù)一般都是以“長格式”來提供的吃度,可以用 Tab 鍵來補(bǔ)齊甩挫。

查看 firewalld 服務(wù)當(dāng)前所使用的區(qū)域:

[root@linuxprobe ~]# firewall-cmd --get-default-zone
public

查詢 eno16777728 網(wǎng)卡在 firewalld 服務(wù)中的區(qū)域:

[root@linuxprobe ~]# firewall-cmd --get-zone-of-interface=eno16777728
public

把 firewalld 服務(wù)中 eno16777728 網(wǎng)卡的默認(rèn)區(qū)域修改為 external,并在系統(tǒng)重啟后生效规肴。分別查看當(dāng)前與永久模式下的區(qū)域名稱:

[root@linuxprobe ~]# firewall-cmd --permanent --zone=external --change-interface=
eno16777728
success
[root@linuxprobe ~]# firewall-cmd --get-zone-of-interface=eno16777728
public
[root@linuxprobe ~]# firewall-cmd --permanent --get-zone-of-interface=eno16777728
external

把 firewalld 服務(wù)的當(dāng)前默認(rèn)區(qū)域設(shè)置為 public:

[root@linuxprobe ~]# firewall-cmd --set-default-zone=public
success
[root@linuxprobe ~]# firewall-cmd --get-default-zone
public

啟動(dòng)/關(guān)閉 firewalld 防火墻服務(wù)的應(yīng)急狀況模式捶闸,阻斷一切網(wǎng)絡(luò)連接(當(dāng)遠(yuǎn)程控制服務(wù)器
時(shí)請(qǐng)慎用):

[root@linuxprobe ~]# firewall-cmd --panic-on
success
[root@linuxprobe ~]# firewall-cmd --panic-off
success

查詢 public 區(qū)域是否允許請(qǐng)求 SSH 和 HTTPS 協(xié)議的流量:

[root@linuxprobe ~]# firewall-cmd --zone=public --query-service=ssh
yes
[root@linuxprobe ~]# firewall-cmd --zone=public --query-service=https
no

把 firewalld 服務(wù)中請(qǐng)求 HTTPS 協(xié)議的流量設(shè)置為永久允許夜畴,并立即生效:

[root@linuxprobe ~]# firewall-cmd --zone=public --add-service=https
185
success
[root@linuxprobe ~]# firewall-cmd --permanent --zone=public --add-service=https
success
[root@linuxprobe ~]# firewall-cmd --reload
success

把 firewalld 服務(wù)中請(qǐng)求 HTTP 協(xié)議的流量設(shè)置為永久拒絕拖刃,并立即生效:

[root@linuxprobe ~]# firewall-cmd --permanent --zone=public --remove-service=http
success
[root@linuxprobe ~]# firewall-cmd --reload
success

把在 firewalld 服務(wù)中訪問 8080 和 8081 端口的流量策略設(shè)置為允許,但僅限當(dāng)前生效:

[root@linuxprobe ~]# firewall-cmd --zone=public --add-port=8080-8081/tcp
success
[root@linuxprobe ~]# firewall-cmd --zone=public --list-ports
8080-8081/tcp

把原本訪問本機(jī) 888 端口的流量轉(zhuǎn)發(fā)到 22 端口贪绘,要且求當(dāng)前和長期均有效:

注:流量轉(zhuǎn)發(fā)命令格式:firewall-cmd --permanent --zone=< > --add-forward-port=port=< >:proto=< >:toport=< >:toaddr=< IP >

[root@linuxprobe ~]# firewall-cmd --permanent --zone=public --add-forward-port=
port=888:proto=tcp:toport=22:toaddr=192.168.10.10
success
[root@linuxprobe ~]# firewall-cmd --reload
success

在客戶端使用 ssh 命令嘗試訪問 192.168.10.10 主機(jī)的 888 端口:

[root@client A ~]# ssh -p 888 192.168.10.10
The authenticity of host '[192.168.10.10]:888 ([192.168.10.10]:888)' can't
be established.
ECDSA key fingerprint is b8:25:88:89:5c:05:b6:dd:ef:76:63:ff:1a:54:02:1a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[192.168.10.10]:888' (ECDSA) to the list of known hosts.
root@192.168.10.10's password: root
Last login: Sun Jul 19 21:43:48 2017 from 192.168.10.10

firewalld 中的富規(guī)則表示更細(xì)致兑牡、更詳細(xì)的防火墻策略配置,它可以針對(duì)系統(tǒng)服務(wù)税灌、端口號(hào)均函、源地址和目標(biāo)地址等諸多信息進(jìn)行更有針對(duì)性的策略配置亿虽。它的優(yōu)先級(jí)在所有的防火墻策略中也是最高的。比如苞也,我們可以在 firewalld 服務(wù)中配置一條富規(guī)則洛勉,使其拒絕192.168.10.0/24 網(wǎng)段的所有用戶訪問本機(jī)的 ssh 服務(wù)(22 端口):

[root@linuxprobe ~]# firewall-cmd --permanent --zone=public --add-rich-rule="
rule family="ipv4" source address="192.168.10.0/24" service name="ssh" reject"
success
[root@linuxprobe ~]# firewall-cmd --reload
success

在客戶端使用 ssh 命令嘗試訪問 192.168.10.10 主機(jī)的 ssh 服務(wù)(22 端口):

[root@client A ~]# ssh 192.168.10.10
Connecting to 192.168.10.10:22...
Could not connect to '192.168.10.10' (port 22): Connection failed.
2.2 圖形管理工具

如何打開圖形管理工具:

圖形界面如下:

  • 1:Configuration,選擇運(yùn)行時(shí)(Runtime)模式或永久(Permanent)模式的配置如迟。
  • 2:Zones收毫,可選的策略集合區(qū)域列表。
  • 3:Services殷勘,常用的系統(tǒng)服務(wù)列表此再。
  • 4:public,當(dāng)前正在使用的區(qū)域玲销。
  • 5:Services输拇,管理當(dāng)前被選中區(qū)域中的服務(wù)。
  • 6:Ports贤斜,管理當(dāng)前被選中區(qū)域中的端口策吠。
  • 7:Masquerading,開啟或關(guān)閉 SNAT(源地址轉(zhuǎn)換協(xié)議)技術(shù)蠢古。
  • 8:Port Forwarding奴曙,設(shè)置端口轉(zhuǎn)發(fā)策略。
  • 9:ICMP Filter草讶,控制請(qǐng)求 icmp 服務(wù)的流量洽糟。
  • 10:Rich Rules,管理防火墻的富規(guī)則堕战。
  • 11:interfaces坤溃,管理網(wǎng)卡設(shè)備。
  • 12:被選中區(qū)域的服務(wù)嘱丢,若勾選了相應(yīng)服務(wù)前面的復(fù)選框薪介,則表示允許與之相關(guān)
    的流量。
  • 13: firewall-config 工具的運(yùn)行狀態(tài)越驻。
2.3 服務(wù)的訪問控制列表

TCP Wrappers 是 RHEL 7 系統(tǒng)中默認(rèn)啟用的一款流量監(jiān)控程序汁政,它能夠根據(jù)來訪主機(jī)的地址
與本機(jī)的目標(biāo)服務(wù)程序作出允許或拒絕的操作。

TCP Wrappers 服務(wù)的防火墻策略由兩個(gè)控制列表文件所控制缀旁,/etc/hosts.deny和/etc/hosts.allow记劈,系統(tǒng)將會(huì)先檢查允許控制列表文件(/etc/hosts.allow),如果匹配到相應(yīng)的允許策略則放行流量并巍; 如果沒有匹配目木,則去進(jìn)一步匹配拒絕控制列表文件(/etc/hosts.deny),若找到匹配項(xiàng)則拒絕該流量懊渡。如果這兩個(gè)文件全都沒有匹配到刽射,則默認(rèn)放行流量军拟。


建議先編寫拒絕策略規(guī)則,再編寫允許策略規(guī)則誓禁,以便直觀地看到相應(yīng)的效果懈息。

[root@linuxprobe ~]# vim /etc/hosts.deny
# #
hosts.deny This file contains access rules which are used to
# deny connections to network services that either use
# the tcp_wrappers library or that have been
# started through a tcp_wrappers-enabled xinetd.
# #
The rules in this file can also be set up in
# /etc/hosts.allow with a 'deny' option instead.
# #
See 'man 5 hosts_options' and 'man 5 hosts_access'
# for information on rule syntax.
# See 'man tcpd' for information on tcp_wrappers
sshd:*
[root@linuxprobe ~]# ssh 192.168.10.10
ssh_exchange_identification: read: Connection reset by peer

接下來,在允許策略規(guī)則文件中添加一條規(guī)則摹恰,使其放行源自 192.168.10.0/24 網(wǎng)段漓拾,訪問本機(jī) sshd 服務(wù)的所有流量〗潇簦可以看到骇两,服務(wù)器立刻就放行了訪問 sshd 服務(wù)的流量,效果非常直觀:

[root@linuxprobe ~]# vim /etc/hosts.allow
# #
hosts.allow This file contains access rules which are used to
# allow or deny connections to network services that
# either use the tcp_wrappers library or that have been
# started through a tcp_wrappers-enabled xinetd.
# #
See 'man 5 hosts_options' and 'man 5 hosts_access'
# for information on rule syntax.
# See 'man tcpd' for information on tcp_wrappers
sshd:192.168.10.
[root@linuxprobe ~]# ssh 192.168.10.10
The authenticity of host '192.168.10.10 (192.168.10.10)' can't be established.
ECDSA key fingerprint is 70:3b:5d:37:96:7b:2e:a5:28:0d:7e:dc:47:6a:fe:5c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.10' (ECDSA) to the list of known hosts.
root@192.168.10.10's password:
Last login: Wed May 4 07:56:29 2017
[root@linuxprobe ~]#
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末姜盈,一起剝皮案震驚了整個(gè)濱河市低千,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌馏颂,老刑警劉巖示血,帶你破解...
    沈念sama閱讀 222,464評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異救拉,居然都是意外死亡难审,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門亿絮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來告喊,“玉大人,你說我怎么就攤上這事派昧∏” “怎么了?”我有些...
    開封第一講書人閱讀 169,078評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵蒂萎,是天一觀的道長秆吵。 經(jīng)常有香客問我,道長五慈,這世上最難降的妖魔是什么纳寂? 我笑而不...
    開封第一講書人閱讀 59,979評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮泻拦,結(jié)果婚禮上毙芜,老公的妹妹穿的比我還像新娘。我一直安慰自己聪轿,他們只是感情好爷肝,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評(píng)論 6 398
  • 文/花漫 我一把揭開白布猾浦。 她就那樣靜靜地躺著陆错,像睡著了一般灯抛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上音瓷,一...
    開封第一講書人閱讀 52,584評(píng)論 1 312
  • 那天对嚼,我揣著相機(jī)與錄音,去河邊找鬼绳慎。 笑死纵竖,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的杏愤。 我是一名探鬼主播靡砌,決...
    沈念sama閱讀 41,085評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼珊楼!你這毒婦竟也來了通殃?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,023評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤厕宗,失蹤者是張志新(化名)和其女友劉穎画舌,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體已慢,經(jīng)...
    沈念sama閱讀 46,555評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡曲聂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了佑惠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片朋腋。...
    茶點(diǎn)故事閱讀 40,769評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖膜楷,靈堂內(nèi)的尸體忽然破棺而出乍丈,到底是詐尸還是另有隱情,我是刑警寧澤把将,帶...
    沈念sama閱讀 36,439評(píng)論 5 351
  • 正文 年R本政府宣布轻专,位于F島的核電站,受9級(jí)特大地震影響察蹲,放射性物質(zhì)發(fā)生泄漏请垛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評(píng)論 3 335
  • 文/蒙蒙 一洽议、第九天 我趴在偏房一處隱蔽的房頂上張望宗收。 院中可真熱鬧,春花似錦亚兄、人聲如沸混稽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽匈勋。三九已至礼旅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間洽洁,已是汗流浹背痘系。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留饿自,地道東北人汰翠。 一個(gè)月前我還...
    沈念sama閱讀 49,191評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像昭雌,于是被迫代替她去往敵國和親复唤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容