zoukankan      html  css  js  c++  java
  • 🔑 权限管理

    一、基本权限

    1.权限介绍

    权限类型

    • r:可读权限==>4
    • w: 可写权限==>2
    • x: 可执行权限==>1

    权限归属

    • 属主:u
    • 属组:g
    • 其他人:o

    例如:

    [root~]  ls -l a.txt
    -rw-r--r-- 1 root root 1146 Jul 16 18:42 a.txt

    文件类型

    • -:文本文档
    • d:目录
    • b:设备block
    • c:字符设备
    • s:套接字文件
    • l : 软连接

    2.设置权限

    修改属主、属组

    [root ~]# chown alice.hr file1 # 修改属主,属组
    [root ~]# chown alice file1 # 只改属主
    [root ~]# chown .hr file1 # 只改属组
    [root ~]# chown -R /test #  递归修改

    修改u、g、o、对应的权限

    # 加减法
    chmod u+x,g-w,o+r a.txt
    # 赋值法
    chmod a=rwx a.txt
    chmod a=- a.txt
    chmod ug=rw,o=r file1
    # 数字法
    chmod 644 file1
    chmod -R 777 xxx/

    :把某一个非属主用户添加到文件的属主里,他就拥有了该组的权限,而不是其他人

    3.权限对文件or目录的意义

       文件:ls -l 文件名

    • r  :可以读cat读取文件内容
    • w :可以修改文件
    • x : 可以执行文件代码,如果该文件的代码是编译好的结果,那么只有x权限即可执行,但如果该文件的代码是一个解释型的脚本文件程序,则需要配合r权限才可以执行

      目录:ls -dl 文件名

    • r : 可以ls浏览文件下的内容
    • w: 可以在目录下创建新文件or目录
    • x :可以执行目录下的程序,除了对目录有执行权限外,还要对程序文件有执行权限才行

                    可以在正常切换到目录下

                    涉及到多层目录   如/a/b/c,需要对每一级都有x权限才可以正常走到下一级

    例:要想在目录下创建删除内容:对目录的x权限+对目录的w权限
    # 设置权限 [root ~]# mkdir -p /a/b/c [root ~]# chmod -R o=x /a #其他人o 对当前目录及其子目录都有x权限 [root~]# chmod o+w /a/b/c # 其他人o对/a/b/c目录有w权限 #查看权限 [root~]# ls -dl /a drwxr-x--x 3 root root 4096 Aug 11 16:24 /a [root~]# ls -dl /a/b drwxr-x--x 3 root root 4096 Aug 11 16:24 /a/b [root ~]# ls -dl /a/b/c drwxr-x-wx 2 root root 4096 Aug 11 16:25 /a/b/c #验证 [root ~]# su - gg Last login: Tue Aug 11 16:17:28 CST 2020 on pts/2 [gg ~]$ touch /a/b/c/1.txt [gg ~]$ exit logout [root~]# ls /a/b//c/ 1.txt


    例:要浏览目录下内容:对目录的x权限+对目录的r权限
    [root ~]# mkdir -p /a/b/c
    [root ~]# chmod -R o=x /a
    [root ~]# chmod o+r /a/b/c
    [root ~]# touch /a/b/c/{1..3}.txt
     
    [root ~]# su - gg
    Last login: Tue Aug 11 16:27:33 CST 2020 on pts/2
    [gg ~]$ ls /a/b/c
    1.txt 2.txt 3.txt
     
    例:要浏览目录下内容:对目录的x权限+对文件的x权限,如果文件是解释型语言的脚本程序,还需要对文件有r权限
    [root ~]# mkdir -p /a/b/c
    [root ~]# chmod -R o=x /a/b/c
    [root ~]# cp /bin/echo /a/b/c
    [root ~]# chmod o=x /a/b/c/echo
    [root ~]#
    [root ~]# su - gg
    Last login: Tue Aug 11 16:30:17 CST 2020 on pts/2
    [gg~]$ /a/b/c/echo "hello coco"
    hello coco

    二、特殊权限

    1.SUID

    普通用户不是root也不属于root组,于是它对/etc/shadow文件没有任何权限

    [root ~]# ll /etc/shadow
    ---------- 1 root root 1109 Aug 11 16:11 /etc/shadow

    但普通用户可以用passwd命令修改密码,而修改密码都是在修改/etc/shadow文件,如何实现?

    [root ~]# ll `which passwd`
    -rwsr-xr-x 1 root root 27856 Aug 9 2019 /bin/passwd

    可以看到一个s权限,s权限的特殊之处

    • SUID 权限仅对二进制可执行文件有效
    • 如果执行者对于该二进制可执行文件具有x的权限,执行者将具有该文件的所有权限
    • 本权限仅在执行该二进制可执行文件的过程中有效

     

    [root ~]# ll `which cat`
    -rwxr-xr-x. 1 root root 54160 10์月31 2020/usr/bin/cat
    [root~]# chmod 4755 `which cat` # 或者 chmod u+s `which cat`
    [root ~]# ll `which cat`
    -rwsr-xr-x. 1 root root 54160 10์ 31 2018 /usr/bin/cat
    [root ~]# su - tom
    [tom~]$ cat /etc/shadow # 可以看到内容

    2.SGID

    • 当SGID作用于普通文件时,和SUID类似,在执行该文件时,用户将获得该文件所属组的权限
    • 当SGID 作用与目录时,意义就非常重大了:

    当一个用户对某一目录有写和执行权限时,该用户就可以在该目录下建立文件

    如果该目录同时用SGID修饰,则该用户在这个目录下建立的文件都是属于这个目录所属的组

    [root@localhost ~]# mkdir /test
    [root@localhost ~]# chmod g+s /test/ # 等同于chmod 2755 /test/
    [root@localhost ~]# ll -dl /test/
    drwxr-sr-x 2 root root 6 8月 11 17:06 /test/
     
    [root@localhost ~]# chown .coco /test/ # 后期任何人在该目录下创建的文件or目录的属组都是coco

    3.SBIT

    SBIT 目前只对目录有效,用来阻止非文件的所有者删除文件,常见就是/tmp目录

    [root@localhost ~]# ls -dl /tmp/
    drwxrwxrwt. 13 root root 4096 8月 11 17:09 /tmp/
    [root@localhost ~]# chmod o+t /test/ # 或者chmod 1755 /test

    权限信息中最后一位t表明该目录被设置了SBIT权限。SBIT 对目录的作用是:当用户在该目录下创建新文件或目录时,仅有自己和root才有权利删除,主要作用于一个共享的文件夹。

    三、umask

    新建文件、目录的默认权限是由umask决定的

    1、uid >199 并且属主与属主相等的用户下,umask :0002

    • 文件664
    • 目录775

    2、除1之外的其他用户下,比如root用户,umask :0022

    • 文件644
    • 目录755

    linux中文件默认权限为666、目录权限默认为777,在umask的影响下

    文件权限计算方法:偶数位直接相减,奇数位后相减后加1

     目录权限计算方法:直接相减即可

     结:umask设置越小,权限越大,慎用

    临时设置umask

    [root@localhost ~]# umask 000       设置umask权限

    永久设置

    root@localhost tmp]# vim /etc/profile #或者/etc/bashrc内容一样
    
    if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
     umask 002     表示uid大于等于199的默认umask值,表示普通用户
    else
     umask 022     表示uid小于199的默认umask值,表示root
    fi

     四、ACL

    用命令setfacl设置的ACL权限是UGO权限的扩展:

    setfacl命令可以用来细分linux下的文件权限。chmod命令可以把文件权限分为u,g,o三个组,而setfacl可以对每一个文件或者目录设置更精确的文件权限。换句话说,setfacl可以更精确地控制权限的分配。

    比如:让某一个用户对某一个文件具有某种权限

    这种独立于传统的u,g,o的rwx权限之外的具体设置叫ACL,ACL可以针对单一用户、单一文件或目录来进行r,w,x的权限控制,对于需要特殊权限的使用状况有一定帮助。

    >>ACL基本用法<<>>设置:

    [root@localhost ~]# touch /opt/a.txt
    [root@localhost ~]# chmod o=- /opt/a.txt
    [root@localhost ~]# ll /opt/a.txt
    -rw-r----- 1 root root 0 8์ 11 18:46 /opt/a.txt
    
    [root@localhost ~]# getfacl /opt/a.txt
    getfacl: Removing leading '/' from absolute path names
    # file: opt/a.txt
    # owner: root
    # group: root
    user::rw--
    group::r--
    other::---
    [root@localhost ~]# setfacl -m u:bobo:r /opt/a.txt
    [root@localhost ~]# setfacl -m u:tom:w /opt/a.txt
    # 验证
    [root@localhost ~]# su - bobo
    上次登录 :8月 11 18:47:27 CST 2020pts/1 上
    [bobo@localhost ~]$ cat /opt/a.txt
    big_bobo
    [root@localhost ~]# su - tom
    8月 11 18:40:21 CST 2020pts/1 上
    [tom@localhost ~]$ cat /opt/a.txt
    cat: /opt/a.txt: 权限不够
    [tom@localhost ~]$ echo small_bobo >> /opt/a.txt
    # 也就可以对组设置,设置的组合用户都必须存在
      [root@localhost ~]# setfacl -m g:group1:rx /opt/a.txt
      # 也可以给目录设置,都一样

    清除

    [root@localhost ~]# setfacl -x g:group1 /opt/a.txt # 删除组hr的 权限
    [root@localhost ~]# setfacl -b /opt/a.txt #删除所有acl权限

    >>>>>ACL高级用法<<<<<

    1.mask设置完mask后,除了所有者和other不受影响,其他都会受到mask的影响,mask决定他们的最高权限与mask权限按位与运算得到最终的权限

     

     建议为了方便管理文件权限,其他人的权限置为空chmod o= - /opt/a.txt

    1.保证其他人对/opt/a.txt没有权限,然后展开实验
    [root@bobo opt]# cat /opt/a.txt
    111
    [root@bobo opt]# chmod o=- /opt/a.txt
    [root@bobo opt]# ll /opt/a.txt
    -rw-r-----. 1 root root 4 10์ 29 19:33 /opt/a.txt
    
    
    2.添加acl权限
    [root@bobo opt]# getfacl /opt/a.txt
    getfacl: Removing leading '/' from absolute path names
    # file: opt/a.txt
    # owner: root
    # group: root
    user::rw￾group::r--
    other::---
    
    [root@bobo opt]# setfacl -m u:egon:rw /opt/a.txt # 其他人bobo对a.txt有rw权限
    [root@bobo opt]# setfacl -m u:lili:r /opt/a.txt # 其他人lili对a.txt有r权限
    [root@bobo opt]# getfacl /opt/a.txt # 可以看到mask默认值为rw-
    getfacl: Removing leading '/' from absolute path names
    # file: opt/a.txt
    # owner: root
    # group: root
    user::rw-
    user:lili:r--
    user:bobo:rw-
    group::r--
    mask::rw-
    other::---
    [root@bobo opt]# ll /opt/a.txt
    -rw-rw----+ 1 root root 4 10์ 29 19:33 /opt/a.txt
    [root@bobo opt]#
     
     
    按位与运算
    lili权限:r--
    mask权限:rw--
    lili๋最终权限: r--
    [root@bobo opt]# su - lili -c "cat /opt/a.txt"
    111
    222
    [root@bobo opt]# su - lili -c "echo 666 >> /opt/a.txt"
    -bash: /opt/a.txt: 权限不够
    
    bobo权限: rw-
    mask权限:rw-
    最终权限:   rw- 
    [root@bobo opt]# su -bobo -c "cat /opt/a.txt"
    111
    [root@bobo opt]# su - bobo -c "echo 222 >> /opt/a.txt"
    
    
    4.设置mask
    [root@bobo opt]# setfacl -m m:- /opt/a.txt
    [root@bobo opt]# getfacl /opt/a.txt
    getfacl: Removing leading '/' from absolute path names
    # file: opt/a.txt
    # owner: root
    # group: root
    user::rw-
    user:lili:r--            #effective:---
    user:bobo:rw-       #effective:---
    group::r--             #effective:---
    mask::---
    other::---
    [root@bobo opt]# su - egon -c "cat /opt/a.txt"
    cat: /opt/a.txt: 权限不够
    [root@bobo opt]# su - lili -c "cat /opt/a.txt"
    cat: /opt/a.txt: 权限不够
    
    ps:我们一般不更改mask权限,只赋予mask最大权限(也就是rwx),则给用户或群设定的ACl权限本身就是有效的

    2.default:继承(默认)要求:希望bobo能够对/home 及以以后在/home下新建的文件有读、写、执行权限

    思路:

            1.赋予bobo对/home读、写、执行权限[root@~] # set -m u: bobo :rwx: /home

            2.赋予bobo对以后在/home下新建的文件有读、写、执行权限(使bobo的继承权)

    注意是作用到子目录,对当前文件没有相应权限[root@~] # setfacl -m d:u:bobo:rwx:/home

    [root@bobo opt]# mkdir /test
    [root@bobo opt]# setfacl -m u:bobo:rwx /test
    [root@bobo opt]# setfacl -m d:u:bobo:rwx /test
    [root@bobo opt]# getfacl /test
    getfacl: Removing leading '/' from absolute path names
    # file: test
    # owner: root
    # group: root
    user::rwx
    user:bobo:rwx
    group::r-x
    mask::rwx
    other::r-x
    default:user::rwx
    default:user:bobo:rwx
    default:group::r-x
    default:mask::rwx
    default:other::r-x
    
    [root@bobo opt]# mkdir /test/aaa
    [root@bobo opt]# touch /test/b.txt
    [root@bobo opt]# getfacl /test/aaa/
    getfacl: Removing leading '/' from absolute path names
    # file: test/aaa/
    # owner: root
    # group: root
    user::rwx
    
    user:bobo:rwx
    group::r-x
    mask::rwx
    other::r-x
    default:user::rwx
    default:user:bobo:rwx
    default:group::r-x
    default:mask::rwx
    default:other::r-x
    [root@bobo opt]# getfacl /test/b.txt 
    getfacl: Removing leading '/' from absolute path names
    # file: test/b.txt
    # owner: root
    # group: root
    user::rwuser:egon:rwx #effective:rw- # 权限已经继承过来了,但是因为mask的影响变成了rw-
    group::r-x #effective:r--
    mask::rw
    other::r--

    五、文件属性

    [root@localhost ~]# touch /opt/{1..3}.txt
    [root@localhost ~]# chmod 000 /opt/*
    [root@localhost ~]# lsattr /opt/
    ---------------- /opt/1.txt
    ---------------- /opt/2.txt
    ---------------- /opt/3.txt
    
    [root@localhost ~]# chattr +a /opt/1.txt # 允许追加内容
    [root@localhost ~]# chattr +i /opt/2.txt # 禁止修改时间
    [root@localhost ~]# chattr +A /opt/3.txt # 不更改文件访问时间
    
    [root@localhost ~]# lsattr /opt/
    -----a---------- /opt/1.txt
    ----i----------- /opt/2.txt
    -------A-------- /opt/3.txt
    
    # 验证
    [root@localhost ~]# echo 111 >> /opt/1.txt
    [root@localhost ~]# cat /opt/1.txt
    111
    [root@localhost ~]# rm -rf /opt/1.txt
    rm: 无法删除/opt/1.txt": 不允许操作
     
    #去掉
    [root@localhost ~]# chattr -a /opt/1.txt
    [root@localhost ~]# chattr -i /opt/2.txt 
    [root@localhost ~]# chattr -A /opt/3.txt

    实验

    [root@localhost ~]# echo 123131231 > e.txt
    [root@localhost ~]# chattr +A e.txt
    [root@localhost ~]# stat e.txt
     文件:"e.txt"
     大小:10                 块:8                 IO 块:4096    普通文件
    设备:803h/2051d    Inodeғ17154806           硬链接:1
    权限(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
    最近访问:2020-08-11 19:15:15.548257742 +0800
    最近更改:2020-08-11 19:15:15.548257742 +0800
    最近改动:2020-08-11 19:15:22.494283808 +0800
    创建时间:- 
  • 相关阅读:
    加密,解密Web.Config
    Asp.Net在SqlServer中的图片存取技术
    获得定长字符串
    Response.redirect到一个新页面时,保证不是缓存的方法
    从MapX到MapXtreme2004[12]SearchNearest!
    电子签名实现的思路、困难及解决方案
    LegacyText的复制的Bug
    从MapX到MapXtreme2004[11]坐标概论
    水晶报表的导出和打印
    水晶报表文本在web中无法两端对齐
  • 原文地址:https://www.cnblogs.com/ChuangShi-HolySpirit/p/13897990.html
Copyright © 2011-2022 走看看