Linux背景知识(五):文件和文件安全

Linux以其完备、健壮的文件体系著称,通过学习本文将对文件安全有一个大体的认识


目录


标准文件许可

“许可”这个词翻译的不好,我要说的是“permission”,明白人都懂

在讲解前,我希望大家能明白一个基本概念:在Linux中,维护文件安全靠两样,一是ownership,而是permission,ownership(所有权)表示拥有该文件,继而可以对该文件进行permission的(授权)的转移

文件所有权(ownership)

用户所有权和用户组所有权

前面讲到,用户和用户组和基本信息可以在/etc/passwd/etc/group中进行配置

Linux的每个文件,都有两个“所有权”,一是用户所有权,二是用户组所有权,可以通过ls -lh命令查看

这里写图片描述

在Mac上体现的不好……上面就拿DOS-tools这个文件来讲,它的user owner是macbookpro,group owner是stuff

更改用户组所有权

通过chgrp命令更改文件的用户组所有权

chgrp 新组群 文件名

更改用户所有权

通过chown命令更改文件的用户所有权

chown 新用户 文件名

也可以通过chown命令直接同时更改用户组和用户所有权

chown 新用户组:新用户 文件名

文件类型列表

我们知道ls -l是列出文件的长列表形式之命令(见本文首图)

细心的人看到(有眼睛的人)都能看到每个文件记录行的开头有10个字符

这里写图片描述

首字母表示文件类型,d=>文件夹,-=>文件,l=>链接,p=>管道

这里写图片描述

文件许可转让(permission)

1. rwx

这里写图片描述

2. ls长列表的二重含义

ls -l长列表开头10字符长度玩意剩下的9个字幕,按照从前往后分别表示用户所有权、用户组所有权、其他人所有权,每三个字母为一组

这里写图片描述

以我这个普通文件(regular file)为例,如果拥有该文件的用户所有权可以读、写该文件,这时候用户所有权不起作用,否则如果属于文件的用户组,则拥有读的权限,其他人也是一样

这里写图片描述

3. chmod命令

chmodchown命令不同的是,chmod修改的是某个文件相应权限组(用户、用户组、其他)的权限,而chown修改的是某个文件有哪些权限组成员(用户有哪些人、用户组有哪些人)

这里写图片描述

4. umask命令

umask决定当新文件创建后默认的文件权限列表

这里写图片描述

5. mkdir -m

可以使用-m开关在创建文件时同时设置文件权限

6. cp -p

为了保护(伪装)要修改文件的原始权限设定和时间戳,使用-p开关

这里写图片描述


特殊文件权限

Linux的特殊权限有三种,1. sticky bit,2. setuid bit,3. setgid bit

粘滞位(sticky bit)

『粘滞位』这个词不知道翻译的如何,应该没问题吧

可以在目录上设置粘滞位(sticky bit),以防止用户删除它们不作为用户所有者拥有的文件;粘滞位显示在与其他人的x许可相同的位置;粘性位由t(表示x也存在)或T(当其他人没有x时)表示

通俗的说,sticky bit主要用在全局可写的文件夹上——如果有别的用户移动、创建文件到该文件夹,只有该被打粘滞位的文件夹的所有者或者root用户有权删除这个新文件

这里写图片描述

这里我只有两个用户(macbookpro、root),就不演示了

setuid和setgid

和sticky bit一样,setuid和setgid都是特殊文件权限

基础操作越用的不多,这里先略(以后有机会补上


访问控制列表(access control list)

这个东西对于普通用户肯定用不上,是更高级的文件权限控制手段

acl文件(/etc/fstab)

access control lists(简称acls),必须用/etc/fstab文件中列出的选项进行挂载(mount)

这里写图片描述

哎呀这个也没有!算了不讲反正大家都懂 ;-)

讲真,这个其实还有点重要——以后单独列出一章讲解(此处略


文件链接

在Linux中,文件链接分为硬连接(hard link)符号链接(symbol link,也叫软连接)两种

学习文件链接,首先要知道一个重要的基础概念:索引节点(inode)

这里写图片描述

(支持开源,感恩开源……)

索引节点(inode)

看名字,索引“节点”应该是一种类似结点的数据结构(data structure)——没错,而且每当在文件系统创建新的文件,都会把该文件的metadata(元数据,我觉得理解成“额外数据”也挺好)存储在这里,这些额外的数据比如文件的访问属性等(注意:不包括文件名或文件的实际内容)

索引节点表(inode table)

索引节点表存储所有的索引节点,当文件系统被创建(mkfs命令)时被创建,

使用df -i命令查看有哪些索引节点在被挂载的文件系统中的空闲(free)的

这里写图片描述

这里写图片描述

索引节点编号(inode number)

每个索引节点都有一个独一无二的索引节点编号(inode number),使用-i开关进行查看

这里写图片描述

重申:文件的inode不存储该文件的文件名(文件名存储在对应的文件夹inode里面);另外inode存储着一个指向文件实际内容的指针

文件目录(directory)

文件目录,俗语叫“文件夹”,它本质上是一个表(table)

文件夹(还是文件夹叫的亲切)是这样一张表:它以映射表(map)的形式存储由文件名和文件对应的inode组成的键值对

让我们看看吧(敲:ls -ali

这里写图片描述

总之,inode和指针有着千丝万缕的联系(可以类比学习、记忆)

创建一个硬链接(hard link),不用加开关(默认为hard link)

这里写图片描述

ln命令创建的硬链接和被链接的文件有一样的inode,这意味:1. 着它们有着相同的permission和ownership,2. 任何时候二者文件内容相同(因为inode总是有一个指向文件的实际内容的指针)

硬连接创建的文件链接,即使原始文件被删除,硬连接还可以独立存在——文件的inode存储指向改文件的硬链接个数,当改计数归零则自动删除,即从磁盘上抹销该文件

创建一个符号链接(symbol link),使用-s开关

这里写图片描述

可以看到,符号链接的inode和原文件的inode没有关系,这就是说

如果原始文件存在(hard link数≥1),就不会有毛病

这里写图片描述

但是如果删除了最后一个hard link,剩下的symbol link——它的文件内容已经随着最后一个硬链接的消失被抹销了,(文件名还在因为其parent directory仍然存在)——你可以继续往『原来』的那个软连接里面写数据,这会自动创建一个新的source.txt文件作为原来的硬链接——“原来”打了双引号,因为ls -li看到这时“原来”的软连接的inode其实已经改变了(怎么说呢,软连接比较容易叛变?)

这里写图片描述

这里写图片描述

再会!

猜你喜欢

转载自blog.csdn.net/abc_12366/article/details/80735315