Linux的权限管理操作


一、权限概述


1、引言


Linux                  系统一般将文档可存/取访问的身份分为3                   个类别: user(文件的创建者或拥有者)、group(文件所属组里的用户)、other(其他用户) 3 种身份各有read(读)、write(写)、execute(执行)等权限

2、什么是权限




Linux的权限管理操作_Docker

Linux的权限管理操作_云计算_02在多用户计算机系统的管理中,权限是指某个特定的用户具有特定的系统资源使用权利。 在Linux 中分别有读、写、执行权限:

Linux的权限管理操作_云计算_03注:一般给予目录读权限时,也将会给其执行权限,属于“套餐”组合

3、身份介绍


U(the user who owns it)

user,文件所有者,默认为文档的创建者

G(other users in the file's group)

group,在文件所属组(默认是创建文件的用户的主组)里的用户

O(other user not in the file's group)

other,既不是文件的创建者,也不在文件属组里的用户,称为其他人

Linux的权限管理操作_云计算_04注意:除了ugo以外,还有一个字母a(all users),表示所有用户,包含ugo

root用户(超级管理员)

在Linux 中,还有一个神一样的用户,这就是root 用户,因为在所有用户中它拥有最大的权限 ,可以管理着普通用户。因此以后在设置文档的权限的时候不必考虑root 用户。

举个栗子:



Linux的权限管理操作_云计算_05

假设有一家人,家里只有三兄弟,分别是王大毛、王二毛与王三毛三个人,而这个家庭是登记在王大毛 的名下的!所以,『王大毛家有三个人,分别是王大毛、王二毛与王三毛』,而且这三个人都有自己的 房间,并且共同拥有一个客厅喔!

使 用者的意义:由于王家三人各自拥有自己的房间,所以,王二毛虽然可以进入王三毛的房间,但是二

毛不能翻三毛的抽屉喔!那样会被三毛 K 的!因为抽屉里面可能有三毛自己私人的东西,例如情书啦, 日记啦等等的,这是「私人的空间」,所以当然不能让二毛拿啰!

群 组的概念:由于共同拥有客厅,所以王家三兄弟可以在客厅打开电视机啦、翻阅报纸啦、坐在沙发上

面发保啦等等的!反正,只要是在客厅的玩意儿,三兄弟都可以使用喔!因为大家都是家人嘛!

这样说来应该有点晓得了喔!那个「王大毛家』就是所谓的『群组」啰,至于三兄弟就是分别为三个

『使用者」,而这三个使用者是在同一个群组里面的喔!而三个使用者虽然在同一群组内,但是我们可 以设定权限」,好让某些用户个人的信息不被群组的拥有者査询,以保有个人『私人的空间」啦!而设 定群组共享,则可让大家共同分享喔!

其 他人的概念:好了,那么今天又有个人,叫做张小猪,他是张小猪家的人,与王家没有关系啦!这个

时候,除非王家认识张小猪,然后开门让张小猪进来王家,否则张小猪永远没有办法进入王家,更不要 说进到王三毛的房间啦!不过,如果张小猪透过关系认识了三毛,并且跟王三毛成为好朋友,那么张小 猪就可以透过三毛进入王家啦!呵呵!没错!那个张小猪就是所谓的『其他人,Others』啰!

超 级管理员的概念:不过,这里有个特殊的人物要来介绍的,那就是『万能的天神」!这个天神具有无

限的神力,所以他可以倒达任何他想要去的地方,可呵!那个人在 Linx 系统中的身份代号是『root』啦!所以要小心喔!那个 root 可是『万能的天神』喔!

二、普通权限


1、使用ls查看文件权限


要设置权限,就需要知道文件的一些基本属性和权限的分配规则。在Linux 中,ls 命令常用来查看文档的属性,用于显示文件的文件名和相关属性。

Linux的权限管理操作_云计算_06



Linux的权限管理操作_Docker_07

Linux的权限管理操作_云计算_08注:标红的部分就是Linux 的文档权限属性信息。

2、文件权限详解


L inux 中存在拥有者(owner)、用户组(group)和其他用户(others)概念,各自有不同的权限, 对于一个文档来说,其权限具体分配如下:



Linux的权限管理操作_云计算_09


Linux的权限管理操作_云计算_10

3、设置文件权限


Linux的权限管理操作_云计算_11语法:# chmod  [选项] 权限模式 文档

常用选项:-R:递归设置权限 (当文档类型为文件夹的时候)

权 限模式:就是该文档需要设置的权限信息

文 档:可以是文件,也可以是文件夹,可以是相对路径也可以是绝对路径。

Linux的权限管理操作_云计算_12注意点:如果想要给文档设置权限,操作者要么是root 用户,要么就是文档的所有者。

① 字母形式


Linux的权限管理操作_云计算_13

相关参数详解:

字母

选项

作用

u(谁)

user

文件拥有者

g(谁)

group

与拥有者同组的组内用户

o(谁)

other

其他用户

a(谁)

all

所有人(包含ugo)

+(作用)

增加作用

-(作用)

移除作用

=(作用)

等于

赋值作用

r(权限)

read

可读权限

w(权限)

write

可写权限

x(权限)

execute

可执行权限

-(权限)

-

没有任何权限

Linux的权限管理操作_云计算_14注:

1) 如果在设置权限的时候不指定给谁设置,则默认给所有用户设置

2) 如果同时设置多个身份的权限时候,每个身份之间需要通过英文逗号分开。示例代码1:为word.txt文件设置权限(u=rwx,g=rw,o=r)

Linux的权限管理操作_Docker_15

Linux的权限管理操作_Docker_16注:当文档拥有执行权限(任意部分),则其颜色在终端中是绿色。示例代码2:创建1.sh文件,并为其添加x可执行权限

Linux的权限管理操作_云计算_17



Linux的权限管理操作_Docker_18

Linux的权限管理操作_Docker_19chmod a+x 1.sh

示 例代码3:为文件夹设置权限(删除o的x权限)



Linux的权限管理操作_云计算_20
② 数字形式

经常会在一些技术性的网页上看到类似于# chmod 777 a.txt  这样的一个权限,这种形式称之为数字形式权限。

read=>4 write=>2 execute=>1

数字

权限

作用

0

-

不能读,不能写,不能执行

1

execute

不能读,不能写,可执行

2

write

不能读,可写,不能执行

3

2+1

不能读,可写,可执行

4

read

可读,不能写,不能执行

5

4+1

可读,不能写,可执行

6

4+2

可读,可写,不能执行

7

4+2+1

可读,可写,可执行

示 例代码1:给install.log设置权限,所有者拥有全部权限,同组用户拥有可读可执行权限,其他用户只读。



Linux的权限管理操作_Docker_21


Linux的权限管理操作_云计算_22

示 例代码2:一个面试题

问题:用超级管理员设置文档的权限命令是# chmod -R 731 shop,请问这个命令有没有什么不合理的地方?

分析:



Linux的权限管理操作_云计算_23
③ 练习题

1) 使用root 用户设置文件夹/root/shop 的权限为:所有者全部权限,同组用户拥有读和执行权限,其他用户没有权限,请使用数字权限的形式设置:750

2) 请使用root 用户写出设置文件/root/readme.txt 文件的权限,权限要求为:所有者拥有全部权限, 同组用户要求可以读写,其他用户只读,要求使用数字形式;764

3) 张三疯(root)收到某个MM 的情书,请使用数字形式设置张三疯的Email 情书权限文件为/root/email.doc,权限要求只有所有者可以读写,除此之外任何人没有权限;600

4、特别说明


在Linux  中,如果要删除一个文件,不是看文件有没有对应的权限,而是看文件所在的目录是否有写权限,如果有才可以删除(同时必须具备执行权限)。

三、特殊权限(扩展)


1、设置位S


Linux的权限管理操作_云计算_24作用:为了让一般使用者临时具有该文件所属主/组的执行权限。

例如:/usr/bin/passwd在执行它的时候需要去修改/etc/passwd和/etc/shadow等文件,这些文件除了

root外,其他用户都没有写权限,但是又为了能让普通用户修改自己的密码,该怎么办呢?

Linux的权限管理操作_Docker_25答:可以临时让他们具有root的权限,而这个s权限就是用来完成这个特殊任务的。s权限只能应用在二

进 制的可执行文件上。



Linux的权限管理操作_云计算_26

示例代码:不想让普通用户修改自己的密码



Linux的权限管理操作_云计算_27


Linux的权限管理操作_Docker_28

Linux的权限管理操作_云计算_29注:which命令可以用于查看二进制可执行文件所在位置去除s权限,基本语法:

测试普通用户:

Linux的权限管理操作_云计算_30

注 :0755最前面的0表示不使用任何特殊权限,该位上的数字可以0,1,2,3,4,5,6,7

数字

权限

作用

0

---

无任何权限

1

--t

stick bit,针对公共目录,只有root和文件的创建者可以删除文件,其他人只能自己管理自己。设置方式:o+t 或 o-t 或 1xxx

2

-s-

setgid强制位,针对目录,任何在该目录里创建的任何文件的属组都继承了该目录 的属组。设置方式:g+s 或 g-s 或 2xxx

3

-st


4

s--

setuid冒险位,针对二进制文件,用户临时拥有文件拥有者的权限。设置方式:u+s

或 u-s 或 4xxx

5

s-t


6

ss-


7

sst


2、沾附位T


只针对目录生效,它表示只能让所属主以及root可以删除(重命名/移动)该目录下的文件。比如/tmp目录 本来就是任何用户都可以读写,如果别人可以任意删除(重命名/移动)我们自己的文件,那岂不是很危险,  所以这个t权限就是为了解决这个问题。

下面通过一个实例来体会这个t权限的用法:

① 在/tmp目录下创建test文件夹

Linux的权限管理操作_Docker_31

② 设置特殊权限位T



Linux的权限管理操作_Docker_32

③ 切换普通用户cndws,创建test/readme.txt文件

Linux的权限管理操作_Docker_33



Linux的权限管理操作_云计算_34

④ 切换到第二个用户itcast,尝试删除cndws用户创建的文件readme.txt

⑤  重新切换到root用户,执行删除权限位t操作

Linux的权限管理操作_Docker_35



Linux的权限管理操作_Docker_36

⑥  重新切换到itcast重新删除test/readme.txt

四、ACL访问控制


1、基本命令


getfacl命令:查看文件的ACL策略及权限

setfacl命令: 给文件针对某个用户或者某个组来增加ACL策略

2getfacl命令




Linux的权限管理操作_云计算_37

3setfacl命令


-m : 修改acl策略

-x :去掉某个用户或者某个组的权限

-b :删除所有的acl策略

-R :递归

mask:mask定义除other和所有人(拥有者)外的最大权限



Linux的权限管理操作_云计算_38


Linux的权限管理操作_云计算_39

示 例代码1:给cndws单独在file1文件上增加rw权限

验证file1文件是否具有rw权限:



Linux的权限管理操作_Docker_40

示 例代码2:给itcast组在file2文件上增加rw权限

Linux的权限管理操作_云计算_41

五、umask(扩展)


1、什么是umask


umask表示创建文件时的默认权限(即创建文件时不需要设置而天生的权限)

例如:

root用户下,touch a ,文件a的默认权限是644 普通用户下,touch b ,文件b的默认权限是664

644和664我们并没有设置,其中的关键因素就是umask

2umask




Linux的权限管理操作_Docker_42

Linux的权限管理操作_云计算_43可以使用命令umask来查看umask的值: 基本语法:# umask

注:0022中第一位0代表特殊权限位,可以不设置。分析:


目录

文件

最高权限

777 rwxrwxrwx

666 rw-rw-rw-

命令umask可以查看当前用户的umask值 (查看umask只看后三位,总共是4位)


超管root

普通用户

umask

022

002

结合上述的举例得知:



Linux的权限管理操作_Docker_44

但是:

Linux的权限管理操作_Docker_45当umask为011,创建文件的默认权限应该是655,但是实际运行的时候默认权限是 666



Linux的权限管理操作_云计算_46


Linux的权限管理操作_云计算_47

Linux的权限管理操作_云计算_48Linux的权限管理操作_Docker_49相减得:



Linux的权限管理操作_云计算_50

Linux的权限管理操作_Docker_51注:这个特殊情况仅出现在文件,因为文件[二进制文件除外]没有x执行权限), 所以,查看文件的umask时我们要特别注意是否有奇数位(x表示1)

3、修改umask


Linux的权限管理操作_云计算_52umask + 数值修改当前用户的umask 如: # umask 044

不过这样设置的umask会在用户重新登录的时候恢复原来的值,我们可以把修改的umask保存在

Linux的权限管理操作_云计算_53~/.bashrc

操作步骤:

Linux的权限管理操作_云计算_54



Linux的权限管理操作_云计算_55

示例代码:

六、属主(zhu)与属组(zu)设置


1、什么是属主与属组?


属主:所属的用户(文件的主人),文档所有者属组:所属的用户组(同组用户的组名称)

Linux的权限管理操作_Docker_56基本语法: # ls -l 查看文档属主与属组



Linux的权限管理操作_云计算_57

这两项信息在文档创建的时候会使用创建者的信息(用户名、用户所属的主组名称)。

之所以需要设置这个:如果有时候去删除某个用户,则该用户对应的文档的属主和属组信息就需要去修 改(类似离职之前的工作交接)。

2、修改文件的属主


Linux的权限管理操作_Docker_58基本语法: # chown [-R] 新文档拥有者名称 文档路径

作 用:更改文档的所属用户(change owner)

选项:-R 代表递归修改文件的属主

示例代码1:将readme.txt文档拥有者更改为cndws



Linux的权限管理操作_云计算_59

示例代码2:将shop文件夹的拥有者更改为cndws



Linux的权限管理操作_云计算_60

3、修改文件的属组


Linux的权限管理操作_Docker_61基本语法: # chgrp [-R] 新文档组名称 文档的路径

作 用:更改文档的所属用户组(change group)



Linux的权限管理操作_Docker_62

示例代码1:将readme.txt文档所属组修改为itcast

示例代码2:将shop文档所属组修改为itcast



Linux的权限管理操作_云计算_63

4、同时修改属主与属组


问题:如何通过一个命令实现既可以更改所属的用户,也可以修改所属的用户组呢? 答:使用 chown 命令

Linux的权限管理操作_Docker_64基本语法: 法:# chown [-R] username:groupname 文档路径

示例代码:将readme.txt文件的拥有者与所属组都更改为root

Linux的权限管理操作_云计算_65



Linux的权限管理操作_Docker_66