对Linux的权限管理的认识

   Linux/GNU有一句广为流传的话就是“Linux的一切都是文件”,系统的运行就是内核创建一系列进程来调用文件完成用户下达的任务。且Linux/GNU系统作为一个多用户多任务的操作系统,如何来管理各个用户及他们所创建的任务,就是一个软件工程,他的架构设计可以参考我们的社会结构,毕竟我们的社会先于软件工程发展了几千年,直到上世纪50年代后软件工程的硬件基础发展起来,它的依赖关系满足后自然就发展出来了(当然在软件系统中我们可以更少受一些不必要的社会规则的掣肘,更理想化)。软件工程以所有用户的长远利益着想,最高目标是稳定高效不宕机崩溃,杜绝以不可控的崩溃来实现重启,出现这种情况,最受伤的是普罗大众。
         在社会中,我们每个自然人都是一个公民,有自己的家庭,家庭成员就构成了一个基本的用户组,每户家庭又组成更大一级的国家,每个国家又组成一个地球村(这是单从家庭的的维度解释的用户与用户组的概念)。当然我们还有自己的职业,工作在不同的岗位,为系统的可持续运行发展贡献自己的力量,我们就又分属于公司的这个用户组,所以单个用户可以属于多个用户组。.在单个用户组中,用户对系统管理员或者上级组管理员分配给自己的资源而创造的文件拥有可支配的一切权限(r,w,x),他可以对除自身意外的其他用户及组成员设置相关权限。现主要讲以下几点:
     1.Linux文件权限的概念
         在各个Linux/GNU发行版中,登录系统,执行“ls -al”命令!,会看到如下内容:
    ![](http://i2.51cto.com/images/blog/201807/28/7061e301016211f4f71d42719cb653cf.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
         主要讲图中第一列,第一列有10个字符,可分为4组。第一组为第一个字符,接下来每三个字符为一组。
         1).第一个字符代表这个文件的类型
            若是【d】,则是目录(directory),例如上图中的后两行;
                若是【- 】,则是文件,例如上图中中间的4行;
                若是【l】,则表示为链接文件;
                若是【b】,则表示设备文件里面的可供存储的接口设备;
                若是【c】,则表示为设备文件里的串行端口设备,例如键盘,鼠标。
         2).后三组都是“r,w,x”3个参数的组合,【r】代表可读(read),【w】代表可写或修改(write),【x】代表可执行(excute)。这三个权限的位置不会改变,如果没有权限,就会出现减号【-】。
           第一组为“文件所有者的权限”,以“.cshrc”那个文件为例,该目录的所有者可读写但不可执行;
             第二组为“同用户组的权限”,以同一个文件为例,该文件对同组的其他用户可读不可写(修改)且不可执行;
             第三组为“其他非本组用户的权限”,以同一个文件为例,该目录对非本组用户也是可读不可写(修改)且不可执行;
             *Linux文件权限的设置对系统的数据安全有很大的作用,比如说自己家里你不希望小偷随意出入带走你的财产,就算是熟人来家里做客,你也不会让他随意改动家具摆放吧。还有关于系统服务的文件通常只有root用户才能读写或执行,例如/etc/shadow这个存放账号管理信息的文件,由于该文件记录了你 系统中所有用户账号的数据,当然不能让任何人读取(否则密码会被窃取埋下安全隐患),所以该文件的权限就会是【-rw-------】,只有root才能够来读取。
       2.文件默认权限与改变文件的属性与权限
             同样的,公民或用户可以按照需要,灵活改变自身属下的文件属性或创建新的文件,比如加入(创建)了另一个组 ,就像换工作了或者结婚组建新的家庭。Liunx系统下为了方便用户的创建操作,会对新文件设置一个默认的权限。比如,普通文件不会给执行权限(x),出于安全考虑,防止下载的不明文件(计算机病毒)自动执行;目录文件会给执行权限,方便用户进入查看,但不给写(w)权限,以免目录被乱改。    一个文件的属性与权限有很多,先介绍几个常用与用户组、所有者、各种身份的权限的修改的命令:
             1).chgrp:change group,改变用户所属用户组;
             2).chown:change owner,改变文件所有者;
             3).chmod:change mode,改变权限;  
               1)).数字类型改变;
                      Linux文件的基本权限有9个,分别是owner,group,others三种身份各自的r、w、x权限。我们用数字来代表各个权限:r=4,w=2,x=1,各种身份各自的三个权限的分数累加,就可以得到一个代表文件权限的三位数,比如777,即该文件对属主、属组、其他用户都是开放r,w,x权限的。
               2)).符号类型改变;
                        我们可以用u,g,o来分别代表三种身份权限,此外用a(all)代表全部的身份,读写执行的权限可以写成r、w、x,那么可以用以下例子表示:u=rwx,g=rx,ug=rx,a=rx等。
        3.特殊权限
          系统中总会有一些事物无法用基本权限限定,有的是出于安全考虑做必要的隔离,比如其他用户对/user/bin/passwd的访问权限设置;或者是公共空间的自律要求,比如在/tmp这个系统存放临时文件的目录,某用户对其他用户创建的文件有何访问权限呢?特殊权限有SUID,SGID,SBIT:
             1).SUID
             2).SGID
             3).SBIT:Sticky Bit
                SBIT只针对目录有效,主要在/tmp目录应用,或者其他工作组的共享文件目录。SBIT的主要作用是:
                    1)).当前用户对此目录具有w,x权限,即具有写入(修改)的权限时;
                    2)).当前用户在该目录下创建文件或目录后,只有自己和root才有权利删改该文件。
                这就和社会的公共空间一样,本来各个用户都有权限对其他用户的文件进行删改,但是要避免某些用户对其他用户的恶意操作,维护全体用户的最大化利益,我们需要对公共空间内的用户创建的文件加以保护,另设SBIT权限。
                SUID/SGID/SBIT权限设置
                 参考之前权限修改的方式,也分为数字式和字符式:
                 1).数字式
                   数字式更改权限的方式为“三个数字”的组合,如果在三个数字的前面再加上一个数字的话,最前面的那个数字就可以表示这几个权限了;
                     4为SUID,2为SGID,1为SBIT
                 2).字符式
                  SUID为u+s,SGID为g+s,SBIT为o+t

        以上就是我对Linux文件权限管理的一定简单认识,希望对大家有所帮助。

猜你喜欢

转载自blog.51cto.com/13886271/2151865