权限及权限管理详解

    Linux操作系统的安全模型是三位一体的,每一个系统中的文件都有三类用户,三类用户分别为:

      ->属主(user:一般用u代替)

      ->属组(group:一般用g代替)

      ->其他用户(other:一般用o代替) 

    并且每一类用户都被定义了三种权限,分别是r(读权限)、w(写权限)、x(执行权限):

    ->r权限对于文本文件来说表示可以使用cat、more以及less等命令来查看文件的内容

        wKiom1fRarPQnw2BAAA6RRuSpTs842.png    

        wKioL1fRasHgjZHzAAAJF1iQP4Y672.png

      对于目录来说表示可以对此目录使用ls命令,但是不可以切换进此目录,也不能对目录使用ls -l命令

        注意:实验测试可以!

        wKiom1fRa7fAcjgGAAAiuplhBgs004.png

    ->w权限对于文本文件来说表示可以编辑这个文件,也可以删除这个文件

        wKioL1fRbFuyqPNdAAAzxmPsFDM118.png

      对于目录来说表示可以在此目录中创建文件

        wKiom1fRbRyy4l81AAAlGc2cmD8480.png

    ->x权限对于文本文件来说表示该文件可以被执行,即可以将该文件提交给内核来判断该文件的执行方式,并且将该文件运行起来,也就是由内核来启动一个进程

        wKiom1fRblXQ9SrUAAAlm-gGtAE592.png

      对于目录来说表示可以对此目录使用cd以及ls -l等命令来查看目录里面文件的详细的属性信息

        wKioL1fRbvuQYTVIAAArvHIAk_E684.png

·chown命令

    chown命令是一个改变文件属主与属组的命令,只有管理员才可以执行这个命令

    使用格式:chown [options] USERNAME file...

        不加任何选项表示将这些文件的属主改为该用户,对目录同样有效,但是不加选项表示只改变目录的属主,但是不改变目录里面相关文件的属主

            wKioL1fRcHTAwF9hAAA0Fa7KkWw936.png

            wKioL1fRcQODaPNQAABT2zT715o066.png

        -R选项表示,连同目录里面的文件的属主也一同修改

            wKioL1fRcfvjBslzAABpv-ahKlA399.png

        --reference(参考)=/path/to/file file...选项表示,reference后面跟的文件路径作为参考,将目标的文件的属主属组改为和参考路径一样

            wKiom1fRcyyBj-OwAABAwnZgnpo495.png

        chown命令还可以同时改变文件或目录的属主和属组,使用格式:

            chown USERNAME:GRPNAME file... = chown USERNAME.GRPNAME file...

                wKiom1fSCOKAxtUDAAAs9qaX1m0422.png

                wKiom1fSCR-yWMe6AAA-SWqaMbQ984.png

            并且支持-R选项以及--reference功能:

                wKioL1fSCcWS4izHAABmKNLdjGU099.png

             chown命令还可以只改变文件或目录的属组而不改变文件的属主,使用格式:

                chown :GRPNAME file... = chown .GRPNAME file...

                    wKioL1fSCxrT_HsbAABPbQiToGk705.png

                并且也同样支持-R选项:

                    wKiom1fSC4XxC_nVAABjSG8IVdw110.png

                    wKioL1fSC_ej5BM0AABj5hEj1YQ347.png

·chgrp命令

    chgrp是一个改变文件或目录的属组的命令,只有管理员才可以使用此命令:

        使用格式:chgrp GRPNAME file...

            wKiom1fSDLHRaenUAABakNguD34659.png

            支持-R选项:

                wKioL1fSDTvCEgrcAABg3F-a3w4110.png

            支持--reference功能:

                wKiom1fSDiXQbmjlAABVvEoCixw525.png

·chmod命令

    chmod(mod=mode->权限模型)是一个用来修改文件或者目录权限的命令

    修改文件或目录的权限分为三种情况:

        ->修改三类用户的权限

            使用格式:chmod MODE(三位数字权限,如果只写两位数字则第一位数字默认为0,如果只写一位数字则前两位数字为0) file.../dir...

            wKioL1fSD_qweCF8AAB3zy8ULwY751.png

         支持-R选项:

            wKioL1fSEGfxc-SgAABeTAjtKlM225.png

        支持--reference功能:

            wKioL1fSENDwFv4SAAA8wHqgyQA334.png

        ->修改某类用户或某些类用户的权限

            Linux的三类用户分别为u:属主,g:属组,o:其他用户,a:所有用户

            使用格式:chmod 用户类别=MODE(rwx),用户类别=MODE(rwx),... file.../dir... 

                如果用户类别所要赋予的权限相同的时候,可以将用户类别写在一起一并赋予权限,而不用将用户类别用逗号隔开,用户类别后面的等号什么都不写表示不赋予任和权限:

            wKiom1fSEs-xuJLtAABbOKjUN_w117.png

            wKiom1fSE0CQiLALAAAyMgPTPoA945.png

        ->修改某类用户的某位或某些位权限

            使用格式:chmod 用户类别+/-MODE(rwx),用户类别+/-MODE(rwx),... file.../dir...

            如果要给某些位赋予相同的权限,则可以将用户类别写在一起,并一并赋予权限,而不用将用户类别用逗号隔开

            wKioL1fSFXKhn-6VAACBs9kLNKg306.png

            也可以同时给三类用户同时赋予某位或某些位权限,使用格式:

                chmod a+/-MODE(rwx) file.../dir... = chmod +/-MODE(rwx) file.../dir..

                wKioL1fSForg4gNvAABwRGWESsk342.png

                wKioL1fSGBrCbVfiAABz9MPmYyU281.png

    练习:

        1,新建一个没有家目录的用户openstack

        2,复制/etc/skel到/home/openstack

        3,改变/home/openstack及其内部文件的属主属组均为openstack

        4,/home/openstack及其内部文件的属组和其他用户没有任何访问权限

        wKiom1fSGyOCng7MAACCAQbPXx0405.png

        以上就是我们创建一个新用户的完整过程,新建一个用户的时候,我们给用户复制家目录,即将/etc/skel目录复制为用户的家目录,并且还要将用户家目录的属主和属组都改为用户和用户的基本组,并且还要改变用户家目录的权限,使得除了属主之外,属组和其他用户不能有任何访问权限,最后还要给用户一个密码

练习:

    纯手动创建一个用户hive,并且使得用户hive的基本组为hive(5000),附加组为mygroup

        1,首先在/etc/passwd文件中新加一个hive条目,表示命令新添加一个hive用户

            wKiom1fSH6iyIFHXAAAQoLX-ocA496.png

        2,在/etc/group文件中按题目要求添加一个基本组hive,并且gid=5000,还得有一个附加组mygroup

            wKioL1fSIBiAPwNZAAANC-jV4OU016.png

        3,在/etc/shadow文件中添加用户的账号属性条目

            wKiom1fSIFyjt0fWAAAJg_Vzi6Q746.png

            上图中的!!表示密码待添加的意思

        4,我们可以使用id命令来检验我们刚刚的改动是否生效了

            wKiom1fSINay7yfqAAAjREFP1HY317.png

            看来是生效了

        5,我们还可以使用openssl命令将用户的加密密码写入/etc/shadow文件中

            wKioL1fSITTDt0hoAAAduHFuzHE656.png

            openssl passwd -1(指定加密算法) -salt '指定字符'命令在指定用户的密码的时候可以生成用户的加密密码,从而我们可以将该加密密码写入/etc/shadow文件中从而指定了用户的密码,我们输入的salt一样,指定的密码也一样的情况下,加密密码即输出一定一样,这就是我们的单向加密,所谓的提取数据的特征码

        6,将生成的加密密码写入/etc/shadow文件中

            wKiom1fSIkLQVWK6AAAWA4VJo-E422.png

            上图中的0表示不限定密码的最短使用期限

            99999表示不限定密码的最常使用期限

        7,接下来就是给用户复制家目录,并且改变用户家目录的属主属组以及家目录的权限

            wKiom1fSIrnSNR6IAABK4q_RsL0364.png

    温故:date+%s命令表示从计算机元年到此刻所经历的秒数,一天是86400秒,bc是系统自带的计算器,quit可以退出bc计算器

        wKiom1fSI5qBGuLDAABHhzubYBM470.png

        结果是17053,这就是为什么我们/etc/shadow文件中的上次修改密码时间得字段显示的是17053天的原因,bc计算器默认的计算结果是圆整的,如果要使得计算结果带精度,则可以使用scale=#来指定精度,#表示保留#位的精度:

        wKiom1fSJEaA3NXLAAA7oIjaEVY881.png

·Linux的内在法则

    文件默认都没有执行权限,如果文件不小心有了执行权限,Linux会自动给拥有文件执行权限的用户类别的权限加1

·umask

    umask:遮罩码,系统的默认权限

        对于用户来说新建一个文件的默认权限就是666-umask,新建一个目录的默认权限就是777-umask,umask命令不加任何选项表示显示当前用户的umaks:

        wKiom1fSJjPQr6IuAABFWlWfaPE625.png

      umask命令还可以用来设定umaks:

         wKiom1fSJ3vhGl9NAAAqbm7PSJo685.png   

      不过这种设定方式是临时的,重启主机之后还是会恢复为原来的umask

      在权限的计算中,6-7不等于-1而等于0:

        wKioL1fSKVvi0r4XAAAZ1WbSn5s611.png  

·用户的登录

    我们的用户在登录系统之后,事实上系统就给用户打开了一个shell,shell本身是一个可执行程序,也就是一个软件,程序的配置属性是在其配置文件当中的,站在用户的角度来讲shell分为两类:

    ->登录式shell

        正常通过某终端登录的shell,使用su - USERNAME或者su -l USERNAME命令切换过区的shell也被称为登录式shell

    ->非登录式shell

        使用su USERNAME命令切换过去的shell称为非登录式shell,在图形终端下打开的命令窗口也称为非登录式shell,自动执行的shell脚本也被称为非登录式shell

    在讨论shell之前我们先来讨论一下bash的配置文件,bash的配置文件按作用范围可以分为:

    ->全局配置

        全局配置文件都有/etc/profile、/etc/profile.d/*.sh以及/etc/bashrc,我们编辑这些文件中的任何一个都会对系统中的每一个用户都生效

    ->个人配置

        个人配置文件都有~/.bash_profile以及~/.bashrc,我们编辑这些文件中的任何一个只会对当前用户生效

    bash的配置文件按照类型来分,也可以分为两类:

      ->profile类的文件

        profile类文件的作用:

        1,设定环境变量

            如果我们设定的环境变量在全局配置和个人配置中都存在的话,那么以个人配置中的设定为准,即作用范围越小的越是最终生效的,这种法则在以后的很多配置中都是成立的

        2,运行命令或脚本

            比如我们可以在用户登录系统之前,执行一些脚本,做一些准备工作:

                wKioL1fSLdLjkSTqAABDMl0aqBQ744.png

                wKioL1fSLdzwxVEJAAAaxGzaZTU678.png

        3,可以设定umask

            

      ->bashrc类的文件

        bashrc类的文件的作用:

        1,用来设定本地变量

            本地变量和环境变量的作用域不同

        2,用来定义命令别名

            wKioL1fSt2bQnwYbAAArk51TUHs378.png

    我们的登录式shell读取这些配置文件的顺序是:/etc/profile->/etc/profile.d/*.sh->~/.bash_profile->~/.bashrc->/etc/bashrc,非登录式shell读取这些文件的顺序是~/.bashrc->/etc/bahsrc->/etc/profile.d/*.sh,我们的su - USERNAME命令被称为完全切换,su USERNAME被称为半切换,因为它不读取用户的环境设定文件,bash也被称为脚本的解释器