Linux學習階段性總結2
權限 基本權限 附加權限(特殊權限) ACL權限(ACL策略)
Permission denied : 權限不足
管理員root具備一切權限 基本權限 – 讀取:允許查看內容-read r – 寫入:允許修改內容-write w – 可執行:允許運行和切換-execute x 對於目錄來說是可以cd 對於文本文件 r: cat head tail less w: vim且可以保存 x: 可以運行該文件 對於目錄:rx通常成對出現 目錄的 r 權限:能夠 ls 瀏覽此目錄內容 目錄的 w 權限:能夠執行 rm/mv/cp/mkdir/touch/等更改目錄內容的操作 (只對目錄內容有權限想要更改目錄本身名要把該目錄父目錄設為w權限) 目錄的 x 權限:能夠 cd 切換到此目錄 權限適用對象(歸屬) – 所有者(屬主):擁有此文件/目錄的用戶-user u – 所屬組(屬組):擁有此文件/目錄的組-group g – 其他用戶:除所有者、所屬組以外的用戶-other o 查看權限 ls -ld 文件或目錄... rwxr-xr-x:順序為:所有者 所屬組 其他人 以 - 開頭:文本文件 (其實都可以直接看後面的顏色顯示 黑色) 以 d 開頭:目錄 藍色 以 l 開頭:快捷方式 青色 chmod [-R] 歸屬關系+-=權限類別 文檔... (root才能使用) – [-R] 遞歸設置權限 -----》加了R其子文件都繼承該目錄的權限! 實驗結果:新建的也繼承! [root@server0 桌面]# chmod -R o=rx /home/yanjie/ [root@server0 桌面]# ls -ld /home/yanjie/yanjie1 繼承 drwxr-xr-x 5 root root 51 4月 5 23:42 /home/yanjie/yanjie1 [root@server0 桌面]# ls -ld /home/yanjie/yanjie111 繼承 -rw-r--r-x 1 root root 0 4月 5 23:42 /home/yanjie/yanjie111 [root@server0 桌面]# mkdir /home/yanjie/yanjie3 新建的 [root@server0 桌面]# ls -ld /home/yanjie/yanjie3 drwxr-xr-x 2 root root 6 4月 8 22:29 /home/yanjie/yanjie3 也繼承了!!! chmod u=rwx,g=rwx,o=--- /nsd01 (都是用逗號隔開) chmod u+x,g-x,o+w /nsd01 chmod u+x,g-x,o=--- /nsd01 判別權限的方法: 1. 查看用戶對於文檔的身份,屬於那個歸屬關系 (所有者>所屬組>其他人---匹配及停止原則) 2. 查看相應歸屬關系位置的權限
歸屬
chown 命令
– chown [-R] 屬主 文檔...
– chown [-R] :屬組 文檔...
– chown [-R] 屬主:屬組 文檔...
– [-R] 遞歸設置權限 要與特殊權限 g+s 區分開
實驗結果 :(果然實踐才能檢驗真理)
之前該目錄下已存在所有文件及目錄繼承了:後的所屬組權限
該目錄下新建的文件及目錄並沒有繼承:後面的所屬組權限
所以:必須要用set GID g+s 來解決該問題
(應用:財務看每天新增的考勤權限)
tips:用戶加入組權限不能立即生效,要重新su一次
Linux下父目錄和子目錄的屬組和權限沒有半毛錢關系(默認不繼承)
附加權限(特殊權限)
附加在屬組的 x 位上
– 屬組的權限標識會變為 s (原x位上有x,s。原x位上無x,S。)
– 適用於目錄,Set GID可以使目錄下新增的文檔自動設置與父目錄相同的屬組
– 繼承父目錄的所屬組身份 (新增新增新增新增這兩個字關鍵)
Set UID 附加在屬主的 x 位上 (作為了解,安全課程會講攻擊) – 屬主的權限標識會變為 s – 適用於可執行文件,Set UID可以讓使用者具有文件屬主的身份及部分權限 傳遞所有者身份 Sticky Bit (t權限應用場景多) 附加在其他人的 x 位上 – 其他人的權限標識會變為 t – 適用於開放 w 權限的目錄,可以阻止用戶濫用 w 寫入 t權限(禁止操作別人的文檔,校驗文檔的所有者是不是不是該用戶本身) chmod ugo=rwx /public chmod o+t /public ACL權限(ACL策略) 文檔歸屬的局限性 – 任何人只屬於三種角色:屬主、屬組、其他人 – 無法實現更精細的控制 acl訪問策略 – 能夠對個別用戶、個別組設置獨立的權限 – 大多數掛載的EXT3/4、XFS文件系統默認已支持 setfacl -m u:zhangsan:rx /nsd09 #設置ACL getfacl /nsd09 #查看ACL權限 setfacl [-R] -b 文檔... #清除所有的ACL setfacl -x u:用戶名 文檔... #刪除指定的ACL
使用LDAP認證
網絡用戶:由網絡中一臺服務器提供用戶名、密碼
本地用戶:/etc/passwd
作用:集中管理網絡中的用戶帳號
什麽是LDAP?
輕量級目錄訪問協議
– Lightweight Directory Access Protocol
– 提供的信息包括:用戶名、密碼、通信錄、主機名映
射記錄、......
LDAP服務器:classroom.example.com
思想:裝包,配置,啟服務!!!
1.安裝軟件
yum -y install sssd
yum -y install authconfig-gtk
2.運行authconfig-gtk圖形工具,配置sssd軟件
authconfig-gtk (要確保在-X 條件下遠程管理)
選擇LDAP LDAP密碼
dc=example,dc=com #指定服務端域名
classroom.example.com #指定服務端主機名
3.啟服務
systemctl restart sssd
id ldapuser0
家目錄漫遊
NFS共享
Network File System,網絡文件系統
由NFS服務器將指定的文件夾共享給客戶機
NFS服務端:classroom.example.com
客戶端:虛擬機Server
- 查看服務端有那些共享文件夾
#showmount -e classroom.example.com
2.訪問共享文件夾,利用mount提供訪問點 (共享了哪個目錄就創建哪個目錄作為掛載點)
#mount classroom.example.com:/home/guests /mnt
#ls /mnt/
#umount /mnt/
#mkdir /home/guests
#mount classroom.example.com:/home/guests/ /home/guests (共享了哪個目錄就創建哪個目錄作為掛載點)
#ls /home/guests
3.驗證
#su - ldapuser12
DAY07
查找文件Find
根據預設的條件遞歸查找對應的文件
– find [目錄] [條件1] [-a|-o] [條件2] ...
– 常用條件表示:
-type 類型(f文件、d目錄、l快捷方式)
-iname 忽略大小寫
-name "文檔名稱" (支持通配符,和ls類似)
find /etc/ -name "*tab*"
請查找/etc以 .conf 結尾(包含子目錄)
find /etc -name "*.conf"
請查找/etc以 .conf 結尾(不包含子目錄)
ls /etc/*.conf
-size +|-文件大小(k、M、G)
-user 用戶名
-group 組名
find /root/ -name "nsd*" -type f 同時滿足條件(nsd開頭的文本)
使用find命令的 -exec 操作
– find .. .. -exec 處理命令 {} \;
– 優勢:以 {} 代替每一個結果,逐個處理,遇 \; 結束
find /boot/ -name "vm*" -exec cp {} /opt \;
find /root/ -name "nsd*" -type f -exec cp {} /opt \;
限制目錄查找的深度(最大層數)
– -maxdepth
find /etc/ -maxdepth 1 -name "*.conf"
ls /etc/*.conf (等同?)
根據文件修改時間,都是過去時間
-mtime +10 #過去10天之前
-mtime -10 #最近10天之內
find /var/log/ -mtime -10
cron計劃任務 (又是安包 配置 啟服務 )
用途:按照設置的時間間隔為用戶反復執行某一項固定的系統任務
軟件包:cronie、crontabs
系統服務:crond
日誌文件:/var/log/crond
分 時 日 月 周 任務命令行(絕對路徑)
* * * * *
0 8 * * 5
30 23 * * *
* :匹配範圍內任意時間
, :分隔多個不連續的時間點
- :指定連續時間範圍
/n :指定時間頻率,每n ...
30 23 * * 1,3,5
30 23 * * 2-5
0 */2 * * *
crontab 命令
– 編輯:crontab -e [-u 用戶名]
– 查看:crontab -l [-u 用戶名]
– 清除:crontab -r [-u 用戶名]
每分鐘記錄當前系統的時間,寫入文件/opt/time.txt
date >> /opt/time.txt
cat /opt/time.txt
crontab -e -u root
crontab -l -u root
*/1 * * * * date >> /opt/time.txt
Engineer01
磁盤管理: 通常為真空的,因為轉速很高,一拆即報廢。
磁道:track
扇區:sector 默認512字節
識別硬盤 => 分區規劃 => 格式化 => 掛載使用
毛坯房---》 打隔斷----》 裝修---》 入住
一、分區規劃
MBR/msdos:主引導記錄模式
– 1~4個主分區,或者 3個主分區+1個擴展分區(n個邏輯分區)
– 最大支持容量為 2.2TB 的磁盤
– 擴展分區不能格式化
GPT:128個主分區, 最大支持容量為 18EB 的磁盤
修改硬盤的分區表
– fdisk 硬盤設備
fdisk /dev/vdb
常用交互指令:
m 列出指令幫助
p 查看現有的分區表
n 新建分區
d 刪除分區
q 放棄更改並退出
w 保存更改並退出
partprobe : 刷新 劃分的新分區
查看系統所有的磁盤設備 lsblk
/dev/sda5 : 第一塊SCSI硬盤的第5個分區
第一塊SCSI硬盤的第1個邏輯分區
二、格式化分區 make file system
mkfs.ext4 /dev/vdb1
mkfs.ext4 mkfs.xfs 格式化ext4,xfs文件系統
blkid /dev/vdb1 #查看文件系統及UUID
三、掛載使用
1、臨時掛載
mount /dev/vdb1 /mypart1
df -h #查看正在掛載的分區使用情況
2、開機自動掛載
①修改/etc/fstab配置文件
file system table
配置文件 /etc/fstab 的記錄格式
設備路徑 掛載點 文件系統類型 參數 備份標記 檢測順序
/dev/vdb1 /mypart1 ext4 defaults 0 0
因為是追加掛載設備故可以用echo直接追加寫入配置文件
echo /dev/vdb1 /mypart1 ext4 defaults 0 0 > /etc/fstab
②mount -a
檢測/etc/fstab開機自動掛載配置文件,格式是否正確
檢測/etc/fstab中,書寫完成,但當前沒有掛載的設備,進行掛載
③df -h
總結:
1.查看磁盤 lsblk
2.劃分分區 fdisk
3.刷新 partprobe
4.格式化 mkfs.ext4 mkfs.xfs
5.查看文件系統 blkid
6.掛載使用 mount 修改/etc/fstab配置文件
LVM邏輯卷
作用: 1.整合分散的空間
2.邏輯卷空間可以擴大
新建邏輯卷: 將眾多的物理卷(pv)組成卷組(vg),再從卷組中劃分邏輯卷(lv)
面粉--------->大面團----->小面團--------->蒸----------->吃
物理卷pv 卷組vg 邏輯卷lv 格式化 掛載使用
pvs #查看物理卷基本信息
vgs #查看卷組基本信息
lvs #查看邏輯卷基本信息
一、邏輯卷的創建
1.建立vg卷組 (單位為pe)
格式:vgcreate 卷組名 設備路徑
vgcreate nsd /dev/vdc[1-2]
(創建卷組時可以只用一個分區,面粉只有一坨就用一坨撒只要是閑置分區即可)
vgcreate -s 1M nsd /dev/vdc[1-2] (創建卷組時指定pe大小為1M)
2.創建lv邏輯卷
格式: lvcreate -n 邏輯卷名 -L 大小 卷組名
lvcreate -n vo -L 16G nsd
3.格式化,掛載使用
mkfs.ext4 /dev/nsd/vo (路徑為/dev/卷組名/邏輯卷名)
/dev/nsd/vo /mylvm ext4 defaults 0 0
mount -a
df -h
二、邏輯卷的擴展,支持線上工作(可以不用重啟生效)
卷組有足夠的剩余空間 (大面團還有直接要)
1. 擴建邏輯卷的空間
lvextend -L 18G /dev/nsd/vo
lvs
2. 擴建邏輯卷的文件系統 (重新把擴大的空間裝修 把新扯下來的小面團蒸)
resize2fs : ext4文件系統擴展命令
xfs_growfs : xfs文件系統擴展命令
df -h
resize2fs /dev/nsd/vo
df -h
卷組沒有足夠的剩余空間
1.擴展卷組
vgextend nsd /dev/vdc3
vgs
2. 擴建邏輯卷的空間
lvextend -L 25G /dev/nsd/vo
lvs
3. 擴建邏輯卷的文件系統
df -h
resize2fs /dev/nsd/vo
df -h
邏輯卷可以縮小,但是強烈不建議
PE:卷組劃分空間的單位
vgdisplay nsd #顯示卷組詳細信息,看PE的大小
vgchange -s 1M nsd #修改卷組PE的大小
vgdisplay nsd #顯示卷組詳細信息,看PE的大小
lvcreate -L 250M -n lvtest02 nsd -l:指定PE的個數
邏輯卷的刪除
首先刪除LV邏輯卷,在刪除VG卷組,最後刪除PV物理卷
lvremove /dev/nsd/vo
Engineer02
初識shell腳本
Shell腳本:可以執行文件,可以實現某種功能
提前設計可執行語句,用來完成特定任務的文件
– 解釋型程序
– 順序、批量執行
構成: #! 環境聲明 #!/bin/bash
註釋文本 (解釋腳本功能和設計理念)
可執行代碼
echo友好提示語句 使腳本更友好的執行
1、vim /usr/bin/first.sh #可以直接在PATH環境變量的路徑下寫腳本
(任何工作目錄下可以直接執行first.sh類似執行命令)
2、chmod +x /root/hello.sh #所有人加執行權限
3、/root/hello.sh #絕對路徑運行
一般腳本為提高執行的效率,采用非交互式
請書寫可以創建用戶的腳本,並且為用戶設置密碼為123
#!/bin/bash
useradd nsd02
echo 123 | passwd --stdin nsd02
編寫一個能輸出系統信息的 /root/sysinfo.sh 腳本
1)輸出當前紅帽系統的版本信息
2)輸出當前使用的內核版本
3)輸出當前系統的主機名
4)輸出當前ip地址
#!/bin/bash
cat /etc/redhat-release
uname -r
hostname
ifconfig | head -2
簡單腳本技巧
管道傳遞
使用 | 管道操作
– 將前一條命令的標準輸出交給後一條命令處理
重定向輸出
> :將前面命令的正確輸出,寫入到文本文件中,只收集正確信息
2> :將前面命令的錯誤輸出,寫入到文本文件中,只收集錯誤信息
&> :將前面命令的正確與錯誤輸出,寫入到文本文件中,正確與錯誤都收集
&> /dev/null 把正確和錯誤信息都給黑洞設備(黑洞設備)
補充:
‘ ‘ : 取消所有特殊字符意義
$[ ]:運算 + - * / %10(取余數運算,求模) 取10的余數
定律 : 余數一定小於除數
tips經常用到:$( ) 與 ` 反撇號:將命令的輸出結果,作為參數<br/>mkdir $(date +%F)<br/>mkdir
hostname-
date +%F<br/>mkdir nsd-
date +%F`
#!/bin/bash
useradd nsd05 &> /dev/null
echo nsd05用戶創建成功
echo 123 | passwd --stdin nsd05 &> /dev/null
echo nsd05用戶密碼設置成功
變量:提高腳本的靈活度,適用多變的環境
變量:會變化的量,以不變的名稱(容器杯子),存儲可以變化的值(水,或者飲料)
自定義變量
變量的定義: 變量名=存儲的值 (自定義變量)
#!/bin/bash
abc=kenji (以後只用改Kenji)
useradd $abc &> /dev/null
echo $abc用戶創建成功
echo 123 | passwd --stdin $abc &> /dev/null
echo $abc用戶密碼設置成功
交互式,降低腳本使用的難度,用戶在鍵盤上的輸入,存放到變量中
read : 記錄用戶在鍵盤上的輸入,並且存放到變量中
read -p ‘請輸入您要創建的用戶名:‘ abc
#!/bin/bash
read -p ‘請輸入您要創建的用戶名:‘ abc
useradd $abc &> /dev/null
echo $abc用戶創建成功
echo 123 | passwd --stdin $abc &> /dev/null
echo $abc用戶密碼設置成功
定義/賦值變量
– 變量名只由字母/數字/下劃線組成,區分大小寫
– 變量名不能以數字開頭,不要使用關鍵字和特殊字符
– 若指定的變量名已存在,相當於為此變量重新賦值
– 等號兩邊不要有空格
查看/引用變量
– 引用變量值:$變量名
– 查看變量值:echo $變量名、echo ${變量名}
a=rhel
echo $a
rhel
echo ${a}
rhel
echo $a7 (Linux不認識)
echo ${a}7
rhel7
環境變量 : 由系統定義賦值完成,用戶直接調用(通常為大寫且見名之意)
USER : 永遠儲存當前登陸的用戶名
HOME :
PATH :與執行命令相關 在執行命令時,需要找到命令所對應的程序,Linux系統會到PATH變量值的所有 路徑去尋找,如果找到就執行,沒有就不執行 (所以創建腳本時可以直接vim 到這個變量有的路徑下)
echo $PATH 查看PATH環境變量路徑
RANDOM:範圍是0--32767
位置變量:由系統定義賦值完成,用戶直接調用 $[1...n] (非交互式賦值,更專業)
方便向腳本中傳遞命令行參數
vim /root/test.sh
#!/bin/bash
cat -n $1 | head -$2
/root/test.sh /etc/passwd 3
vim /root/123.sh
#!/bin/bash
echo $1
echo $2
echo $3
/root/123.sh haha abcd rhel7
預定義變量:由系統定義賦值完成,用戶直接調用
$# 已加載的位置變量的個數
$* 所有位置變量的值
$? 程序退出後的狀態值,0表示正常,其他值異常 (通常用echo $?來檢查命令執行是否正確)
#!/bin/bash
cat -n $1 | head -$2
echo $#
echo $*
條件測試(判斷)
檢查文件狀態
-e : 判斷文檔是否存在,存在為真
-d : 存在且為目錄,才為真
-f : 存在且為文件,才為真
-r : 存在且具備讀權限,才為真
-w : 存在且具備寫權限,才為真
-x : 存在且具備執行權限,才為真
比較整數大小(帶e字母都有等於二字,g(grow)代表大於,l(low)代表小於)
-gt:大於
-ge:大於等於
-lt:小於
-le:小於等於
-eq:等於
-ne:不等於
字符串比對
== : 字符串相等為真
!= : 字符串不相等為真
if選擇結構 (固定格式)
if雙分支處理
if [條件判斷];then
命令序列xx
else
命令序列yy
fi
判斷當前用戶是否是root
#!/bin/bash
if [ $USER == root ];then
echo 當前是管理員
else
echo 當前是普通用戶
fi
計算機隨機產生一個 0到9之間的數字,用戶輸入一個0到9之間的數字
如果 用戶輸入的數字與 計算機隨機產生 相等,則輸出 您猜對了
如果 用戶輸入的數字與 計算機隨機產生 不相等,則輸出 猜錯了
$RANDOM :系統儲存隨機數字
定律 : 余數一定小於除數
#!/bin/bash
read -p ‘請輸入0到9之間的一個數字:‘ num1
num2=$[$RANDOM%10]
if [ $num1 -eq $num2 ];then
echo 您猜對了
else
echo 猜錯了
echo 正確的數字為$num2
fi
判斷是否ping通
#!/bin/bash
ping -c 2 $1 &> /dev/null (ping兩次的意思 因為不給次數停不下來)
if [ $? -eq 0 ];then
echo 可以通信
else
echo 不可以
fi
判斷是否有該用戶
#!/bin/bash
read -p ‘請輸入用戶名:‘ user
id $user &> /dev/null
if [ $? -eq 0 ];then
echo 用戶已存在
else
echo 用戶不存在
fi
if多分支處理
if [條件測試1];then (1為真執行xx退出)
命令序列xx
elif [條件測試2];then (1為假,2為真,執行yy退出)
命令序列yy
elif [條件測試3];then (1,2都為假,3為真,執行aa退出)
命令序列aa
else
命令序列zz (1,2,3都為假,執行zz退出)
fi
書寫一個成績判斷的腳本
用戶輸入成績,0到100之間
如果,成績 大於等於90以上 則輸出 優秀
如果,成績 大於等於80以上 則輸出 良好
如果,成績 大於等於70以上 則輸出 合格
如果,成績 大於等於60以上 則輸出 仍需努力
以上條件均不滿足:
則輸出 再牛的肖邦,也彈不出哥的悲傷
#!/bin/bash
read -p ‘請輸入您的成績0-100:‘ num
if [ $num -ge 90 ];then
echo 優秀
elif [ $num -ge 80 ];then
echo 良好
elif [ $num -ge 70 ];then
echo 合格
elif [ $num -ge 60 ];then
echo 仍需努力
else
echo 再牛的肖邦,也彈不出哥的悲傷
fi
循環: 重復性執行一個操作
for循環處理
遍歷/列表式循環
– 根據變量的不同取值,重復執行xx處理
for 變量名 in 值列表
do
循環的操作
done
for a in zhangsan lisi dc tc dz tz
do
useradd $a
done
{20..80} :造數工具,制造20到80 之間所有的數字
{ 起始..結束}
#!/bin/bash
for a in {1..20}
do
useradd stu$a
echo stu$a創建成功
done
循環可以與循環執行的操作無關 (循環的鑲嵌)
#!/bin/bash
for a in {1..3}
do
read -p ‘請輸入0到9之間的一個數字:‘ num1
num2=$[$RANDOM%10]
if [ $num1 -eq $num2 ];then
echo 您猜對了
else
echo 猜錯了
echo 正確的數字為$num2
fi
done
但是這個腳本並沒有猜對就跳出!(echo 您猜對了下面加個exit即可)
非常完整的腳本案例解析:
案例4:編寫一個判斷腳本
在 server0 上創建 /root/foo.sh 腳本
1)當運行/root/foo.sh redhat,輸出為fedora
2)當運行/root/foo.sh fedora,輸出為redhat
3)當沒有任何參數或者參數不是 redhat 或者
fedora時,其錯誤輸出產生以下信息:
/root/foo.sh redhat|fedora
#!/bin/bash
if [ $# -eq 0 ];then #判斷是否輸入了位置參數
echo ‘/root/foo.sh redhat|fedora‘ >&2
#把正確變成錯誤輸出
exit 2 #腳本退出返回值
elif [ $1 == redhat ];then
echo fedora
elif [ $1 == fedora ];then
echo redhat
else
echo ‘/root/foo.sh redhat|fedora‘ >&2
exit 3 #腳本退出返回值
fi
案例5:編寫一個批量添加用戶腳本
在 server0 上創建 /root/batchusers 腳本
1)此腳本要求提供用戶名列表文件作為參數
http://classroom/pub/materials/userlist
2)如果沒有提供參數,此腳本應該給出提示
Usage: /root/batchusers,退出並返回相應值
3)如果提供一個不存在的文件,此腳本應該給出提
示 Input file not found,退出並返回相應值
4)新用戶的登錄Shell為 /bin/false,無需設置密碼
#!/bin/bash
if [ $# -eq 0 ];then
echo ‘Usage: /root/batchusers‘ >&2
exit 2
elif [ -f $1 ];then
for i in `cat $1`
do
useradd -s /bin/false $i
echo $i創建成功
done
else
echo Input file not found >&2
exit 3
fi
Engineer03
系統安全保護(SElinux)
Security-Enhanced Linux
– 美國NSA國家安全局主導開發,一套增強Linux系統安全的強制訪問控制體系
– 集成到Linux內核(2.6及以上)中運行
– RHEL7基於SELinux體系針對用戶、進程、目錄和文件提供了預設的保護策略,以及管理工具
SELinux root firewall 三者之間的關系
皇帝 宰相 皇宮看門侍衛 (但是root這個宰相隨時可以叛變讓皇帝駕崩)
SELinux的運行模式
– enforcing(強制)、---》 皇帝掌權
- permissive(寬松) ---》 傀儡皇帝只能那小本子記
– disabled(徹底禁用) —》 皇帝駕崩
變成disabled,都必須經過修改配置文件,重啟才可以
切換運行模式
– 臨時切換:setenforce 1|0
– 固定配置:/etc/selinux/config 文件
SELINUX=disabled
getenforce #查看當前SELinux狀態
配置用戶環境
影響指定用戶的 bash 解釋環境
– ~/.bashrc,每次開啟 bash 終端時生效
影響所有用戶的 bash 解釋環境
– /etc/bashrc,每次開啟 bash 終端時生效
新開一個全新的終端驗證:
防火墻策略管理 (皇宮門帶刀侍衛)
作用:隔離,過濾入站請求,允許出站
前提(搭兩個服務來測試)
基本Web服務
1.服務端虛擬機Server,安裝可以提供Web服務軟件
yum -y install httpd
2.虛擬機Server操作,啟動httpd服務,設置為開機自起服務
systemctl restart httpd #重起服務
systemctl enable httpd #設置開機自起服務
3.虛擬機Server操作,本機測試訪問
firefox 172.25.0.11
4.虛擬機Server操作,書寫頁面文件
默認存放頁面文件的路徑:/var/www/html
默認頁面文件名字:index.html
(想要使更換的網頁內容生效:重啟服務restart,enable,且要在setenforce 0即permission狀態下才能實現)
寫網站語言:html
vim /var/www/html/index.html
<marquee><font color=red> <h1>NSD1803
滾動 字體顏色 紅色 最大字體
http:超文本傳輸協議
基本FTP服務: 文件傳輸協議
1.服務端虛擬機Server,安裝可以提供FTP服務軟件
yum -y install vsftpd
2.虛擬機Server操作,啟動 vsftpd服務,設置為開機自起服務
systemctl restart vsftpd
systemctl enable vsftpd
3.虛擬機Server操作,本機測試:
默認FTP共享的路徑:/var/ftp
firefox ftp://172.25.0.11
RHEL7的防火墻體系
系統服務:firewalld
管理工具:firewall-cmd、firewall-config(圖形工具)
匹配規則的原則: 匹配即停止 (類似用戶權限判斷的原則)
預設安全區域
根據所在的網絡場所區分,預設保護規則集
– trusted:允許任何訪問
– public:僅允許訪問本機的sshd、DHCP、ping少數幾個服務
– block:阻塞任何來訪請求,明確拒絕
– drop:丟棄任何來訪的數據包,節省資源 (沒有任何回應不答應不拒絕)
防火墻決定,客戶端請求進入某個區域的規則:
1.查看客戶端請求中源IP地址,再看所以有區域中,
哪一個區域有該源IP地址的規則,則進入該區域
2.進入默認區域,public
默認區域的修改
虛擬機Server
firewall-cmd --get-default-zone #查看默認區域
虛擬機Desktop
ping -c 2 172.25.0.11 #可以通信
虛擬機Server
firewall-cmd --set-default-zone=block #修改默認區域
firewall-cmd --get-default-zone #查看默認區域
虛擬機Desktop
ping -c 2 172.25.0.11 #不可以通信,有回應
虛擬機Server
firewall-cmd --set-default-zone=drop #修改默認區域
firewall-cmd --get-default-zone #查看默認區域
虛擬機Desktop
ping -c 2 172.25.0.11 #不可以通信,沒有回應
互聯網常見的服務協議 (八大協議)
http : 超文本傳輸協議
FTP : 文件傳輸協議
https : 安全的超文本傳輸協議
DNS : 域名解析協議
telnet : 遠程管理協議
smtp : 郵件協議,用戶發郵件協議
pop3 : 郵件協議,用戶收郵件協議
tftp : 簡單文件傳輸協議
默認區域服務的添加
虛擬機Server
# firewall-cmd --set-default-zone=public #修改默認區域
firewall-cmd --zone=public --list-all #查看區域規則
firewall-cmd --zone=public --add-service=http #添加服務
firewall-cmd --zone=public --list-all
虛擬機Desktop
firefox 172.25.0.11 #可以訪問
firefox ftp://172.25.0.11 #不可以訪問
虛擬機Server
firewall-cmd --zone=public --add-service=ftp
firewall-cmd --zone=public --list-all
虛擬機Desktop
firefox 172.25.0.11 #可以訪問
firefox ftp://172.25.0.11 #可以訪問
策略的永久配置
– 永久(permanent)
虛擬機Server
firewall-cmd --reload
#重新加載防火墻配置,模擬重起機器(之前的配置消失)
firewall-cmd --zone=public --list-all
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --zone=public --list-all
firewall-cmd --reload
firewall-cmd --zone=public --list-all
添加源IP的規則設置
虛擬機Server
firewall-cmd --zone=block --list-all
firewall-cmd --zone=block --add-source=172.25.0.10(把某個IP加入block區域)
#firewall-cmd --zone=block --list-all
虛擬機Desktop
#ping -c 2 172.25.0.11 #失敗
#firefox 172.25.0.11 #失敗
#firefox ftp://172.25.0.11 #失敗
真機訪問
#ping -c 2 172.25.0.11 #成功
#firefox 172.25.0.11 #成功
#firefox ftp://172.25.0.11 #成功
工作時防火墻,設置的方式
嚴格:默認區域為drop,把允許的IP單獨放入trusted
寬松:默認區域為trusted,把拒絕的IP單獨放入drop
端口:編號,標識作用,標識每個服務
ssh 22
http 80
telnet 23
實現本機的端口映射
本地應用的端口重定向(端口1 --> 端口2)
– 從客戶機訪問 端口1 的請求,自動映射到本機 端口2
– 比如,訪問以下兩個地址可以看到相同的頁面:
客戶端desktop-----》172.25.0.11:5423-----》服務端Server
服務端Server-----172.25.0.11:5423 移交 -----》172.25.0.11:80
虛擬機Server
#firewall-cmd --reload
虛擬機Desktop
#firefox 172.25.0.11 #可以訪問
#firefox 172.25.0.11:5423 #不可以訪問
虛擬機Server
#firewall-cmd --permanent --zone=public
--add-forward-port=port=5423:proto=tcp:toport=80
#添加- 轉發- 端口 =將端口5423協議為tcp:轉發到80
#firewall-cmd --reload
(若忘了加--permanent 刷了以後添加的端口轉發會失效,便不能驗證,所以這點很重要)
# firewall-cmd --zone=public --list-all
虛擬機Desktop
#firefox 172.25.0.11:5423 #可以訪問
配置聚合連接 (網卡綁定、鏈路聚合)
eth1 eth2 -----》司機(奴隸)
虛擬網卡 team(組隊)----》卡車 (對外IP為虛擬網卡ip)
1.創建 虛擬網卡 man teamd.conf #查看幫助信息
# nmcli connection add type team con-name team0 ifname team0 autoconnect yes
config ‘{"runner": {"name": "activebackup"}}‘
# ifconfig #查看是否有team0網卡
# nmcli connection 添加 類型為 team(綁定類型)配置文件名為team0 ifconfig顯示網卡名為 team0 每次開機自起 配置網卡綁定工作模式 熱備份方式(網卡1掛了才換網卡2)
# 如果敲錯誤
# nmcli connection delete team0
2.添加成員(添加奴隸)
# nmcli connection add type team-slave con-name team0-1 ifname eth1 master team0
# nmcli connection add type team-slave con-name team0-2 ifname eth2 master team0
# nmcli connection 添加 類型為 team-slave 配置文件名 team0-1
網卡為 eth1 添加到team0中
#如果敲錯誤 nmcli connection delete team0-1
3.配置team0的IP地址
# nmcli connection modify team0 ipv4.method manual
ipv4.addresses 192.168.1.1/24 connection.autoconnect yes
4.激活所有配置
# nmcli connection up team0
# nmcli connection up team0-1
# nmcli connection up team0-2
如果激活失敗 (刪除了從頭再來!)
# nmcli connection delete team0
# nmcli connection delete team0-1
# nmcli connection delete team0-2
終極驗證:
# teamdctl team0 state #查看team0詳細信息 (能看到目前是誰在工作)
# ifconfig eth1 down #禁用網卡 (禁了網卡1自動切換到網卡2,該操作也可切換工作網卡)
# teamdctl team0 state ifconfig eth1 up 打開1
ifconfig eth2 down 再次換到1
Engineer04
Windows下的共享 選文件夾右鍵 共享 高級共享 打鉤
隱藏共享 :打鉤後再共享名後加$ 訪問時\192.168.1.1\nsd$
前提條件
服務端和客戶端防火墻的默認區域為trusted!
Samba服務基礎 (第一類反根據功能向編譯的軟件,思想很牛逼)
配置SMB共享,跨平臺的共享,Windows與Linux的共享
Samba 軟件項目
– 用途:為客戶機提供共享使用的文件夾
– 協議:SMB(TCP 139)、CIFS(TCP 445)
smb協議:建立通道的協議 cifs協議:文件傳輸的協議(既是協議又是文件系統)
類比:淘寶購物 電腦下單(通道) 到達手中(靠物流)
所需軟件包:samba
系統服務:smb
Samba共享帳號:(在服務端創建,你知道服務端的賬號密碼才能判定你是安全的)
默認情況下,訪問Samba共享必須通過用戶驗證
專門用於訪問Samba共享時驗證的用戶與密碼
與系統用戶為同一個用戶,但是密碼時samba獨立密碼
使用 pdbedit 管理工具
– 添加用戶:pdbedit -a 用戶名
– 查詢用戶:pdbedit -L [用戶名]
– 刪除用戶:pdbedit -x 用戶名
修改 /etc/samba/smb.conf (服務配置文件)
path = 文件夾絕對路徑
public = no|yes //默認no
browseable = yes|no //默認yes
read only = yes|no //默認yes
write list = 用戶1 .. .. //默認無
valid users = 用戶1 .. .. //默認任何用戶
hosts allow = 客戶機地址 .. ..
hosts deny = 客戶機地址 .. ..
Samba服務搭建(只讀)
服務端,虛擬機Server:
1.安裝可以提供smb共享功能的軟件
# yum -y install samba
2.建立Samba共享驗證的用戶
# useradd kenji
#useradd chihiro
#useradd harry
#pdbedit -a harry #添加為Samba共享帳號
#pdbedit -a kenji #添加為Samba共享帳號
#pdbedit -a chihiro #添加為Samba共享帳號
#pdbedit -L #查看所有Samba共享帳號
3.創建共享目錄與文件
mkdir /common
echo 123 > /common/123.txt
4.修改配置/etc/samba/smb.conf
vim 末行模式 :set nu #添加行號
命令模式 G 到全文的最後
89行 workgroup = STAFF #指定工作組名
[common] #指定共享名
path = /common #指定共享文件夾的實際絕對路徑
echo -e "[common]\n path = /common" >> /etc/samba/smb.conf
5.重起smb服務,刷新配置
# systemctl restart smb #重起服務
#systemctl enable smb #設置為開機自起 SELinux策略:布爾值
(所服務功能的開關,只有開和關兩種狀態,類似性別只有男女)
SELinux對跨平臺軟件特別把控,如Samba,通常情況都是關關關!!!
– 需要加 -P 選項才能實現永久設置
1. 查看samba 布爾值
# getsebool -a | grep samba
2.修改SELinux策略的布爾值
# setsebool samba_export_all_ro on
3. 查看samba 布爾值
# getsebool -a | grep samba
至此客戶端已經搭完。
客戶端虛擬機Desktop:
1.安裝客戶端軟件,訪問samba共享
# yum -y install samba-client
2. 查看服務端samba共享,目的看 共享名
# smbclient -L //172.25.0.11
Enter root‘s password: #直接敲回車
Sharename
common
3.以harry身份,訪問服務端samba共享
#smbclient -U harry //172.25.0.11/common
Enter harry‘s password: #輸入密碼
Domain=[STAFF] OS=[Unix] Server=[Samba 4.1.1]
smb: \>
客戶端虛擬機desktop
使用 mount 掛載訪問 (臨時掛載)
所需軟件包:cifs-utils #支持cifs協議
# yum -y install cifs-utils
#mkdir /mnt/samba
#mount -o user=harry,pass=123 //172.25.0.11/common /mnt/samba/
#df -h
開機自動掛載
_netdev : 網絡設備 (掛載網絡設備時必給的參數)
先啟動網絡服務,具備網絡參數後,再進行掛載
#yum -y install cifs-utils
#mkdir /mnt/samba
#vim /etc/fstab
//172.25.0.11/common /mnt/samba cifs
defaults,user=harry,pass=123,_netdev 0 0
(思路:文件系統cifs,參數要加用戶名密碼和網絡設備_netdev)
#mount -a
#df -h #查看是否掛載成功
讀寫的Samba共享
服務端虛擬機Server:
1.部署共享
# mkdir /devops
#echo nsd > /devops/test.txt
#ls /devops
#vim /etc/samba/smb.conf #修改配置文件
#追加寫入
[devops] #共享名
path = /devops #路徑為/devops
write list = chihiro #允許chihiro用戶可寫
#systemctl restart smb
2.修改SELinux策略(布爾值)
#getsebool -a | grep samba
#setsebool samba_export_all_rw on
#getsebool -a | grep samba
3.用戶本身的本地權限
(所有服務都有個用戶判定機制,Samba最簡單,以誰登陸判定為用戶為誰,再判定該用戶對該目錄的權限)
# setfacl -m u:chihiro:rwx /devops (單獨為這個用戶設置權限)
# getfacl /devops
# ls -l /devops
客戶端虛擬機desktop
1.實現開機自動掛載
# mkdir /mnt/pub
#vim /etc/fstab
//172.25.0.11/devops /mnt/pub cifs
defaults,user=chihiro,pass=123,_netdev 0 0
# mount -a
#df -h
總結:客戶端訪問服務端資源(排錯)
1.服務本身的訪問控制(開關狀態)
2.本的目錄的權限 (對於客戶端的用戶權限判定)
3.防火墻 (默認區域)
4.SELinux (狀態)
Samba服務掛載mount -a 時出現permission dnied 而其他均為出錯時,
檢查配置文件中的驗證用戶是否為共享賬號用戶,可能該用戶不在列表中
用pdbedit -L 檢查配置文件中的用戶是否為共享賬號用戶
multiuser機制,專門為普通用戶設計,專為客戶端設計
– multiuser,提供對客戶端多個用戶身份的區分支持
– sec=ntlmssp,提供NT局域網管理安全支持
必要的時候,任何普通用戶都可以通過命令切換成權限較大的用戶
來臨時獲取寫的權限
配置文件參數: //172.25.0.11/devops /mnt/pub cifs defaults,user=kenji,pass=123,_netdev,multiuser,sec=ntlmssp 0 0
配置NFS共享, Linux與Linux的共享(能ping通即可搭)
Network File System,網絡文件系統
– 用途:為客戶機提供共享使用的文件夾
– 協議:NFS(TCP/UDP 2049)、RPC(TCP/UDP 111)
只讀的NFS共享
服務端虛擬機server
1.所需軟件包 : nfs-utils
rpm -qa | grep nfs #顯示所有已安裝,進行過濾
rpm - q nfs-utils
2.NFS共享主配置文件/etc/exports
vim /etc/exports
/nsd *(ro) #共享目錄路徑 *(所有網段客戶,可設置網段) 客戶端(權限)
echo "/nsd *(ro)" >> /etc/exports
3.重起nfs服務,設置為開機自起
systemctl restart nfs-server
systemctl enable nfs-server
客戶端虛擬機Desktop
永久用:vim /etc/fstab
172.25.0.11:/nsd /mnt/nfs nfs defaults,_netdev 0 0
mkdir /mnt/nfs
mount -a
df -h
臨時: showmount -e 172.25.0.11
mount 172.25.0.11:/nsd /mnt/nfs
Linux學習階段性總結2