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

    ACL权限

    查询分区状态命令:
    [root@localhost ~]# df -h
    文件系统 容量 已用 可用 已用% 挂载点
    /dev/mapper/centos-root 17G 3.2G 14G 19% /
    devtmpfs 475M 0 475M 0% /dev
    tmpfs 487M 0 487M 0% /dev/shm
    tmpfs 487M 7.7M 479M 2% /run
    tmpfs 487M 0 487M 0% /sys/fs/cgroup
    /dev/sda1 1014M 133M 882M 14% /boot
    tmpfs 98M 0 98M 0% /run/user/0

    查看是否支持ACL

    临时开启分区ACL权限:
    mount -o remount,acl / #重新挂载跟分区 ,并挂载加入acl权限

    永久开启分区ACL权限
    vim /etc/fstab

    将/dev/mapper/centos-root / xfs defaults 0 0
    改为:
    /dev/mapper/centos-root / xfs defaults,acl 0 0
    然后重启系统,或者 重新挂载:mount -o remount /

    查看acl权限:
    getfacle 文件名

    设定acl权限:
    setfacl 选项 文件名
    选项:
    -m 设定ACL权限
    -x 删除指定的ACL权限
    -b 删除所有的ACL权限
    -d 设定默认ACL权限
    -k 删除默认ACL权限
    -R 递归设定ACL权限

    举例:创建3个用户,1个用户组 并且把他们添加到组中,创建文件夹project ,修改project的所有者为root,所属组为tgroup
    修改project的权限为所有者和所属组读写执行,其他用户没有任何权限
    添加用户slsl,使该用户对/tmp/project具有读和执行的权限
    [root@localhost tmp]# useradd sl7
    [root@localhost tmp]# useradd sl8
    [root@localhost tmp]# useradd sl9
    [root@localhost tmp]# groupadd tgroup
    [root@localhost tmp]# gpasswd -a sl7 tgroup
    [root@localhost tmp]# gpasswd -a sl8 tgroup
    [root@localhost tmp]# gpasswd -a sl9 tgroup
    [root@localhost tmp]# cat /etc/group | grep tgroup
    tgroup:x:1011:sl7,sl8,sl9
    [root@localhost tmp]# mkdir project
    [root@localhost tmp]# ls -ld project
    drwxr-xr-x 2 root root 6 6月 15 16:47 project
    [root@localhost tmp]# chown root:tgroup /tmp/project
    [root@localhost tmp]# ls -ld project
    drwxr-xr-x 2 root tgroup 6 6月 15 16:47 project
    [root@localhost tmp]# chmod 770 /tmp/project/
    [root@localhost tmp]# useradd slsl
    [root@localhost tmp]# passwd slsl
    setfacl -m u:slsl:rx /tmp/project/

    [root@localhost tmp]# ll -d /tmp/project/
    drwxrwx---+ 2 root tgroup 6 6月 15 16:47 /tmp/project/ (说明:在权限的后面多了一个+,说明有了acl权限)


    给用户 slsl 赋值r-x权限,使用"u:用户名:权限" 格式
    说明: -m是设置权限,u是给用户设置,如果是g说明给组设置

    查看acl权限:
    [root@localhost tmp]# getfacl /tmp/project/
    getfacl: Removing leading '/' from absolute path names
    # file: tmp/project/
    # owner: root
    # group: tgroup
    user::rwx
    user:slsl:r-x
    group::rwx
    mask::rwx
    other::---

    测试:
    [root@localhost tmp]# su - slsl
    [slsl@localhost ~]$ cd /tmp/project
    [slsl@localhost project]$ ll
    总用量 0
    [slsl@localhost project]$ touch 333
    touch: 无法创建"333": 权限不够

    说明命令生效:可以读,不能写


    给组添加acl:
    [root@localhost ~]# groupadd tgroup2
    [root@localhost ~]# setfacl -m g:tgroup2:rx /tmp/project/
    [root@localhost ~]# getfacl /tmp/project/
    getfacl: Removing leading '/' from absolute path names
    # file: tmp/project/
    # owner: root
    # group: tgroup
    user::rwx
    user:slsl:r-x
    group::rwx
    group:tgroup2:r-x
    mask::rwx
    other::---

    最大有效权限mask(acl权限和组的权限与mask相与的权限)

    [root@localhost ~]# setfacl -m m:rx /tmp/project/
    [root@localhost ~]# getfacl /tmp/project/
    getfacl: Removing leading '/' from absolute path names
    # file: tmp/project/
    # owner: root
    # group: tgroup
    user::rwx
    user:slsl:r-x
    group::rwx #effective:r-x
    group:tgroup2:r-x
    mask::r-x
    other::---

    说明:mask默认是rwx,相与后 取决于设置的权限
    #effective:r-x 说明;虽然组权限是rwx,但是与r-x相与后 真正的权限是r-x

    本身权限与mask相与
    r w x
    &&
    r - x
    结果 r - x

    删除ACL权限
    setfacl -x u:用户名 文件名 #删除指定用户的ACL权限

    setfacl -x g:组名 文件名 #删除组的ACL权限

    setfacl -b 文件名 #删除文件的所有ACL权限

    递归ACL权限
    setfacl -m u:用户名:权限 -R 文件名

    假如现在新建一个文件,它是没有acl权限的
    ------------------------------------------------
    默认ACL权限,新建的文件也会有ACL权限

    setfacl -m d:u:用户名:权限 文件名
    说明d default
    新建的文件也会有ACL权限了

    递归和默认ACL权限 只能针对目录有效

    文件特殊权限:

    只有可以执行的二进制文件才能设定SUID权限
    命令执行者要拥有x权限
    任何用户执行拥有SUID权限的程序时 会获得该程序文件属主的身份
    SetUID权限只有在该程序执行过程中有效

    [root@localhost ~]# whereis passwd
    passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz
    [root@localhost ~]# ll /usr/bin/passwd
    -rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd
    [root@localhost ~]# ll /etc/shadow
    ---------- 1 root root 1313 6月 15 16:59 /etc/shadow

    说明:找到passwd命令的路径,查看,有个rwsr权限,其中s说明 该文件拥有SUID权限
    修改密码最终是修改的 /etc/shadow文件,但是它权限是000
    普通用户不能直接修改这个文件,用passwd命令时,临时拥有文件属主的身份,即root的身份,可以执行passwd命令,修 改/etc/shadow文件


    cat: /usr/bin/cat /usr/share/man/man1/cat.1.gz
    [root@localhost ~]# ll /usr/bin/cat
    -rwxr-xr-x. 1 root root 54160 10月 31 2018 /usr/bin/cat
    说明:cat 命令没有SUID权限,普通用户无法用 cat /etc/shadow 命令

    设定SetUID的方法(两种)
    chmod 4755 文件名
    chmod u+s 文件名
    说明:4代表SUID

    取消SetUID的方法
    chmod 755 文件名
    chmod u-s 文件名

    SetGID 操作文件
    只有可执行的二进制程序才能设置SGID权限
    命令执行者要对该程序拥有x(执行)权限
    命令执行在执行程序的时候,组身份升级为该程序文件的属组
    SetGID权限只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效

    [root@localhost ~]# whereis locate
    locate: /usr/bin/locate /usr/share/man/man1/locate.1.gz
    [root@localhost ~]# ll /usr/bin/locate
    -rwx--s--x 1 root slocate 40520 4月 11 2018 /usr/bin/locate
    [root@localhost ~]# ll /var/lib/mlocate/mlocate.db
    -rw-r----- 1 root slocate 959116 6月 15 11:48 /var/lib/mlocate/mlocate.db
    [root@localhost ~]#

    locate 命令组中有s,其他用户有x,该命令操作的是/var/lib/mlocate/mlocate.db文件
    普通用户执行locate命令时,组变为slocate组,该组对mlocate.db文件拥有r权限,所以普通用户可以查询mlocate.db数据库

    ------------------------

    SetGID 操作目录
    设定SGID 两种方法:
    chmod 2755 文件名
    chmod g+s 文件名

    取消SetGID
    chmod 755 文件名
    chmod g-s 文件名


    [root@localhost tmp]# mkdir testsgid
    [root@localhost tmp]# chmod 2777 /tmp/testsgid/
    [root@localhost tmp]# ll -d testsgid/
    drwxrwsrwx 2 root root 6 6月 15 20:53 testsgid/
    [root@localhost tmp]# su - slsl
    上一次登录:六 6月 15 17:08:11 CST 2019pts/0 上
    [slsl@localhost ~]$ cd /tmp/testsgid/
    [slsl@localhost testsgid]$ vim aa.txt
    -rw-rw-r-- 1 slsl root 6 6月 15 20:55 aa.txt

    说明:给目录设置2777(SGID)权限后,普通用户进入到该目录,在里面创建的 文件的属组 是 该目录的属组

    Sticky BIT

    只针对目录有效
    普通用户对该目录有wx权限
    假如没有粘着位,即SBIT,普通用户可以删除该目录下所有文件
    一旦赋予了粘着位 ,除了root外,普通用户只能删除自己建立的文件,不能删除其他用户建立的文件。


    tmp目录 权限多了一个t
    [root@localhost ~]# ll -d /tmp/
    drwxrwxrwt. 12 root root 4096 6月 15 20:53 /tmp/


    设置粘着位两种方法
    chmod 1755 目录名
    chmod o+t 目录名

    取消粘着位两种方法
    chmod 777 目录名
    chmod o-t 目录名

    文件系统属性chattr权限
    格式:
    chattr [+-=][选项] 文件或目录名
    +:增加权限
    -:删除权限
    =:等于某权限

    选项
    i:如果对文件设置i属性,不能对文件进行删除、改名 、不能添加、修改数据。
    如果对目录设置i属性,只能修改目录下文件的数据,不能建立、不能删除文件。
    a: 如果对文件设置a属性,只能在文件中增加数据,不能删除、不能修改数据
    如果对目录设置a属性,只允许在目录中建立和修改文件,不能删除文件

    查看文件系统属性
    lsattr 选项 文件名
    选项:
    -a:显示所有文件和目录
    -d:若目标是目录,仅列出目录本身的属性,而不是子文件的

    [root@localhost ~]# cd /tmp
    [root@localhost tmp]# touch abc
    [root@localhost tmp]# echo 111 >> abc
    [root@localhost tmp]# chattr +i abc
    [root@localhost tmp]# lsattr -a abc
    ----i----------- abc
    [root@localhost tmp]# echo 11111 >> abc
    -bash: abc: 权限不够
    [root@localhost tmp]# rm -f abc
    rm: 无法删除"abc": 不允许的操作

    [root@localhost tmp]# mkdir test2
    [root@localhost tmp]# touch test2/abds
    [root@localhost tmp]# chattr +i test2
    [root@localhost tmp]# lsattr -a test2
    ----i----------- test2/.
    ---------------- test2/..
    ---------------- test2/abds
    [root@localhost tmp]# echo 11111 >> test2/abds
    [root@localhost tmp]# cat test2/abds
    11111
    [root@localhost tmp]# rm -f test2/abds
    rm: 无法删除"test2/abds": 权限不够
    [root@localhost tmp]# touch test2/asda
    touch: 无法创建"test2/asda": 权限不够

    chattr 也可以限制root用户

    系统命令sudo权限
    sudo的意义 :root把本来只能超级用户执行的命令赋予普通用户执行。
    sudo的操作对象是系统命令。

    visudo
    #实际修改的是/etc/sudoers文件

    root ALL=(ALL) ALL
    #用户名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)

    %wheel ALL=(ALL) ALL
    #组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)

    举例:
    授权slsl用户可以重启服务器
    slsl ALL=/sbin/shutdown -r now

    -------------------------------------------
    [slsl@localhost ~]$ sudo shutdown -r now

    我们信任您已经从系统管理员那里了解了日常注意事项。
    总结起来无外乎这三点:

    #1) 尊重别人的隐私。
    #2) 输入前要先考虑(后果和风险)。
    #3) 权力越大,责任越大。

    [sudo] slsl 的密码:
    slsl 不在 sudoers 文件中。此事将被报告。
    slsl用户执行sudo shutdown -r now时 不能成功。

    执行visudo命令,添加一行
    ##
    ## Allow root to run any commands anywhere
    root ALL=(ALL) ALL
    slsl ALL=/usr/sbin/shutdown -r now
    ## Allows members of the 'sys' group to run networking, software,

    执行查看命令 sudo -l,发现有一行(root) /usr/sbin/shutdown -r now,说明这个命令可以按照(root)用户执行
    [slsl@localhost ~]$ sudo -l
    [sudo] slsl 的密码:
    匹配 %2$s 上 %1$s 的默认条目:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL
    PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC
    LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin:/bin:/usr/sbin:/usr/bin

    用户 slsl 可以在 localhost 上运行以下命令:
    (root) /usr/sbin/shutdown -r now
    [slsl@localhost ~]$

    现在执行一下:严格按照命令格式,负责报错
    [slsl@localhost ~]$ sudo shutdown now
    对不起,用户 slsl 无权以 root 的身份在 localhost.localdomain 上执行 /sbin/shutdown now。
    [slsl@localhost ~]$ sudo shutdown -r now
    已经重启了

    ------------------------------------------------------------
    增加一行(slsl 192.168.31.170=/usr/bin/vim)
    ## Allow root to run any commands anywhere
    root ALL=(ALL) ALL
    slsl ALL=/usr/sbin/shutdown -r now
    slsl 192.168.31.170=/usr/bin/vim
    ## Allows members of the 'sys' group to run networking, software,

    [slsl@localhost ~]$ sudo -l
    [sudo] slsl 的密码:
    匹配 %2$s 上 %1$s 的默认条目:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL
    PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC
    LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin:/bin:/usr/sbin:/usr/bin

    用户 slsl 可以在 localhost 上运行以下命令:
    (root) /usr/sbin/shutdown -r now
    (root) /usr/bin/vim
    说明:192.168.31.170 这个ip是linux服务器的ip,(ALL)默认不写就是root,以root身份运行。
    换成客户端ip,则这些sudo -l 命令不会查出 (root) /usr/bin/vim 这一行

    举例 root用户建立文件,其他用户没有写的权限,但是切换到slsl用户 用sudo vim sss.txt可以写入,
    说明相当于root在执行,文件权限失效,这是一个反例。现实中不能这样做
    [root@localhost tmp]# vim sss.txt
    [root@localhost tmp]# ll sss.txt
    -rw-r--r-- 1 root root 14 6月 16 01:38 sss.txt

    [slsl@localhost tmp]$ sudo vim sss.txt
    [sudo] slsl 的密码:
    [slsl@localhost tmp]$ cat sss.txt
    daf
    asfda
    asf
    sdsdsd1111111111

  • 相关阅读:
    109 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 03 新增功能及实现 05 问题解析--通过一个方法完成学生和专业的双向关联
    108 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 03 新增功能及实现 04 问题解析--数组未实例化造成的空指针异常
    107 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 03 新增功能及实现 03 编写方法完成学生个数统计功能
    106 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 03 新增功能及实现 02 新增属性完成学生信息存储
    105 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 03 新增功能及实现 01 新增需求及分析
    session与cookie的区别和联系
    session和cookie的区别
    Web服务器主动推送技术
    webSocket的场景应用
    TCP、Http和Socket 优劣比较
  • 原文地址:https://www.cnblogs.com/javasl/p/11154519.html
Copyright © 2011-2022 走看看