zoukankan      html  css  js  c++  java
  • linux特殊权限(acl)

    建立用户目录
           创建目录/oldboy/tech、/oldboy/edu,分别用于不同项目组
    添加组账号
           添加组账号tech、edu,GID分别设置为1001、1002
           为技术部添加组账号oldboy,GID号设置为200
    添加用户账号
           tech组的4个用户:Jerry、kim、amy、john
           //其中的kim用户账号在2019年12月31日后失效
           edu组的2个用户:tansir、zhaosir
           //其中的zhaosir用户账号的登录shell设置为“bin/ksh”
           //提示:yum install -y ksh
    上述所有的用户账号均要求加入到oldboy组内
    设置目录权限及归属
           “oldboy”目录的属组设为oldboy,禁止其他人访问
           “oldboy/tech”目录的属组设为tech,禁止其他人访问
           “oldboy/edu”目录的属组设为edu,禁止其他人访问
            建立公共数据存储目录“/public”
    允许技术组内的所有用户读取、写入、执行文件
    禁止其他用户读、写、执行

    解题思路:
    1.目录有哪些
    /oldboy/tech、oldboy/edu、/public
    2.用户账号
    Jerry、kim、amy、john
    tansir、zhaosir
    3.组账号有哪些
    tech、edu、oldboy
    4.用户与组的关系
    Jerry、kim、amy、john的基本组都是tech
    tansir、zhaosir的基本组都是edu

    [root@localhost ~]# mkdir -p /oldboy/{edu,tech} /public
    [root@localhost ~]# groupadd tech -g 1001
    [root@localhost ~]# groupadd -g 1002 edu
    [root@localhost ~]# groupadd -g 200 oldboy
    [root@localhost ~]# useradd -g 1001 -G oldboy jerry
    [root@localhost ~]# useradd -g 1001 -G oldboy -e '2019-12-31' kim
    [root@localhost ~]# useradd -g 1001 -G oldboy amy
    [root@localhost ~]# useradd -g 1001 -G oldboy john
    [root@localhost ~]# useradd -g 1002 tansir
    [root@localhost ~]# useradd -g 1002 zhaosir
    [root@localhost ~]# usermod -s '/bin/ksh' zhaosir
    [root@localhost ~]# chown .oldboy /oldboy
    [root@localhost ~]# chown .tech /oldboy/tech/
    [root@localhost ~]# chown .edu /oldboy/edu/
    [root@localhost ~]# chmod 770 -R /oldboy/
    [root@localhost ~]# chown .tech /public/
    [root@localhost ~]# chmod 770 /public

    FACL访问控制
    file access control list
    学习了一般权限,但所有的权限是针对某一类用户设置的,如果希望对某个指定的用户进行单独的权限控制,
    就需要用到文件的访问控制列表(ACL)

    设定acl只能是root管理员用户,相关命令:getfacl,setfacl

    //环境准备
    [root@localhost ~]# touch /home/test.txt
    //文件在没有设定acl,看到的和传统权限是一样的
    [root@localhost ~]# ll /home/test.txt
    -rw-r--r-- 1 root root 0 11月 6 22:14 /home/test.txt

    //使用getfacl查看权限
    [root@localhost ~]# getfacl /home/test.txt
    getfacl: Removing leading '/' from absolute path names
    # file: home/test.txt
    # owner: root
    # group: root
    user::rw- #文件owner权限
    group::r-- #文件拥有组权限
    other::r-- #其他人权限

    设定acl权限案例如下:
    -rw-r--r-- 1 root root 0 11月 6 22:14 /home/test.txt
    要求:
    oldboy   拥有读写权限 rw
    oldgirl    拥有任何权限 -
    oldedu   组拥有读权限 r
    其他用户拥有读写权限 rw

    //建立相关用户组
    [root@localhost ~]# useradd oldgirl
    [root@localhost ~]# groupadd oldedu
    [root@localhost ~]# useradd oldboy

    //增加用户oldboy权限
    [root@localhost ~]# setfacl -m u:oldboy:rw /home/test.txt

    //增加用户oldgir权限
    [root@localhost ~]# setfacl -m u:oldgirl:- /home/test.txt

    //增加oldedu组权限
    [root@localhost ~]# setfacl -m g:oldedu:r /home/test.txt

    //设置其他人权限
    [root@localhost ~]# setfacl -m o:o:rw /home/test.txt
    [root@localhost ~]# getfacl /home/test.txt
    getfacl: Removing leading '/' from absolute path names
    # file: home/test.txt
    # owner: root
    # group: root
    user::rw-
    user:oldgirl:---
    user:oldboy:rw-
    group::r--
    group:oldedu:r--
    mask::rw-
    other::r--

    查看acl权限
    [root@localhost ~]# ll /home/test.txt
    -rw-rw-r--+ 1 root root 0 11月 6 22:14 /home/test.txt

    ACL高级特性MASK(扩展知识)
    mask:用于临时降低用户或组(除属主和其他人)的权限
    mask:决定了他们的最高权限,建议:为了方便管理文件权限,其他人的权限置为空

    //临时降低用户或组权限
    [root@localhost ~]# setfacl -m m::rw filename
    注意:
    mask会影响到除了所有者和所有人
    mask权限决定了最高权限
    mask用于临时降低用户的权限
    任何重新设置acl会清理mask所限定权限

    ACL高级特性Default
    default:继承(默认)

    alice能够对/opt目录下新建的文件有读写执行权限

    //赋予alice对/opt读写执行权限
    [root@localhost ~]# setfacl -R -m u:alice:rwx /opt
    //赋予alice对以后再/opt下新建的文件有读写执行权限(使alice的权限继承)
    [root@localhost ~]# setfacl -m d:u:alice:rwx /opt

    ACL实践案例
    案例1:将新建文件的属性修改tom:admin,权限默认644
    要求:tom对该文件所有的权限,mary可以读写该文件,admin组可以读写执行该文件,jack只读该文件,其他人一律不能访问
    该文件
    groupadd admin
    useradd tom
    useradd jack
    useradd mary
    touch /tmp/q.txt
    chown tom.admin /tmp/q.txt
    chmod 770 /tmp/q.txt
    setfacl -m u:mary:rw /tmp/q.txt
    setfacl -m u:jack:r /tmp/q.txt

    linux系统特殊权限

    s-uid
           只对可执行文件生效,可以让执行用户使用文件属主执行
    s-gid
           既可以对执行文件生效,也可以对目录生效(建议只对目录生效),实现目录继承权限

    对可执行的setuid(或setgid)权限表示将以文件的用户(或组)身份运行命令,而不是以运行命令的用户身份,以password命令为例
    [root@localhost ~]# ls -l /usr/bin/passwd
    -rwsr-xr-x. 1 root root 27856 8月 9 09:39 /usr/bin/passwd

    目录粘滞位可以为文件删除设置特殊限制,仅文件所有者(root用户)可以删除目录中的文件。
    [root@localhost ~]# ll -d /tmp/ /var/tmp/
    drwxrwxrwt. 7 root root 93 11月 11 08:40 /tmp/
    drwxrwxrwt. 2 root root 6 11月 11 08:40 /var/tmp/

    最后,对某目录的setgid权限表示在该目录中创建的文件将继承该目录的组所属关系,而不是继承自创建用户,这通常用于组协作目录,将文件从默认的专有组自动更改为共享组。

    特殊权限对文件和目录的影响
    特殊权限           对文件的影响                                                                        对目录的影响
    u+s suid 以拥有文件的用户身份,而不是运行文件的用户身份执行文件           无影响
    g+s sgid 以拥有文件的组身份执行文件                                                             在目录在最新创建的文件将其所有者设置为与目录的组所有者相匹配
    o+t sticky 无影响                                                                                               对目录具有写入权限的用户仅可以删除其所拥有的目录,而无法删除或强制保存到其他用户所拥有的文件

    如何设置特殊权限
    用符号表示:setuid=u+s;setgid=g+s;sticky=o+t
    用数值表示:setuid=4;setgid=2;sticky=1

    1.1set_uid

     

    演示

    文件的执行有效身份为文件的拥有者,而不是执行者的身份。
    //检查passwd文件权限,匿名用户没有权限查看
    [root@localhost ~]# chmod 640 /etc/passwd
    [root@localhost ~]# ll /etc/passwd
    -rw-r----- 1 root root 1126 11月 6 22:39 /etc/passwd

    //使用普通用户无法查看
    [root@localhost ~]# ll /usr/bin/cat
    -rwxr-xr-x. 1 root root 54080 8月 20 14:25 /usr/bin/cat
    [oldboy@localhost ~]$ cat /etc/passwd
    cat: /etc/passwd: 权限不够

    //给cat命令赋予suid
    [root@localhost ~]# chmod 4755 /usr/bin/cat
    [root@localhost ~]# ll /usr/bin/cat
    -rwxr-xr-x. 1 root root 54080 8月 20 14:25 /usr/bin/cat
    //再次使用普通用户查看
    [oldboy@localhost ~]$ cat /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    -

    suid 授权方法
    suid 4000 权限字符s(S),用户位置上的x位上设置
    授权方法 chmod 4755 passwd
    chmod u+s passwd
    suid作用
    让普通用户临时拥有可执行的二进制文件所属主权限,二进制文件需要有执行权限
    当二进制文件没有执行权限,suid的权限显示就是大S。suid仅对二进制可执行程序有效
    如果普通需要操作没有权限的文件,为对应的命令赋予Suid权限,可实现操作

    注意:suid双刃剑,是一个比较危险的功能,对系统安全有一定的威胁。

    set_gid
    文件的有效执行组身份为文件的拥有组,而不是执行者的组身份
    目录里新建的文件的拥有组会自动继承目录的拥有组身份

    [root@localhost ~]# chmod 777 /opt/
    [root@localhost ~]# chmod 2777 /opt/
    [root@localhost ~]# ll -d /opt
    drwxrwsrwx. 2 root root 6 4月 11 2018 /opt
    [oldboy@localhost ~]$ mkdir /opt/test
    [oldboy@localhost ~]$ ll /opt/
    总用量 0
    drwxrwsr-x 2 oldboy root 6 11月 12 10:05 test

    sgid授权方法
    suid 2000权限字符s(S),用户位置上的x位上设置
    授权方法:chmod 2755 directory
    chmod g+s directory

    针对用户组权限位修改,用户创建的目录或文件所属组和该目录的所属组一致
    默认所有用户创建文件,用户和组都是自身,Sgid可以让其他用户在此目录下创建的文件和目录,具有和此目录相同的用户组设置
    当为某个目录设置了sgid位以后,在该目录中新创建的文件具有该目录的所有组权限,而不是创建该文件的用户的默认所有者。这样,使得在多个用户之间共享一个目录中的文件变得简单

    1.3sticky粘滞位
    sticky对目录有写权限的用户仅仅可以删除目录里属于自己的文件,不能删除其他用户的文件
    /tmp/目录是经典的粘滞位目录,谁都有写权限,因此安全成问题,常常是木马第一手跳板

    sticky授权方法
    粘滞位 1000 权限字符t(T),其他用户位的x位上设置
    授权方法:chmod 1755 /tmp/
    chmod o+t /tmp/

    sticky
    让多个用户都具有写权限的目录,每个用户只能删除自己的文件,表现出others的x位,用小t表示,如果没有执行权限的是T,那么一个目录即使它的权限位“777”如果希望对某个指定的用户进行单独的权限控制,
    是设置了粘滞位,除了目录的属主和“root”用户有权限删除,除此之外其他用户不能删除这个目录。

    权限属性chattr
    设置文件属性(权限),针对所有用户,包括root
    a:让文件或目录仅可追加内容
    i:不得任意更动文件或目录

    //创建文件并设置属性
    [root@localhost ~]# touch file_a file_b
    [root@localhost ~]# lsattr file_a file_b
    ---------------- file_a
    ---------------- file_b

    //设置属性
    [root@localhost ~]# chattr +a file_a
    [root@localhost ~]# chattr +i file_b
    [root@localhost ~]# lsattr file_a file_b
    -----a---------- file_a
    ----i----------- file_b

    //a权限,无法覆盖写入和删除文件
    [root@localhost ~]# echo "aaa">file_a
    -bash: file_a: 不允许的操作
    [root@localhost ~]# rm -f file_a
    rm: 无法删除"file_a": 不允许的操作

    //a权限,只能追加,适用于日志文件
    [root@localhost ~]# echo "aaa">>file_a

    //i权限,无法写入,无法删除
    [root@localhost ~]# echo "i" >file_b
    -bash: file_b: 权限不够
    [root@localhost ~]# echo "i">>file_b
    -bash: file_b: 权限不够
    [root@localhost ~]# rm -f file_b
    rm: 无法删除"file_b": 不允许的操作

    //解除限制
    [root@localhost ~]# chattr -a file_a
    [root@localhost ~]# chattr -i file_b

    3.进程掩码umask
    umask用于设置默认权限
    默认新建文件,最大权限为666
    默认新建目录,最大权限是777

    我们在新建文件和目录的默认权限会受到umask的影响,umask表示要减掉的权限。创建目录权限值为755,创建普通文件权限值为644
    umask涉及到的相关文件/etc/bashrc /etc/profile ~/.bashrc ~/.bash_profile

    注意umask影响的范围
    shell(vim,touch)-umask->新文件或目录权限
    vsftpd-umask->新文件或目录权限
    samba-umask->新文件或目录权限
    useradd-umask->用户HOME

    1.假设umask值为:022(所有位为偶数)
    //文件的起始权限值
    666-022=644
    2.假设umask值为:045(其他用户组为奇数)
    //计算出来的权限。由于umask的最后一位数字是5,所以,在其他用户组在加1
    666-045=622
    3.默认目录权限计算方法
    777-022=755
    umask 044 //umask所有位全为偶数时
    示例 mkdir d044 //目录733
    示例 touch f044 //文件622

    umask 023 //umask值的部分或全部为奇数时
    示例 mkdir d023 //目录754
    示例 touch f023 //文件644

    umask 035 //umask值的所有位为奇数时
    示例 mkdir d035 //目录742
    示例 touch f035 //文件642

    示例1 :在shell进程中创建文件
    [root@localhost ~]# umask
    0022
    [root@localhost ~]# touch file0022
    [root@localhost ~]# mkdir dir0022
    [root@localhost ~]# ll -d *0022
    drwxr-xr-x 2 root root 6 11月 12 22:33 dir0022
    -rw-r--r-- 1 root root 0 11月 12 22:33 file0022

    示例2:修改shell umask值(临时生效)
    root@localhost ~]# umask 000
    [root@localhost ~]# touch file0000
    [root@localhost ~]# mkdir dir0000
    [root@localhost ~]# ll -d dir0000/ file0000
    drwxrwxrwx 2 root root 6 11月 12 22:36 dir0000/
    -rw-rw-rw- 1 root root 0 11月 12 22:35 file0000

    示例3:修改shell umask值(永久生效,强烈不建议修改)
    [root@localhost ~]# vim /etc/profile
    if [ $UID -gt 199 ]&&["`id -gn"="`id -un"];then
    umask 002
    else
    umask 022
    fi

    //立即在当前shell中生效
    [root@localhost ~]# source /etc/profile

    示例4:通过umask决定新建用户HOME目录的权限
    [root@localhost ~]# vim /etc/login.defs
    UMASK 077
    [root@localhost ~]# useradd dba
    [root@localhost ~]# ll -d /home/dba/
    drwx------ 2 dba dba 62 11月 12 22:51 /home/dba/
    [root@localhost ~]# vim /etc/login.defs
    UMASK 000
    [root@localhost ~]# useradd sa
    [root@localhost ~]# ll -d /home/sa/
    drwxrwxrwx 2 sa sa 62 11月 12 22:51 /home/sa/

    示例5:例如vsftpd进程/etc/vsftpd/vsftpd.conf
    [root@localhost ~]# yum install -y vsftpd
    [root@localhost ~]# man vsftpd.conf
    anon_umask
    local_umask

    特殊权限练习题
    创建三个用户,分别为curly,larry,moe这些用户都是stooges组的成员。
    这些用户的账号密码都为password
    1.要求以上用户和组可以在/home/stooges目录里访问,创建,删除文件
    2.其他用户一律不允许访问该目录
    3.在该目录下新建的文件会自动属于stooges组拥有

    思路:
    1.用户有哪些
    curly,larry,moe
    2.组有哪些
    stooges
    3.用户与组关系
    curly,larry,moe都是stooges的组成员
    4.目录有哪些
    /home/stooges

    //创建用户、组
    [root@localhost ~]# groupadd stooges
    [root@localhost ~]# useradd -g stooges moe
    [root@localhost ~]# useradd -g stooges larry
    [root@localhost ~]# useradd -g stooges curly

    //创建密码
    [root@localhost ~]# echo "password" |passwd --stdin moe
    更改用户 moe 的密码 。
    passwd:所有的身份验证令牌已经成功更新。
    [root@localhost ~]# echo "password" |passwd --stdin larry
    更改用户 larry 的密码 。
    passwd:所有的身份验证令牌已经成功更新。
    [root@localhost ~]# echo "password" |passwd --stdin curly
    更改用户 curly 的密码 。
    passwd:所有的身份验证令牌已经成功更新。

    //创建目录
    [root@localhost ~]# mkdir -p /home/stooges

    //设置权限
    [root@localhost ~]# chown .stooges /home/stooges/
    [root@localhost ~]# chmod 2770 /home/stooges/
    [root@localhost ~]# ll -d /home/stooges/
    drwxrws--- 2 root stooges 6 11月 12 12:27 /home/stooges/

  • 相关阅读:
    使用jedis操作redis常用方法
    PostgreSQL下安装pg_stat_statements
    redis+keepalived安装
    eclipse离线安装Activiti Designer插件
    PostgreSQL下安装pg_stat_statements
    mysql设置索引
    使用appium在android7.0真机上测试程序时报错command failed shell “ps ‘uiautomator’”的解决方式
    appium--adb版本过低
    appium报错--版本不匹配
    win7提示不是正版桌面变黑
  • 原文地址:https://www.cnblogs.com/xmtxh/p/11846821.html
Copyright © 2011-2022 走看看