一、常用的指令
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 ~]#