6.权限

一、属主,属组,其他人

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.权限)