• 权限管理


    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

  • 相关阅读:
    Internet Explorer 加载项资源库
    Nexus one (Android 2.1升级Android2.2)
    QQ 2011 Beta 抢先体验,很给力啊!
    HttpWebRequest 下载网页Html代码 POST方式(站内使用了form方式) System.Net.WebException (417) Expectation failed
    WIndows 7 安装.net framework 4.0 失败,错误HRESULT 0xc8000222解决办法
    HttpWebRequest 下载网页Html代码 下载文件(Remote和FTP)Get方式
    CS0016: 未能写入(A compilation error has occurred.HttpCompileException: error CS0016: Could not write to output file 拒绝访问)
    如何只保留一个应用程序实例
    用excel打开从系统导出的csv文件时未分列
    Unhandled Error in Silverlight Application 无法下载 Silverlight 应用程序。请查看 Web 服务器设置
  • 原文地址:https://www.cnblogs.com/javasl/p/11154519.html
Copyright © 2020-2023  润新知