• Linux之权限


    1.1,什么是权限?

    权限是用来约束用户能对系统所作的操作。或者说权限是指某个特定的用户具有特定的系统资源的使用权力。

    1.2权限的作用

    linux是一个多用户系统,对于每一个用户来说,个人隐私的保护十分重要,所有需要进行权限划分。

    • 1,安全性:降低误删除风险,减少人为造成故障以及数据泄露等风险。
    • 2,数据隔离:不同的权限能看到,以及操作不同的数据。
    • 3,职责明确划分。

    1.3 权限与用户的关系

    • linux系统中,权限是用户来定义用户能做什么,不能做什么。
    • 1,针对文件定义了三种身份,分别是属主owner、属组gruop、其他他人others
    • 2.每种身份又对应三种权限,读read、写write、执行execute

    • 当一个用户访问文件流程
    • 先判断用户是否为文件属主,如果是则按属主权限进行访问。否则判断用户是否为文件属组,如果是则按属组权限进行访问。如果访问者既不是文件属主也不是文件属组,则按其他人权限访问。

    1.4 权限中rwx的含义

    • linux中权限是由rwxr-xr-x这9为字符来表示的。主要控制文件的属主User,属组Group,其他用户Other
    字母 含义 二进制 八进制权限表示法
    r-- 读取权限 100 4
    -w- 写入权限 010 2
    --x 执行权限 001 1
    --- 没有权限 000 0

    2,修改文件权限

    • 命令:chmod(change mode) ps:root用户可以修改任何人的文件权限,普通用户只能变更属于自己的文件权限

    2.1,UGO方式

    • 给文件所有人添加读写执行权限
    [root@Linux.net: ~]##chmod a=rwx file
    
    
    • 取消文件的所有权限
    [root@Linux.net: ~]##chmod a=-rwx file
    
    
    • 属主读写执行,属组读写,其他人无权限
    [root@Linux.net: ~]##chmod u=rwx,g=rw,0=- file
    
    • 属主属组读写执行,其他人读权限
    [root@Linux.net: ~]##chmod ug=rwx,o=r file
    

    2.2,NUM方式

    • 设定文件权限644,rw-r--r--
    [root@Linux.net: ~]##chmod 644 file
    
    • 设定文件权限600,rw-------
    [root@Linux.net: ~]##chmod 600 file
    
    • 设定目录权限为755,递归授权rwxr-xr-x
    [root@Linux.net: ~]##chmod -R 755 dir
    

    2.3权限对文件的影响
    linux中去权限设定读文件和目录的影响是有区别的。

    权限 对文件的影响 对目录的影响
    r 浏览目录内容
    w 增加,删除,修改
    x 执行 进入目录

    3,修改文件所属关系

    • 可以使用chown(change owner)、chagrp(change group)命令实现
    • chown 可以变更文件的属主和属组
    • chgrp仅能变更文件的属组

    3.1 chown(change owner)

    # 1,创建文件和目录
    [root@Linux.net: ~]#mkdir /data
    #2,修改所属主为`bin`
    [root@Linux.net: ~]#mkdir bin /data
    
    [root@Linux.net: ~]#chown -R root.root dir
    

    3.2 chgrp(change group)

    # 1,创建文件和目录
    [root@Linux.net: ~]#mkdir /data2
    #2,修改所属组为`adm`
    [root@Linux.net: ~]#mkdir ,adm /data
    #3,修改目录所属主为`root`,所属组为`root`,并进行递归授权
    
    • 进程能够以一种什么样的方式去访问一个文件,取决与这个进程所运行的身份对这个文件或者目录有什么样的权限。

    4,文件特殊权限
    linux中,每个普通用户都可以更改自己的密码,这是合理的设置;但是用户的密码信息存储在/etc/shadow文件中,也就是说,普通用户在更改自己的面膜时会跟新/etc/shadow文件的内容。
    /etc/shadow文件是不允许任何人修改的,那为什么普通用户可以修改自己的权限呢?

    [root@Linux.net: ~]#ll /etc/shadow
    ----------. 1 root root 1158 Jul 18 15:01 /etc/shadow
    
    

    其实,普通用户可以修改自己的密码在于passwd命令本身,该命令拥有特殊权限SetUID也就是在属主的权限位的执行权限上是s。我们可以这样理解特殊权限SetUID:当一个执行文件设置SetUID后,用户在执行这个文件时将以文件所有者的身份来执行。

    4,1,SUID配置语法

    [root@Linux.net: ~]#chmod u+s /usr/bin/cat
    [root@Linux.net: ~]#chmod 4755/usr/bin/cat
    
    

    SUID作用总结

    • 1,让普通用户对可执行的二进制文件,临时拥有二级制文件的所属主权限
    • 2,如果设置的二进制文件没执行权限,那么SUID的权限就大S
    • 3,特殊权限suid仅对二进制可执行程序有效,其他文件或目录无效
    • 4,suid 相对危险,不建议对vim和rm进行suid设定操作

    4.2特殊权限SGID

    • SGID:
    • 1,设置二进制可执行文件,命令在执行的过程中,会以命令的属组身份运行命令。
    • 2,设置在目录上,这时候在该目录下新建的文件/目录自动继承父目录属组

    4.2.1 SGID配置语法

    [root@Linux.net: ~]chmod g+s  /dir
    [root@Linux.net: ~]chmod 2755  /dir
    
    

    4.2.2SGID场景模拟

    • 需求:

    系统用户有两个用户,分别位ex1,ex2,这两个用户都拥有example
    1,这两个用户需要共同拥有/data/code目录的开发权;
    2,互相之间能修改彼此的文件,且该目录不允许其他人进入查阅

    [root@Linux.net: ~]#groupadd example
    [root@Linux.net: ~]#useradd ex1 -G example
    [root@Linux.net: ~]#useradd ex2 -G example
    
    
    [root@Linux.net: ~]#mkdir /data/code
    [root@Linux.net: ~]#chgrp project /data/code/
    [root@Linux.net: ~]#chmod 770 /data/code/ #可省略
    [root@Linux.net: ~]#chmod 2770 /data/code/
    
    

    4.3特殊权限SBIT

    • 什么是SBIT

    一旦目录被赋予了粘滞位sticky(SI TI KI),普通用户对该文件拥有w权限,也只能删除自己创建的文件,不可以删除别人创建的文件。root可以删除目录中的所有文件

    4.3.1SBIT配置示例

    • 需求:默认情况下/mnt不是粘滞位,如何将此目录设置为粘滞位;
    [root@Linux.net: ~]#chmod o+t /mnt
    [root@Linux.net: ~]#chmod 1755 /mnt
    
    

    4.3.1 SBIT作用总结

    • 1,让所有普通用户对该目录具有写入权限,并且能实现每个用户只能删自己的我文件

    • 2,粘滞位目录表现在othersx位,用t表示,如果没有执行权限则表示为T

    • 3,粘滞位目录的属主以及root用户有权限删除目录中的内容,其他用户无权限删除。

    5,特殊属性

    • 什么是特殊属性:这类文件属性凌驾于rwx基础权限之上,是一种高级属性

    5.1 特殊属性的作用

    • 1,创建一个文件,不允许被修改、移动、删除、包括root也不行--->适合/etc/passwd
    • 2,创建一个文件,仅允许往文件里追加数据,不允许修改、移动、删除、--->适合sudo审计日志。

    5.2 特殊属性如何配置

    • linux系统通过chattr来实现特殊属性的配置
    • 命令格式: chattr[+-=] [选项] 文件或者目录名
    • a:可对文件进行追加内容;
    • i:锁定文件,不允许其他操作;
    
    #配置`/etc/passwd`文件,不可改,不可追加,不可删除
    
    [root@Linux.net: ~]# chattr +i /etc/passwd
    [root@Linux.net: ~]#rm -f /etc/passwd
    rm: cannot remove ‘/etc/passwd’: Operation not permitted
    
    #配置`/var/log/secure`文件,只能追加写入日志,不允许手动修改,也不允许删除
    [root@Linux.net: ~]#chattr +a /var/log/secure
    [root@Linux.net: ~]#lsattr /var/log/secure
    -----a---------- /var/log/secure
    
    #追加试试
    [root@Linux.net: ~]#echo "test" >> /var/log/secure
    [root@Linux.net: ~]#echo "test" >> /var/log/secure
    #删除,修改操作都不可以
    [root@Linux.net: ~]#rm -f /var/log/secure
    rm: cannot remove ‘/var/log/secure’: Operation not permitted
    
    
    • 5.3取消特殊属性
    [root@Linux.net: ~]#chattr -i /etc/passwd
    [root@Linux.net: ~]#chattr -a /var/log/secure
    
    

    6,文件默认权限

    • 默认权限: 指用户在创建文件或目录时,默认分配给文件或目录的访问权限;
    • 默认权限有什么用

    6.1系统默认权限配置文件

    • 为什么默认root用户的UMASK022

    1,当用户登录系统时,会加载/etc/profile环境变量文件;
    2.在该配置文件中有一条UMASK的判断语句;如果用户UID小于199,将UMASK初始化为022
    如果用户UID大于199并且组名称和用户名称一致,那么就将UMASK初始化为002

    • UMASK判断语句如下:
    
    [root@Linux.net: ~]vim /etc/profile
    
    
    if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
        umask 002
    else
        umask 022
    fi
    
    
    

    6.2 默认权限的计算公式

    #1,假设umask值为:022(所有位为偶数)
    #文件的起始权限值
     666 - 022 = 644
     777 - 022 = 755
    
    
    #2.假设umask值为:045(其他用户组位为奇数)
    #计算出来的权限。由于umask的最后一位数字是5,所以。在其他用户组位再加1.
    666 - 045 = 621 + 1 = 622
    777 - 045 = 732
    
    #umask所有位全位偶数
    #umask 044
    #mkdir d044 目录权限为 777 -044 =733
    #touch f044 文件权限为 666 - 044 = 622
    
    
    
    #umask所有位全位奇数
    #umask 023
    #mkdir d023  目录权限为 777 -023 =754
    #touch f023文件权限为 666 - 023 = 643+001 = 644
    
    
    #umask部分位全位为偶数时
    
    #umask 032
    #mkdir d032  目录权限为 777 -023 =745
    #touch f032  文件权限为 666 - 023 = 634+010 = 644
    
    #umask所有位全位为奇数时
    
    #umask 035
    #mkdir d035  目录权限为 777 -035 =742
    #touch f035 文件权限为 666 - 035 =631 + 011 =642
    
    
  • 相关阅读:
    记录一些笔记~
    JS里的居民们7-对象和数组转换
    JS里的居民们6-数组排序
    JS里的居民们5-数组(栈)
    MySQL设置当前时间为默认值的方法
    session过期问题
    MyIsam和InnoDB的区别
    ajax请求 json格式和数组格式总结
    wamp 2.5 开放访问权限和设置虚拟域名
    checkbox属性checked="checked"通过js已设置,但是不勾选
  • 原文地址:https://www.cnblogs.com/qinghuani/p/15026411.html
Copyright © 2020-2023  润新知