09、Linux 实战:文档权限管理

文档权限

权限:多用户计算机系统管理中,不同用户对不同的的系统资源特定权利

Linux系统将文件可存取和访问的身份分为3个类别:owner、group、others

且3种身份对同一文件有着不同的权限(read、write、execute)

权限 含义
读权限 (read) 对文件夹,用户是否能够列出目录结构
对文件,用户是否能够查看文件内容
写权限 (write) 对文件夹,用户是否可在文件夹下创建/删除/复制/移动等操作
对文件,用户是否能够编辑文件内用
执行权限 (execute) 对文件夹,用户是否可以切入该文件夹内
对文件,用户是否能够执行该文件(特别脚本文件)

//在Linux中是否可以对一个文件进行操作(删除、复制、命名和移动等)

不是看是文件对应的权限,而是看文件所在文件夹有没有对应的权限

1)owner身份:文件所有者(默认为文档的创建者)

//类似个人的“私密文档”,其他普通用户对该文档无权限

2)group身份:与文件所有者同组的用户

//一个团队内的所有用户针对某一文档拥有相等的权限(个人文档除外)

3)others身份:其他用户(相对于owner和group)

//其他用户是一个相对概念

4)root身份:超级用户

//Linux中权限最大的用户,管理着其他普通用户

如:查看/root目录所有文件的详细权限信息

 

//红框内为该文档相对应的全部权限分布

//ls -l等效于“ll”,但ll仅查询当前目录下

Linux中存在多用户和多用户组,所以针对不同身份有着不同权限

 

1)权限分配中,rwx是一个固定组合(顺序不能发生变化)

若没有某一权限,则用“-”代替

2)属主:文档所属的用户

3)属组:文档所属的用户组

如:查看/root目录所有文件的属主和属组

 

//文档在创建时会默认使用创建者的信息为该两项的信息

其中用户组为该用户的初始组(若更改,则为有效用户组)

配置权限

chmod命令:设置用户对文档的权限

指令格式:chmod 选项 权限信息 文档路径

选项 含义
-R 递归设置权限(文件夹时)
-v 显示权限变更的详细资料

//仅管理员和该文档所有者可给该文档设置权限

权限 对应字母 对应数字
r 4
w 2
执行 x 1

字母设置权限:通过字母构成权限信息

 

//加减权限是相对于已经存在的权限做变更

且加减权限不会对没有指定的权限作出变动

而“=”权限是无视当前权限,直接将结果设置为具体的权限

权限信息为:谁 作用 权限

1)三者中间没有空格

2)若设置权限时没有指定用户,则默认给所有用户设置

3)若权限信息中有多个权限设置,应用“,”进行分隔(而不是空格)

4)若给多个身份设置同样权限,还可以将“谁”写在一起

如:给mwl文件设置对应权限
 

数字设置权限:通过数字构成权限信息
 

1)给多个身份设置权限时,数字需按照u、g、o顺序写在一起

2)其中数字2和3不能设置,该类权限设置存在不合理

//一个文件可写但不可读,也无法完成对应的写操作

如:给mwl文件设置为:用户rwx,用户组rx,其他用户x
 

1)文件的默认权限:666

2)目录的默认权限:777

umask命令:查看/修改文档建立后的默认反权限(以数字掩码形式显示)

指令格式1:umask

1)文件的默认权限:666

2)目录的默认权限:777

3)umask配置文件为:/etc/bashrc

//也可以字母形式显示权限:umask -S

如:通过umask和umask -S查看系统默认反/正权限
 

1)数字显示含义为:建立文档时,使用该文档默认权限减去该掩码

2)系统建立文档时,先使用默认权限,再根据umask设置进行调整

且不同用户的umask设置也不一样

指令格式2:umask 权限 //临时修改

1)权限可用数字和字母两种形式表达

如:修改建立文件夹后的权限
 

chown命令:修改文档的属主(所属用户)

指令格式1:chown 用户名 文档路径

指令格式2:chown 用户名:用户组名 文档路径

//同时更改文档的属主和属组

chgrp命令:修改文档所属用户组

指令格式:chgrp 用户组名 文档路径

1)chown和chgrp命令都有“-R”选项,代表递归设置权限(文件夹时)

特殊权限

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

SUID(Set UID):设置用户特殊权限

1、 SUID仅对二进制程序(BinaryProgram)有效;

//SUID对目录是无效的(也不能用在Shell脚本上)

2、 执行者对于该程序需要具有可执行权限(x);

//需通过执行该程序才能获得对应权限

3、 执行者将具有程序拥有者(owner)的权限;

//在执行该程序时,将获得和程序拥有者相同的权限

4、 该权限仅在执行程序过程中有效;

SGID(Set GID):设置用户组特殊权限

1、 SGID对二进制程序和文档都有效;

2、 执行者对于该程序需要具有可执行权限(x);

3、 执行者将具有程序属组的权限;

4、 该权限仅在执行程序过程中有效;

当文件夹设置SGID权限后:

1)用户具有文件夹r和x权限,就可进入该文件夹

2)用户在该文件夹下的有效用户组为该目录的属组

//用户在该文件夹建立的新文档(需具有w权限)

其属组都与该文件夹的属组相同(而不是建立者的属组)

SBIT(Sticky Bit):设置文件夹的特殊权限(仅对文件夹有效)

1、 具有文件夹w和x权限,就具有写入的权限;

2、 在具有SBIT文件夹下建立的文档,则仅拥有者和root用户可改动;

特殊权限设置:通过数字构成权限信息

设置格式:chmod 权限信息 文档路径

1)数字形式分别为:4、2、1

2)字母形式分为别:s、s、t

//权限信息应包含三个普通权限信息

如:给test1文件设置SUID特殊权限
 

如:给test文件设置SUID和SGID权限
 

//若设置特殊权限时无对应x权限,则对应的s或t会变为S或T

如:给test2文件夹设置SBIT特殊权限
 

隐藏权限

chattr命令:设置文档的隐藏权限

指令格式:chattr 选项隐藏权限信息 文档路径

1)只有root用户才有权限进行修改

2)选项为:-、+、=

隐藏权限 含义
a 文档仅能增加数据,不能删、改数据
i 文档不能被增、删、改数据 且不能设置链接文档
s 使文档不支持事务的回滚
u 使文档支持事务的回滚
S 即时更新文档
c 将文档压缩后再存放

3)若目录设置“i”,则仅能修改该目录下的文件内容

4)事务的回滚:数据在删除后,是否可以恢复

5)文档设置“S”,则文档被修改后立刻同步数据写入磁盘

//文档一般都是非同步写入磁盘的

lsattr命令:显示文档隐藏权限信息

指令格式:lsattr 选项 文档路径

选项 含义
-a 全部文件(连同隐藏文档)
-d 若文档是文件夹 则显示文件夹本身的属性,不是文件夹内的文件名
-R 连同子目录内容一起列出来(目录所有文件都显示)

如:给/etc/shadow设置i隐藏权限
 

//因/etc/shadow是记录用户密码的特殊文件

若设置i权限,则不能在文件添加数据、

就导致不能添加新的用户

Access Control List

ACL(Access Control List):访问控制列表

1)ACL可以针对单一用户、单一文件和单一目录进行r、w、x的权限设置

getfacl命令:查询文档ACL

指令格式:getfacl 文档路径

setfacl命令:设置文档ACL

指令格式1:setfacl 选项 参数 文档路径

1)若设置用户,参数为:“u:用户名:权限”

2)若设置用户组,参数为:“g:用户组名:权限”

3)若两个“::”中没有用户名/用户组名,则默认为文档的属主/属组

//权限字段不可为空,若没有权限应该加上一个减号“-”

选项 含义
-m 添加权限参数中的权限为ACL设置
-x 删除权限参数中的权限从ACL设置
-b 删除所有ACL设置
-k 删除默认的ACL设置
-R 递归设置ACL(子目录同时被设置)
-d 设置默认ACL参数 只对目录有效,目录下新建文档时会引用该数据

//若目录和该目录下的文件同时设置了ACL

则目录下的文件以该文件本身的ACL为准(文件ACL > 目录ACL)

如:使mwl用户对/root/test文件拥有rx权限
 

指令格式2:setfacl -m m:权限 文档路径 //设置文档ACL权限范围

1)通过改变mask规范设置最大允许权限范围

2)有效权限:用户/用户组所设置的权限在mask的权限设置范围内才能生效

如:设置mwl用户对该文件权限为rwx,再设置/root/test文件的mask为r
 
//若设置顺序反过来,则mask对用户权限设置没有影响

指令格式3:setfacl -m d:参数 目录路径

1)ACL的权限设置默认不会被子目录继承

如:设置mawenlong目录下的子目录默认权限
 

读取/修改文件

tr命令:修改数据中的指定字符

指令格式1:tr 选项 字符 //修改字符

选项 含义
-d 删除数据中的关键词
-s 删除连续重复的字符以,且保留一个

指令格式2:tr 原字符 目标字符 //替换字符

如:使用tr调整echo的输出
 

expand命令:将数据中的跳格符(Tab)转换成空格符

指令格式:expand 选项 文档路径

选项 含义
-t 定义一个Tab按键等于多少空白字符 (默认是8个字符)

//unexpand命令实现的效果则相反(用法相同)

col命令:调整输入/输出内容

指令格式:col 选项

选项 含义
-x 以多个空格符代替跳格符(Tab)
-b 删除所有的控制字符(包括RLF和HRLF)

sort命令:将文件中数据进行排序并输出

指令格式:sort 选项 文件路径

1)排序默认是以ASCII码值比较进行排序,且排序的字符与语系的编码有关

选项 含义
-f 忽略大小写
-b 忽略行首的空格
-n 以数字形进行排序
-M 以月份进行排序
-r 反向排序
-t 指定数据的分隔符
-k 指定以那个区间进行排序

//-t和-k一起使用才有意义(类似cut的-d和-f)

//指定的分隔符需用‘’括起来

uniq命令:显示/忽略数据中的重复行(默认忽略)

//一般与sort命令结合使用

指令格式:uniq 选项

选项 含义
-i 忽略大小写
-c 显示重复出现的次数
-d 仅显示重复出现的行列

split命令:以大小/行数把一个文件分割成多个数据

指令格式:split 格式 文件路径 前缀名

选项 含义
-b 以文件大小分割数据
-l 以行数分割文件

//文件被分割后,其名为:前缀名aa、前缀名ab、前缀名ac以此类推

若没有前缀名,则默认以aa、ab、ac命名以此类推

//分割后原文件还会被保存

如:将/root/etc/passwd文件按10行分割并保存到/root/test文件夹下
 

join命令:根据两个文件指定相同的栏位进行连接

指令格式:join 选项 文件路径1 文件路径2

选项 含义
-t 指定数据的分隔符
-i 忽略大小写
-1 指定文件1的栏位
-2 指定文件2的栏位

1)默认以两个文件的第1个栏位进行比较

2)栏位:数据中被分隔符分割的数据栏

如:将文件/etc/passwd和文件/etc/group整合
 

//因为GID在/etc/passwd中是第4个栏位,在/etc/group中是第三个栏位

paste命令:将多个文件按照队列进行合并

指令格式:paste 文件1 文件N

1)不论文件的内容是否相同,都会按照行数进行合并

2)“-”代表终端标准输出的数据