1. 程式人生 > >Linux學習階段性總結2

Linux學習階段性總結2

權限 磁盤管理 腳本 SELinux策略

DAY06

權限 基本權限 附加權限(特殊權限) 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下父目錄和子目錄的屬組和權限沒有半毛錢關系(默認不繼承)
附加權限(特殊權限)

Set GID(必考題型)
附加在屬組的 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
  1. 查看服務端有那些共享文件夾
    #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/>mkdirhostname-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