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 

原文地址:http://blog.51cto.com/13659481/2103771

时间: 2024-10-16 01:43:40

Linux学习阶段性总结2的相关文章

linux学习之路之LVM

试想一种情况,当初我们在规划磁盘的时候,只给某一个磁盘或分区之划分了30G的容量,但是后来,随着业务的需求,该磁盘或者分区的使用量会越来越大,等到以后再有数据存放时,发现该磁盘或者分区的容量不够用,此时该怎么办了?可以新增一个磁盘,经过格式化,挂载等过程就可以使用这个磁盘了,再将原来磁盘的数据完全的复制过来.等到后来又发现,规划的磁盘又太大了,然后又使用上述方法来减少磁盘的大小.虽然这种方法可行,但是效率低,比较复杂.不应该是我们首选的方法. 当然,我们可以这样做,将多个磁盘或者分区(PV)组合

Linux学习日志2-vim使用基础

vim是linux操作系统下的一个文本编辑工具,功能非常强大,但刚学习起来比较复杂.vim的所有功能要讲明白得有几百页,在这里只是记录一下vim的一些基本用法. 首先vim打开文件的三种方式: vim +# xxx(#是数字):表示打开xxx文件并将光标定位到指定行. vim -o xx1 xx2 xx3:表示同时打开三个文件,垂直分割显示 vim -O xx1 xx2 xx3:表示同时打开三个文件,水平分割显示 多个文件间跳转:键入ctrl+w后:→向左.←向右.↑向上.↓向下 vim打开文件

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; linux &nbsp; &nbsp; 学习 &nbsp;

决心书 我叫孙启浩,出生在山东淄博的一个农村.15岁初中还没有毕业,就去上了技校,其实父母是想让我提早的步入社会,我在那个地方学的是'电厂热能动力装置' 本来我是想学it的可是我父母说就学这个因为在我们那里电厂找工作也好找工资肯定比学it工资要高,我就这样在那个对我来说无所谓的学校学了两年半.放暑假的时候我哥回来说要进京学it,我就想要不我也去学?因为我对这个it还是挺感兴趣的,之后就来了北京,先去看了一个学校叫'八维'觉得这个学校不怎么好,上来先学单词什么的我这种人一看书就想睡觉.然后我父亲的

linux学习笔记(一)-文件目录相关的命令&&文件通配符

一.几个命令概述 1.查看目录以及目录底下的文件:ls(-a显示隐藏文件:-d显示目录本身:-l显示详细内容:-R递归显示,即把子目录的文件也显示出来:-h以更加被人类理解的格式显示,比如显示文件大小的时候用M为单位显示:-i显示文件索引ID) 2.查看文件内容:cat,head,tail,less,more,tac cat:将文件连接起来,输出在屏幕上,可接多个文件(-E:显示隐藏的换行符:-n:显示出行号) head:默认查看文件的前10行(-n#:查看文件的前#行.空白行也是一行) tai

Linux学习日志day1——无人值守系统安装DHCP+TFTP+PXE+Kickstar

Linux学习日志day1--无人值守批量系统远程网络安装(DHCP+TFTP+PXE+Kickstar)                                         --作者:江信瀚 服务器环境介绍: 主机名:workstation.example.com 关闭SElinux以及防火墙 虚拟机:VMware(关闭了VMware的DHCP服务) 网卡配置: 静态IP获取! IPV6全部都删除,因为根本用不到 子网IP可以在VMware中设置 8.8.8.8是谷歌的DNS服务器

linux学习-练习1

touch 创建多目录 ls查看当前目录下的所有隐藏文件 ls查看/boot目录下面的所有目录 帮助的使用 内部命令 用 help command   或  man bash 外部命令 用 command --help 或  command -h 使用手册 man 信息页 info date命令: 显示昨天 : date -d yesterday 显示前天 : date -d '-2 day' 显示当天 :  date -d '0 day' +%F 显示当前日期,格式:2016-08-08 显示

51CTO学院三周年,我的linux学习思想分享

51CTO学院三周年了,我也关注学院三周年了,在51CTO的平台上,让我学到了很多的东西,也交到了很多朋友,每当你发一篇博文,总会有些志同道合的小伙伴们去点赞,甚至还会有大神高手,去指出你分享内容里面的不足.在和这些虚拟的未曾相识的朋友们的交流中我的技术得到了提高,时光荏苒,一晃都三年了. 首先我要感谢51CTO做的一个关于技术的分享平台,经过大家的分享,里面的博客已经非常丰富了,很多优秀的文章可以供我们去学习和分享.我是一名运维工程师,从事运维工作已经3年多了,每天上班的第一件事情就是登上我的

linux学习之centos(三):网卡配置

Linux系统版本:Centos 6.5 在linux学习之centos(二):虚拟网络三种连接方式和SecureCRT的使用中,使用远程工具SecureCRT,通过“ifconfig eth0 + 具体的ip地址”命令给linux配IP地址,但是这种配置方式存在以下问题: 只能临时生效,一旦重启,需要重新配置: 只能配置ip地址和子网掩码,可以连接内网,是无法连接外网的. 如果想要连接外网,ip地址.子网掩码.网关.DNS缺一不可. 如何真正的给CentOS配一个ip,而且设置成功后,通过使用

Linux学习 -- Shell基础 -- 概述

Shell是什么? 命令解释器 编程语言 Linux支持的Shell类型 cat /etc/shells 主要学习 bash 脚本执行方式 echo echo -e 单引号 -- 原始字符串  双引号 -- 支持转义字符串 \e[1;31m xxx  开启颜色 \e[0m    关闭颜色 首行:#!/bin/bash #写好注释 执行方式: 方式1 sh xxx.sh 方式2 chmod 755 xxx.sh  ./xxx.sh 或 绝对路径 Linux学习 -- Shell基础 -- 概述