关于文件系统权限的管理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于文件系统权限的管理相关的知识,希望对你有一定的参考价值。

关于文件系统权限的管理

众所周知的是,一个操作系统,是需要为不同的用户进行服务的,因为不能让每个人都以管理员进行操作,这样做的话,毫无安全性可言,所以我们需要验证和授权。这就体现了权限的重要性,上一篇我介绍了,那几个重要的目录。所以这就步入系统权限的正题了。


文件系统的权限管理:
    普通权限
    特殊权限
    文件的扩展属性
    FACL(文件系统访问控制列表)



文件权限的构成:
    使用权:MODE,permission
        三个基本权限:
            r:readable,可读
            w:writable,可写
            x:executable,可执行


        目录文件
            r:可以使用ls命令获取其中所包含的所有文件的文件名列表;
            w:可以在此目录中进行文件名修改(创建,删除,修改);即:可以创建文件名,删除文件名及修改文件名;
            x:可以使用ls -l命令查看各个文件的属性信息;在路径中引用该目录;

        非目录文件
            r:可以利用cat类的命令获取文件中存放的数据信息;
            w:可以修改(添加,修改,删除,覆盖)文件中所存放的数据信息
            x:可以将文件发起为进程;

获取使用权和所有权的相关信息:
    ls -l[d] /PATH/TO/SOMEFILE

[[email protected] ~]# ls -l /tmp/test
总用量 0
-rw-r--r--. 1 root root 0 11月  1 19:32 a
-rw-r--r--. 1 root root 0 11月  1 19:32 b
-rw-r--r--. 1 root root 0 11月  1 19:32 c
-rw-r--r--. 1 root root 0 11月  1 19:32 d
-rw-r--r--. 1 root root 0 11月  1 19:32 e
-rw-r--r--. 1 root root 0 11月  1 19:32 f

rwxr-xr-x:三个权限位(属主/所有者,属组/所属组,其他用户)
    属主权限:rwx,此权限位标识为user,简写u;
    属组权限:r-x,此权限位标识为group,简写为g;
    其他用户权限:r-x,此权限位标识为other,简写为o;

    所有权限位可以统一用all标识,简写为a;

    注意:"-"表示在该权限位上不具备指定权限;

    rwx组合称为"权限标识三元组";


    数字权限标识:二进制数字标识,在对应权限位上有权限则为1,无权限则为0;

    ---:000        0
    --x:001        1
   -w-:010        2
   -wx:011        3
    r--:100        4
    r-x:101        5
   rw-:110        6
   rwx:111        7

    使用符号标识权限和数字表示权限的区别:
        1.使用符号标识法可以只标识某个特定的权限位,也可以同时标识所有的权限位;
            示例:
                u=rx;ug=rwx;u=rwx,g=rx,o=r;a=rwx
        2.使用数字标识法只能同时标识所有权限位;
            示例:
                755;644;7 == 007; 75 == 075

修改文件的使用权:
    chmod - change mode
    格式:
        chmod [options]... mode[,MODE] file...
        chmod [options]... OCTAL -MODE FILE..
        chmod [options]... reference=RFILE FILE...

    MODE:符号权限标识法:
        u,g,o,a:表示权限位;
        +,-,=:表示授权方式;
            +:表示在指定的权限位上增加指定权限;如果新增的权限是已经存在的权限,则结果相比较啊授权之前无变化;
            -:表示在指定的权限位上撤销指定权限;如果撤销的权限并不存在,则结果相比较啊授权之前无变化;
            =:表示在指定的权限位上精确授权;此种授权方式不考虑该权限位原有的权限设定;
        r,w,x:表示具体的权限;

        注意:
        chmod +|- r|x FILE :在所有者的权限位上增加或撤销读或执行权限;
        chmod +|- w FILE:仅在所有者权限位上增加或撤销写权限;

        注意对于文件来说,执行权限是非常重要的安全上下文标识;因此默认情况下,所有的非目录文件都不应该有执行权限;一旦非目录具有了执行权限,则意味着该文件可以被执行,发起为进程,则可以按需使用系统资源。

    OCTAL-MODE:八进制权限位标识位;

    reference=RFILE:

    # chmod --reference=/etc/shadow root.txt
        依照shadow文件的权限位来设置root.txt相同的权限;

    常用选项:
        -R,,递归的设置目标文件或目录的权限;

修改文件的所有权;
    chown
        chown - 修改文件所有者和组别
        格式:
            chown [option] [OWNER][:[group]] file...
            chown [option] reference=RFILE FILE...

            ~]# chown user3 tset1
            ~]# chown user3: tset2
            ~]# chown :user3 tset3
            ~]# chown user3:myuser tset4

            注意:在使用chown命令时,特别的,可以使用"."代替":"

            常用选项:
        -R,,递归的设置目标文件或目录的权限;

[[email protected] ~]# chown root. /home/yu
[[email protected] ~]# ls -l /home
总用量 4
drwx------. 14 root root 4096 9月  17 00:25 yu

            注意:对于文件来说,普通用户可以修改所有者为自己的文件的使用权,但无法修改文件的所有权;修改文件所有权的操作只有root可以完成;


    chgrp(不常用
            chgrp - 改变文件的组所有权
        格式:
            chgrp [option] group file...
            chgrp [option] reference=RFILE FILE...

        注意:chown和chgrp所指定的用户和组,既可以是用户名和组名,也可以是UID和GID;

    mkdir:
     -m MODE :在创建目录时为其指定权限;

[[email protected] ~]# mkdir -m 700 -pv /tmp/mydir
mkdir: 已创建目录 "/tmp/mydir"
[[email protected] ~]# ls -l /tmp
总用量 0
drwx------. 2 root root  6 11月  9 22:46 mydir

     install命令:复制文件并设置属性

         install [option] [-T]  source dest
             单源复制,为复制后的文件增加执行权限;
        install [option] source... directory
            多源复制,为复制后的文件增加执行权限;
        install [option] -d directory...
            创建目录;

        常用选项:
            -g group, --group=group
              设定目标文件的所属组为指定组,而不是进程所有者的主要组;
            -m mode, --mode=mode
                设定目标文件的权限,而不是rwxr-xr-x
            -o owner, --owner=owner
                设定目标文件的所有者,仅root用户可用;

        注意:install命令,不能复制目录,也不能以目录为源文件;如果其源文件是一个目录,则install命令会进入该目录,一次复制其中所有的非目录文件到达目标位置;

特殊权限:
    SUID,SGID,STICKY

    SUID:SUID仅设置在可执行的文件上。默认情况下,当用户执行此类可执行文件时,被发起的进程的所有者不是进程发起者,而是可执行文件的所有者;换句话说,进程以所有者的身份运行。

        SUID权限所显示的位置:文件的属主的权限位中的执行权限位上;如果属主本来就具有执行权限,则显示为“s”,如果本来没有执行权限,则显示为“S”

    管理SUID权限:
        1.符号标识法:chmod u+s FILE
        2.数字标识法:chmod 4755 FILE

[[email protected] ~]# chmod 4755 /tmp/mydir
[[email protected] ~]# ls -l /tmp
总用量 0
drwsr-xr-x. 2 root root  6 11月  9 22:46 mydir



    SGID:SGID可设置在可执行文件或目录的属组权限位的执行权限上。
            如果某个目录设置了SGID权限,并且对于某些用户有写权限,则所有在此目录创建的新文件和目录的所属组均为其父目录的所属组,而并非进程发起者的主要组;


            SGID权限的显示位置;文件的属组权限位上的执行权限上;如果属组本来就有执行权限。则显示为"s",否则,就显示为“S”;

        管理SGID权限:
            1.符号标识法:chmod g+s DIR
            2.数字标识法:chmod 2770 DIR

[[email protected] ~]# chmod 2770 /tmp/mydir/
[[email protected] ~]# ls -l /tmp/
总用量 0
drwsrws---. 2 root root  6 11月  9 22:46 mydir

    3.STICKY:仅设置在目录的其他用户权限位的执行权限上。
        如果在某个目录上的权限设置为多个用户都拥有写权限,那就意味着凡是拥有写权限的用户都能直接管理该目录中的所有文件名,包括改名文件及删除文件名等操作;因此需要在这样的目录上设置STICKY特殊权限;如果此类目录设置了STICKY,则所有用户即便拥有写权限,也仅能删除或改名所有者为其自身的文件;

        STICKY权限的显示位置:在目录的其他用户的权限位的执行权限上;如果该权限位本来有执行权限,则显示为“t”,否则,显示为“T”

        管理STICKY权限:
            1.符号标识法:chmod o+t DIR
            2.数字标识法:chmod 1777 DIR

[[email protected] ~]# chmod 1777 /tmp/mydir
[[email protected] ~]# ls -l /tmp/
总用量 0
drwsrwsrwt. 2 root root  6 11月  9 22:46 mydir


权限遮罩码:umask
    作用:在创建目录或文件时,被创建出来的目录或文件的默认权限上删除遮罩码上所对应的权限;

    注意:在创建目录或文件时,默认不设置特殊权限;

    对于目录文件:默认的权限为:0777-umask
    对于非目录文件:默认的权限为:0666-umask

[[email protected] ~]# umask
0022

    umask [OCTAL-MODE]

    默认设置遮罩码的文件:/etc/bashrc
        规则:如果用户的UID大于199并且用户的用户名和主要组的组名相同,则遮罩码为002;否则遮罩码为022;


文件的扩展属性:
    lsattr
        lsattr - 显示文件在Linux第二扩展文件系统上的特有属性

        格式:
            lsattr [ -RVadv ] [ files...  ]

    chattr
        chattr - 修改文件在Linux第二扩展文件系统(E2fs)上的特有属性

        格式:
            chattr [ -RV ] [ -v version ] [ mode ] files...

            mode 可以是:+-=[ASacdisu]


            a:在向文件写数据时,只能以附加的方式进行写操作;文件的内容不能被更改和删除;一般会为日志文件设置此属性;
            A:atime,文件的访问时间戳控制属性;对于并发访问量较大或者并发访问频率较高的文件,应该设置此属性以降低IO成本,防止IO瓶颈;
            c:设置是否自动压缩之后在存储;
            C:是否开启“写时复制”
            d:使用dump备份文件系统时,跳过属性设置为d的文件;
            D:设置文件在文件系统中的异步写操作;
            i:设置文件不能被删除,改名及设定链接关系;
            s:设置文件的保密性删除;
            u:与s属性相反,如果此类文件被删除,则在存储器中会继续保存其内容;


FACL:
    Filesystem Access Control List,文件系统访问控制列表;
    想要应用此功能,必须让文件系统能够支持;

    FACL为文件系统的额外赋权机制:

    在原有的u,g,o权限位之外,让普通用户能够控制权限赋予另外的某个指定的用户或组的一种赋权机制;

    这种机制在centos或者RHEL7之后的发行版本中才逐渐成熟;

    与FACL相关的命令:
        getfacl
            getfacl - get file access control lists
            格式:
                etfacl [-aceEsRLPtpndvh] file ...


        setfacl
            setfacl - set file access control lists
            格式:
                setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ...
                setfacl --restore=file

            常用的选项:
                -m acl_spec:为指定文件设置acl_spec;
                -x acl_spec:将acl_spec从指定文件上移除;

                acl_spec:acl_specification, acl规格,访问控制列表;
                    u:USERNAME:MODE
                    g:USERNAME:MODE

                    MODE一般是使用符号权限标识法标识的权限;

            示例:

                为文件赋予指定用户的额外访问权限:
                setfacl -m u:USERNAME:rwx /PATH/TO/SOMEFILE/

                撤销指定用户的额外访问权限
                setfacl -x u:USERNAME /PATH/TO/SOMEFILE/

            注意:如果设置了FACL之后,在修改目标文件的使用权限,那么FACL中设置的权限条目可能受到影响而导致授权失败


还有一些小实验:

    背景描述:xiaoqiang、wangcai和tangbohu三个用户的基本组都是与用户名相同的组,但是他们都以qiuxiang组为附属组;

 

[[email protected] ~]# groupadd qiuxiang
  [[email protected] ~]# useradd -G qiuxiang xiaoqiang
  [[email protected] ~]# useradd -G qiuxiang wangcai
  [[email protected] ~]# useradd -G qiuxiang tangbohu

1.当用户xiaoqiang对/testdir目录无执行权限时和无读权限时,分别意味着xiangqiang无法完成哪些操作?
  无执行权限意味着无法进入目录,不能访问;
  无读权限意味着读取目录,不能访问,不能查看;

2.当用户wangcai对/testfile文件只有写权限时,是否可修改和删除该文件?如果不能,那么wangcai能够对该文件做哪些操作?
  不修改该文件,不可以删除该文件。
  可以修改(添加,修改,删除,覆盖)文件中所存放的数据信息;

3.如果用户tangbohu在/tmp目录中建立了一个目录mydir,他想要让wangcai和xiaoqiang这两个用户能够在该目录中创建、修改和删除文件,你能想到哪些办法来实现这个目的?
  1.修改其他人权限
   

[[email protected] root]$ mkdir -pv /tmp/mydir
    mkdir: 已创建目录 "/tmp/mydir"
    [[email protected] root]$ chmod 757 /tmp/mydir
    [[email protected] root]$ exit
    exit
    [[email protected] ~]# su xiaoqiang
    [[email protected] root]$ touch /tmp/mydir/a
    [[email protected] root]$ ls /tmp/mydir

    a
  2.修改组权限
   

[[email protected] root]$ chgrp qiuxiang /tmp/mydir
    [[email protected] root]$ chmod 775 /tmp/mydir

  3.利用su命令,临时使用root用户执行。

二、操作:
1.复制/etc/fstab文件到/var/tmp下,同时设置文件属主为wangcai有读写权限,属组为xiaoqiang组有只读权限,其他人无权限,请写出命令;

  [[email protected] ~]# install -o wangcai -g xiaoqiang -m 740 /etc/fstab /var/tmp

2.不使用useradd命令创建用户xiaoming,该用户有如下属性:
    1) UID为8089;
    2) 主要组为xiaoming,gid为8089;
    3) 其用户全名为"Wang Xiaoming";
    4) 家目录在/home/xiaoming;
    5) 默认登录shell为/bin/bash;
    6) 密码修改之后5天内不能再次修改密码;
    7) 密码最多使用30天;
    8) 密码过期前3天开始提醒用户修改密码;
    9) 密码过期后,7天之内不会禁止用户登录;
     

[[email protected] ~]# echo "xiaoming:x:8089:8089:Wang XiaoMing:/home/xiaoming:/bin/bash" >>/etc/passwd
[[email protected] ~]# echo "xiaoming:x:8089:" >>/etc/group
[[email protected] ~]# cp -a /etc/skel /home/xiaoming
[[email protected] ~]# chmod  700 /home/xiaoming
[[email protected] ~]# chown  -R xiaoming:xiaoming /home/xiaoming
[[email protected] ~]# echo "xiaoming::5:30:3:7:::" >>/etc/shadow
[[email protected] ~]# passwd xiaoming
更改用户 xiaoming 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[[email protected] ~]# su xiaoming 
[[email protected] root]$

3.用户xiaoming在他自己的家目录中创建了一个文件project.plan,为了想要让wangcai用户能够读取到该文件的内容,xiaoming将/bin/cat文件复制到/tmp/xmcat,/tmp/xmcat只有属主xiaoming和wangcai用户能够执行;每次wangcai执行"[[email protected] ~]$ /tmp/xmcat ~xiaoming/project.plan"命令就能看到该文件的内容;
 

[[email protected] ~]# usermod -g 8089  wangcai
  [[email protected] ~]# su - xiaoming
  [[email protected] ~]$ touch project.plan
  [[email protected] ~]$ install -m 770 /bin/cat /tmp/xmcat
  [[email protected] ~]$ /tmp/xmcat ~xiaoming/project.




以上是关于关于文件系统权限的管理的主要内容,如果未能解决你的问题,请参考以下文章

我的Android进阶之旅关于Android平台获取文件的mime类型:为啥不传小写后缀名就获取不到mimeType?为啥android 4.4系统获取不到webp格式的mimeType呢?(代码片段

我的Android进阶之旅关于Android平台获取文件的mime类型:为啥不传小写后缀名就获取不到mimeType?为啥android 4.4系统获取不到webp格式的mimeType呢?(代码片段

ASP.NET MVC4.0+EF+LINQ+bui+网站+角色权限管理系统

03_[Linux操作系统]Linux的权限及权限管理

03_[Linux操作系统]Linux的权限及权限管理

Linux用户及权限管理