6.权限

作者: Durant_fca1 | 来源:发表于2019-11-21 17:06 被阅读0次

    一、属主,属组,其他人

    https://www.jianshu.com/p/8a6219c09e4c

    Linux 系统中一切皆文件。

    每个文件和目录都有自己的属主和属组

    • 属主 表示这个文档是属于哪个用户的,这个用户必须存在于这个系统中。

    • 属组 表示这个文档是属于哪个组的, 这个组必须存在于这个系统中。

    • 其他人 表示这个文档和哪些用户没有任何的关系,此时那些用户就是其他人的范畴。

    二、记录用户和组的文件

    /etc/passwd 保存了用户的相关信息

    /etc/shadow 保存了用户的密码等信息

    /etc/group 保存了组的相关信息

    三、文件属性

    image

    文档类型

    - :常规文件;即普通文件;
    
    d : directory  目录文件
    
    b : block device, 块设备文件,支持以block(块)为单位进行随机访问
    
    c :character device,字符设备文件,支持以(字符)character为单位进行线性访问,
        例如键盘、鼠标(一次性读取设备)。
    
       major number :主设备号,用标识设备文件,今儿确定要加载的驱动程序
    
       minor number :次设备号,用于标识同一类型中的不同的设备
                     8位二进制:0-255
    
    l : symbolic link, 符号链接文件,就行 Windows 中的快捷方式;
    
    p :  pipe, 命名管道;
    
    s  :  socker, 套接字文件;
    
    

    关于索引节点,课外阅读资料阮一峰博客

    关于权限部分

    image

    一个文档的权限分为三部分,每个部分对应了具体的对象(谁的,哪个组的,其他人)。

    每个部分有分为 3 个位,每个位都对应了不同的权限。所有的位置中,假如表示没有权限,就在次位置用英文的短横线 - 占位 。

    • 第一个位置是 读权限,有读权限,就在此位置用 r 表示,假如没有,用英文的短横线 - 表示。
      比如: r-- , 表示 只读的权限。

    • 第二个位置是 写权限, 有写权限,就在此位置用 w 表示。

    • 第三个位置是 执行权限, 有写权限, 就在此位置用 x 表示。

    随意练习一下, 开始你的表演。提问开始

    修改文档的权限和属性

    修改属主和组

    修改属主和属组的命令可以使用 chown, 就是 change owner 的简写。

    chown 命令语法

    chown [-R]     帐号名称           文件或目录
    chown [-R]     帐号名称:组名称   文件或目录
    chown [-R]     帐号名称.组名称   文件或目录
    
    

    注意:

    这里的账号名称和组名称,必须存在于系统中,在 /etc/passwd/etc/group 文件中有相应的记录。

    // 修改属主和属组
    chown   sshd.sshd    a.txt
    
    // 修改目录及其下面所有的文件和目前的属主和属组, 需要创建这个目录
    chown  -R   sshd:sshd    /opt/mysql/data
    
    // 修改属主
    chown    sshd     b.txt
    
    // 修改属组, 注意组名 sshd 前面有个点
    chown    .sshd     b.txt
    
    

    修改权限

    修改权限的命令使用 chmod, 就是 change mode 的简写。

    chmod 命令语法

    chmod  [-R]   权限表示方式     文件或目录
    
    

    -R 选项是对目录进行递归操作

    权限的改变使用的是chmod这个指令,但是,权限的设置方法有两种, 分别可以使用数字或者是符号来进行权限的变更。

    符号的方式

    image

    所谓的符号就是上图中的 rwx

    那如何表示身份对象呢?

    • 属主, 就是 user 的意思, 可以使用 u 来表示

    • 属组, 就是 group 的意思, 可以使用 g 来表示

    • 其他人, 就是 others 的意思, 可以使用 o 来表示

    • 所有人, 可以使用 all, 就用 a 来表示

    增加权限使用英文的 + 符号
    移除权限使用英文的 - 符号
    设置权限使用英文的 = 符号

    开始你的表演

    1. 设置 .bashrc 文件的权限,具体要求如下
      • 属主为 可读,可写
      • 属组为 可读
      • 其他人为 可读
    chmod   u=rw,g=r,o=r    .bashrc
    
    
    1. 修改 .bashrc 文件的权限为如下描述
      • 属主增加 可执行权限
      • 属组增加 可写,可执行权限
      • 其他人移除 可读权限
    chmod    u+x,g+wx,o-r   .bashrc
    
    
    1. 修改 .bashrc 文件的权限为:

      • 给所有用户增加可执行权限
    chmod  a+x    .bashrc
    
    

    数字的方式

    使用数字的方式操作权限,就是把之前的每个角色的具体位置的的符号转变成一个数字。

    r --> 4

    w --> 2

    x --> 1

    那如何把这些数字对应到具体的身份中呢,比如 属主、数组,其他人。

    对应到每个身份上时,需要把三个位置的数字相加。

    比如一个文档的权限是 -rwxr--r--, 对应的数字方式的权限是 744.

    文档类型: - 代表普通文件
    属主:rwx 分别对应了 4 2 1,相加后就是 7
    属组: r-- 分别对应了 4 0 0 , 相加后就是 4
    其他人: r-- 分别对应了 4 0 0 , 相加后就是 4

    开始你的表演

    数字方式的权限设置,都是直接设置的,没有增加、删除之说。

    1. 设置文件 .bashrc 的权限为
      属主:可读可写可执行
      属组: 可读可执行
      其他人: 无权限
    chomd   750     .bashrc
    
    

    四、权限对于文件和目录的意义

    认识 Linux 系统

    分区和文件系统的基本认知

    image image

    由于盘片是圆的,并且通过机器手臂去读写数据,盘片要转动才能够让机器手臂读写。因此,通常数据写入当然就是以圆圈转圈的方式读写啰!

    所以,当初设计就是在类似盘片同心圆上面切出一个一个的小区块,这些小区块整合成一个圆形,让机器手臂上的磁头去存取。 这个小区块就是磁盘的最小物理储存单位,称之为扇区 (sector),那同一个同心圆的扇区组合成的圆就是所谓的磁道(track)。 由于磁盘里面可能会有多个盘片,因此在所有盘片上面的同一个磁道可以组合成所谓的柱面 (cylinder)。

    原本硬盘的扇区都是设计成 512Byte 的容量,但因为近期以来硬盘的容量越来越大,为了减少数据量的拆解,所以新的大容量硬盘已经有 4KByte 的扇区设计! 购买的时候也需要注意一下。也因为这个扇区的设计不同了,因此在磁盘的分区方面,目前有旧式的 MSDOS 相容模式,以及较新的 GPT 模式。

    具体分区参考

    一块磁盘需要经过分区,之后对每个分区进行格式化操作,操作系统才能用于存储数据。

    一块磁盘 --》 一大间房子

    分区 --》 分割成不同的房间

    格式化 --》 规定每个房间的用途

    规定每个房间的用途,就相当于确定如何使用存放数据,这个过程中就需要制定一定的规则,就是规定数据如何存放的硬盘的这个分区。这个规则称为文件系统。

    为什么需要进行格式化*呢?这是因为每种操作系统所设置的文件属性/权限并不相同, 为了存放这些文件所需的数据,因此就需要将分区进行格式化。

    所以不同的操作系统也有自己独有的文件系统。

    对于 Windows 中,有的文件系统比如 FAT32、NTFS 等

    对于 Linux 系统中,有的文件系统:EXT2、 EXT3、 EXT4、 XFS

    大部分情况下,每种操作系统只能够使用自己的文件系统,也有一些特殊的,比如FAT32 多种操作系统都是可以支持的,因为这个文件系统比较陈旧,支持的特性功能不多,所以大部分操作系统都支持。

    Mac 和 Windows 都能读写的文件系统是 ExFAT

    Mac 、Linux、Windows 都是读写的是 Fat32。

    Fat32 系统缺点读写速度慢,并且单个文件的大小不能超过 4G, 比如不能存储一个超过 4G的视频或者 ISO格式的文件等

    inode 和 block

    Linux 系统中有很多高级的文件系统,这些文件系统中的文档除了有文件内容本身外,还有很多属性,在管理这些内容的时候,会把一个文档这些内容分为两个部分存储。

    inode 部分和 block 部分

    每个 inode 与 block 都有编号

    • inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的 block 号码;
    • block:实际记录文件的内容,若文件太大时,会占用多个 block 。

    假设某一个文件的属性与权限数据是放置到 inode 4 号(下图较小方格内),而这个 inode 记录了文件数据的实际放置点为 2, 7, 13, 15 这四个 block 号码,此时我们的操作系统就能够根据 block 号来排列磁盘的读取顺序,可以一口气将四个 block 内容读出来! 那么数据的读取就如同下图中的箭头所指定的模样了。

    image

    参考文档:鸟哥私房菜基础篇

    关于 inode

    inode 也可以称为 inode table(表格)

    inode 的内容在记录文件的属性以及该文件实际数据是放置在哪几号 block 内! 基本上,inode 记录的文件数据至少有下面这些:

    • 该文件的存取模式(read/write/excute);
    • 该文件的拥有者与群组(owner/group);
    • 该文件的容量;
    • 该文件创建或状态改变的时间(ctime);
    • 最近一次的读取时间(atime);
    • 最近修改的时间(mtime);
    • 定义文件特性的旗标(flag),如 SetUID...;
    • 该文件真正内容的指向 (pointer);

    关于 block

    block 可以称为 data block

    data block 顾名思义,就是存放数据的,但是,block 对于文件和目录有不同的意义。存放的数据不一样,具体如下:

    • 对于文件来说,就是存放真实是文件内容的,比如文件内容是 "hello shark" 就是存放 "hello shark" 这几个字符串的。

    • 对于目录,Linux 中一切皆文件,目录其实也是文件。目录的 block 中存放了这个目录下的文档名和其对应的 inode 号。像下面这样

    image

    所以整个目录和其下面的文档的记录方式和关系如下图:

    image

    软链接 和 硬链接

    硬链接

    image

    创建硬链接文件

    两个文件的路径必须在同一个文件系统(分区)内

    ln   源文件     硬链接文件路径
    
    ln   anaconda-ks.cfg    an.cfg
    
    

    硬链接不可跨分区
    只能对文件建立硬链接。
    建立硬链接文件,不会占用实际的磁盘空间,也不会使用用文件系统的 inode 号。

    软链接

    image

    创建软链接

    ln   -s[f]   源文件绝对路径    软链接文件路径
    
    ln   -s    /root/anaconda-ks.cfg       /tmp/an-ks.cfg
    
    

    -f 选项是覆盖原来的软连接文件

    软链接可以跨分区
    对文件、目录都可以创建软链接。
    建立软链接文件,实际上就是创建一个新的文件一样,所以会使用文件系统的 inode 号,也会占用用实际的磁盘空间,只不过这个磁盘空间的大小是源文件的绝对路径名所占用的大小。
    比如源文件的绝对路径名是 /root/a.txt, 那么软链接到文件占用的实际磁盘空间是 11 bytes(字节),因为,英文的每个字符大小是 1 个字节。

    五、 权限与指令间的关系

    我们知道权限对于使用者帐号来说是非常重要的,因为他可以限制使用者能不能读取/创建/删除/修改文件或目录! 在这一章我们介绍了很多文件系统的管理指令,第五章则介绍了很多文件权限的意义。在这个小节当中, 我们就将这两者结合起来,说明一下什么指令在什么样的权限下才能够运行吧!_

    1、让使用者能进入某目录成为“可工作目录”的基本权限为何:

    • 可使用的指令:例如 cd 等变换工作目录的指令;
    • 目录所需权限:使用者对这个目录至少需要具有 x 的权限
    • 额外需求:如果使用者想要在这个目录内利用 ls 查阅文件名,则使用者对此目录还需要 r 的权限。

    2、使用者在某个目录内读取一个文件的基本权限为何?

    • 可使用的指令:例如本章谈到的 cat, more, less等等
    • 目录所需权限:使用者对这个目录至少需要具有 x 权限;
    • 文件所需权限:使用者对文件至少需要具有 r 的权限才行!

    3、让使用者可以修改一个文件的基本权限为何?

    • 可使用的指令:例如 vi 文本编辑器等;
    • 目录所需权限:使用者在该文件所在的目录至少要有 x 权限;
    • 文件所需权限:使用者对该文件至少要有 r, w 权限

    4、让一个使用者可以创建一个文件的基本权限为何?

    • 目录所需权限:使用者在该目录要具有 w,x 的权限,重点在 w 啦!

    5、让使用者进入某目录并执行该目录下的某个指令之基本权限为何?

    • 目录所需权限:使用者在该目录至少要有 x 的权限;
    • 文件所需权限:使用者在该文件至少需要有 x 的权限

    例题:让一个使用者 shark 能够进行“cp /dir1/file1 /dir2”的指令时,请说明 dir1, file1, dir2 的最小所需权限为何?答:执行 cp 时, dmtsai 要“能够读取来源文件,并且写入目标文件!”所以应参考上述第二点与第四点的说明! 因此各文件/目录的最小权限应该是:

    • dir1 :至少需要有 x 权限;
    • file1:至少需要有 r 权限;
    • dir2 :至少需要有 w, x 权限。

    例题:有一个文件全名为 /home/student/www/index.html ,各相关文件/目录的权限如下:

    drwxr-xr-x 23 root    root    4096 Sep 22 12:09 /
    drwxr-xr-x  6 root    root    4096 Sep 29 02:21 /home
    drwx------  6 student student 4096 Sep 29 02:23 /home/student
    drwxr-xr-x  6 student student 4096 Sep 29 02:24 /home/student/www
    -rwxr--r--  6 student student  369 Sep 29 02:27 /home/student/www/index.html
    
    

    请问 shark 这个帐号(不属于student群组)能否读取 index.html 这个文件呢?答:虽然 www 与 index.html 是可以让 shark 读取的权限,但是因为目录结构是由根目录一层一层读取的, 因此 shark 可进入 /home 但是却不可进入 /home/student/ ,既然连进入 /home/student 都不许了, 当然就读不到 index.html 了!所以答案是“shark不会读取到 index.html 的内容”!

    那要如何修改权限呢?其实只要将 /home/student 的权限修改为最小 711 ,或者直接给予 755 就可以啦! 这很重要!

    六、文档默认权限 umask

    权限掩码

    umask  -S
    
    

    当用户创建文档时,创建后的默认权限计算方法

    • 创建文件时:

    (-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r--

    • 创建目录时:

    (drwxrwxrwx) - (d----w--w-) ==> drwxr-xr-x

    修改用户的 umask 可以在 /etc/profile/etc/bashrc 文件中修改。

    七、 文件特殊权限: SUID, SGID, SBIT

    Set UID

    名词介绍

    二进制文件 就是可以被执行的文件,通俗说就是命令文件,程序文件,就想是 windows 中的 .exe 文件。

    二进制文件也可以叫做二进制程序

    先看一个文件

    ➜  ~ ls -l /usr/bin/passwd
    -rwsr-xr-x 1 root root 27832 Jun 10  2014 /usr/bin/passwd
    
    

    上面文件拥有者的权限部分中的 x 位置,出现了一个 s, 这个 s 标识就代表了这个文件具有 SUID 特殊权限。

    其作用和限制如下:

    • SUID 权限仅对二进制程序(binary program)有效;
    • 执行者对于该程序需要具有 x 的可执行权限;
    • 本权限仅在执行该程序的过程中有效 (run-time);
    • 在执行此文件时,执行者将具有该程序拥有者 (owner) 的权限。

    给一个文件设置 SUID

    chmod    u+s   file    
    
    

    Set GID

    当 s 标志在文件拥有者的 x 项目为 SUID,那 s 在群组的 x 时则称为 Set GID,即 SGID .

    当一个文件具有 SGID(用的情况不多)

    • SGID 对二进制程序有用;
    • 程序执行者对于该程序来说,需具备 x 的权限;
    • 执行者在执行的过程中将会获得该程序群组的权限!

    当一个目录具有 SGID

    • 用户若对于此目录具有 r 与 x 的权限时,该用户能够进入此目录;
    • 用户在此目录下的有效群组(effective group)将会变成该目录的群组;
    • 用途:若用户在此目录下具有 w 的权限(可以新建文件),则用户所创建的新文件时,该新文件的群组与此目录的群组相同。

    Sticky Bit

    这个 Sticky Bit, SBIT 目前只针对目录有效,对于文件已经没有效果了。

    SBIT 对于目录的作用是:

    • 当使用者对于此目录具有 w, x 权限,亦即具有写入的权限时;
    • 当使用者在该目录下创建文件或目录时,仅有自己与 root 才有权力删除该文件
    ls   -ld   /tmp
    
    

    设置 SBIT

    chmod   o+t    a/
    

    相关文章

      网友评论

          本文标题:6.权限

          本文链接:https://www.haomeiwen.com/subject/dubtwctx.html