Linux学习阶段性总结2

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习阶段性总结2相关的知识,希望对你有一定的参考价值。

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其子文件都继承该目录的权限!
            实验结果:新建的也继承!
[[email protected] 桌面]# chmod -R o=rx /home/yanjie/
[[email protected] 桌面]# ls -ld /home/yanjie/yanjie1      继承
drwxr-xr-x 5 root root 51 4月   5 23:42 /home/yanjie/yanjie1
[[email protected] 桌面]# ls -ld /home/yanjie/yanjie111    继承
-rw-r--r-x 1 root root 0 4月   5 23:42 /home/yanjie/yanjie111
[[email protected] 桌面]# mkdir /home/yanjie/yanjie3       新建的
[[email protected] 桌面]# 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的主要内容,如果未能解决你的问题,请参考以下文章

linux系统iot平台编程阶段总结

Spring阶段性学习总结AOP编程入门学习之动态代理实现代码的优化

python学习阶段总结

APUE之对于系统中缺失的error.c文件的阶段性总结

代码笔记Java学习一阶段总结

学习结构总结-----第三版