Linux 权限管理

2023年 7月 25日 157.0k 0

一、权限概述

1、什么是权限

 在多用户计算机系统的管理中,权限是指某个特定的用户具有特定的系统资源使用权利。

在Linux 中分别有读、写、执行权限:

权限针对文件 权限针对目录
读r 表示可以查看文件内容;cat 表示可以(ls)查看目录中存在的文件名称
写w 表示可以更改文件的内容;vim 修改,保存退出 表示是否可以删除目录中的子文件或者新建子目录(rm/touch/mkdir)
执行x 表示是否可以开启文件当中记录的程序,一般指二进制文件(.sh) 表示是否可以进入目录中(cd)

注:一般给予目录读权限时,也将会给其执行权限,属于“套餐”组合

2、为什么要设置权限

1)服务器中的数据价值

2)员工的工作职责和分工不同

3)应对自外部的攻击

4)内部管理的需要

3、Linux中的权限类别

Linux 系统一般将文件权限分为3 类:

read(读)

write(写)

execute(执行)

谁对文件有读,写,执行的权限呢?

4、Linux中文件所有者

1)所有者分类(谁)

对于文件的所有者,又分为3类: user(属主) group(属组) other(其他用户)

user(属主) :文件的创建者或拥有者,换句话说,某个账户对这个文件有的权限。

A 一个人

B 多个人

group(属组) :文件所属的用户组,换句话或,某个用户组对这个文件有的权限。

A 一个人

B 多个人

other(其他用户) :除了上面提到的属主和属组之外的所有用户,对这个文件有的权限

A 一个人

B 多个人

举例: 爱情公寓拆迁,拆迁款按照政策,分配如下:一半给张伟,另一半由爱情公寓3601和3602室的其余的伙伴平分。如果把拆迁款看做一个文件,那么这个文件的权限是:

属主:张伟 属组:3601和3602的其他伙伴,他们是一个组 其他用户:没有

2)所有者的表示方法

① u(the user who owns it)(属主权限)

用u表示,文件所有者,默认为文档的创建者

② g(other users in the file's group)(属组权限)

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

③ o(other user not in the file's group)(其他权限)

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

注意:某些资料上会提到linux ugo权限,所谓ugo,就是User, Group,Other三个单词的首字母。就指属主,主组,其他三种权限。

ugo等于u+g+o

a (all)等于u+g+o

我们后面设置文件权限的时候,会用到

④ root用户(超级管理员)

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

二、普通权限管理

1、ls查看文件权限

 要设置权限,就需要知道文件的一些基本属性和权限的分配规则。在Linux 中,ls 命令常用来查看文档的属性,用于显示文件的文件名和相关属性。
​
 ls命令我们之前学过,用于查看文件信息,这里我们使用之前提到过的一个用法,ll
用法一:ll
示例代码:
#ll
含义:查看当前文件夹下的所有目录和文件的详细信息

2、文件权限详解

Linux 中存在三类身份:

属主(owner拥有者) 属组(group用户组) 其他用户(others)

各自有不同的权限,对于一个文档来说,其权限具体分配如下:

img

linux一共有7种文件类型,分别如下: -:普通文件 d:目录文件 l: 软链接(类似Windows的快捷方式)

(下面四种是特殊文件) b:块设备文件(例如硬盘、光驱等) p:管道文件 c:字符设备文件(例如猫等串口设备) s:套接口文件/数据接口文件(例如启动一个MySql服务器时会产生一个mysql.sock文件)

文件权限对应关系(对应数字后面有用)

权限 对应数字 意义
r 4 可读
w 2 可写
x 1 可执行
前10位字符表示含义:
第1位:表示文件类型
第2-4位:表示文件所有者的权限情况,第2位r表示读权限,第3位w表示写权限,第4位x表示执行权限。
第5-7位:表示与文件所有者同组的用户的权限情况,第5位r表示读权限,第6位-表示不可写,第7位x表示执行权限。
第8-10位:表示除了组外的其他用户权限情况,第8位r表示读权限,第9位-表示不可写,第10位x表示执行权限。

前10位字符表示含义: 第1位:表示文件类型 第2-4位:表示文件属主(所有者)的权限情况 第5-7位:表示与文件属组(用户组)的用户的权限情况 第8-10位:表示其他(除了属主和属组之外的其他用户)权限情况

3、设置文件/文件夹权限

命令:chmod

语法:# chmod [选项] 权限模式 文档

作用:增加或者减少当前文件所有者的权限(注意,不能改变所有者,只能改变现有所有者的权限)

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

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

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

注意点:如果想要给文档设置权限,操作者要么是root 用户,要么就是文档的所有者。

① 字母形式(对应前面提到的u g o,r w x的表示方法)

使用root用户登录

用法一:chmod -R 要增加的权限 文件名
示例代码:
#chmod -R u+x quanxian.txt
含义:对于quanxian.txt文件,给 属主 增加 执行 权限

img

用法二:chmod -R 多个要增加的权限 文件名
示例代码:
#chmod -R g+x,o+x quanxian.txt
含义:对于quanxian.txt文件,给 属组 增加 执行 权限,给 其他 增加 执行权限。
注意:同时改变多个对象的权限,中间使用“逗号“分割。

img

用法三:chmod -R 要减少的权限 文件名
示例代码:
#chmod -R o-x quanxian.txt
含义:对于quanxian.txt文件,给 其他 减少 执行权限。

img

用法四:chmod -R 要赋予的权限 文件名
示例代码:
#chmod -R u=rwx,g=rwx,o=rwx quanxian.txt
含义:对于quanxian.txt文件,给属主,属组,其他,都 赋予 读,写,执行权限

img

用法五:chmod -R 要赋予的权限 文件夹
示例代码:
#chmod -R a=rwx quanxianfolder
含义:对于quanxianfolder文件夹,给所有用户(属主,属组,其他),都 赋予 读,写,执行权限

img

如果只想给属主和属组赋予读写权限,要怎么写? 答:u+rw,g+rw

如果同时去掉属组和其他的写权限,要怎么写? 答:g-w,o-w

总结:

权限设置要考虑的因素:
首先:
    给谁设置?
    u    可以给属主设置权限
    g    可以给属组设置权限
    o    可以给其他用户设置权限
    ugo  给所有用户设置权限(主+组+其他)
    a    给所有用户设置权限

第二:
    怎么设置?
    +    添加权限
    -    减少权限
    =    赋予权限

第三:
    增加减少或者赋予什么权限?
    r    读
    w    写
    x    执行

相关参数总结:

字母 选项 作用
u(谁) user 属主
g(谁) group 属组
o(谁) other 其他用户
a(谁) all 所有人(包含ugo)
+(作用) 增加作用
-(作用) 移除作用
=(作用) 等于 赋值作用
r(权限) read 可读权限
w(权限) write 可写权限
x(权限) execute 可执行权限
-(权限) - 没有任何权限

注:

1)如果同时设置多个身份的权限时候,每个身份之间需要通过英文逗号分开。

例如:

#chmod -R u=rwx,g=rwx,o=rwx quanxian.txt

2)在权限设置中,如果有两部分权限一样则可以合在一起写

例如:
# chmod u=rwx,g=rwx
等价于:
# chmod ug=rwx

作业:如果想给属主,属组,其他同时设置权限读写执行,有几种写法,分别是?

② 数字形式

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

文件权限与数字的对应关系,我们会发现没有7这个数字

权限 对应数字 意义
r 4 可读
w 2 可写
x 1 可执行

权限与数字对应详解

img

数字 权限 作用
0 - 不能读,不能写,不能执行
1 execute 不能读,不能写,可执行
2 write 不能读,可写,不能执行
3 2+1 不能读,可写,可执行
4 read 可读,不能写,不能执行
5 4+1 可读,不能写,可执行
6 4+2 可读,可写,不能执行
7 4+2+1 可读,可写,可执行

技巧:不要背上面的表格,只要记住R,W,X对应4,2,1,之后做10以内加法

用法六:chmod -R 要赋予的权限(数字形式) 文件名
示例代码:
#chmod -R 765 quanxian.txt
含义:对于quanxian.txt文件,给属主所有权限,属组读写权限,其他读和执行权限
注意:
全部权限:7 = r+w+x = 4 + 2 + 1
读写权限:6 = r+w = 4 + 2
读和执行:5 = r+x = 4 + 1
综上所述,u=7,g=6,o=5

img

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

分析:

所有者权限:7 = 4 + 2 + 1 = 读 + 写 + 执行
同组用户权限:3 = 2 + 1 = 写 + 执行
其他用户权限:1 = 执行

问题在权限731中的3权限,3表示写+执行权限,但是写又必须需要能打开之后才可以写,因此必须需要具备可读权限,因此此权限设置不合理。

注:实际工作中,各位小伙伴在设置权限时一定不要设置这种"奇葩权限",一般情况下,单独出现2、3的权限数字一般都是有问题的权限。

一般linux系统中,不允许出现777的权限。

755

③ 练习题

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

rwx=7,rx=4+1=5,0
# chmod -R 750 /root/shop

2)请置文件/root/readme.txt 的权限,权限要求为:

 属主拥有**全部**权限,属组要求可以**读写**,其他用户**只读**,要求使用数字形式;
rwx=7,rw=4+2=6,r=4
# chmod 764 /root/readme.txt

3)请设置/root/email.doc权限,权限要求只有属主可以读写,除此之外任何人没有权限;

rw=6,0,0
# chmod 600 /root/email.doc

4、特别说明

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

权限针对文件 权限针对目录
读r 表示可以查看文件内容 表示可以(ls)查看目录中存在的文件名称
写w 表示可以更改文件的内容 表示是否可以删除目录中的子文件或者新建子目录(rm/touch/mkdir)
执行x 表示是否可以开启文件当中记录的程序,一般指二进制文件(.sh) 表示是否可以进入目录中(cd)

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

1、什么是属主与属组?

属主:所属的用户,文档所有者,这是一个账户,这是一个人

属组:所属的用户组,这是一个组

基本语法:# ls -l查看文档属主与属组

img

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

img

问题:为什么itheima.txt 的属主和属组默认都是itheima

2、为什么要修改属主与属组?

举例:

 一个财务表格,以前由胡一菲进行更新,她有读写权限,现在胡一菲去阿拉善沙漠找曾老师了,改权限没用,需要把属主改成诸葛大力,由诸葛大力更新。

3、chown修改文件的属主

基本语法:# chown [-R] 新文档拥有者名称 文档路径

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

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

示例代码1:将readme.txt文档属主更改为itheima

#touch readme.txt
#ll readme.txt

#chown itheima readme.txt 
将readme.txt文件的属主设置为itheima

#ll readme.txt

img

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

#mkdir shop
#ll
#chown itheima shop
将shop文件夹的属主设置为itheima

#ll

img

3、chgrp修改文件的属组

基本语法:# chgrp [-R] 新文档组名称 文档的路径

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

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

img

错误信息:invalid user: ‘itheima’

不可用的账户"itheima"

原因:检查是否有这个账户,如果没有,需要新建

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

img

4、chown同时修改属主与属组(重点)

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

答:使用 chown 命令

基本语法:语法:# chown [-R] username:groupname 文档路径

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

#ll readme.txt 
#chown root:root readme.txt 
将readme.txt文件的属主和属组同时设置为root

#ll readme.txt

img

特别注意:
一般来说,这个指令(chown)只有是由系统管理者(root)所使用,普通用户没有权限可以改变别人的档案拥有者,也没有权限可以将自己的档案拥有者改设为别人。只有系统管理者(root)才有这样的权限。

四、特殊权限(扩展)

1、设置位S(SetUid)

作用:为了让一般使用者临时具有该文件所属主/组的执行权限。

例如:/usr/bin/passwd在执行它的时候需要去修改/etc/passwd和/etc/shadow等文件,这些文件除了root外,其他用户都没有写权限,但是又为了能让普通用户修改自己的密码,该怎么办呢?

答:可以临时让他们具有root的权限,而这个s权限就是用来完成这个特殊任务的。s权限只能应用在二进制的可执行文件上。

img

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

注:which命令可以用于查看二进制可执行文件所在位置

去除s权限,基本语法:

#which passwd
#ll /usr/bin/passwd 

#chmod u-s /usr/bin/passwd 
或者
#chmod 0755 /usr/bin/passwd
去除passwd程序的s权限


#ll /usr/bin/passwd

img

测试普通用户:

img

注:0755最前面的0表示不使用任何特殊权限,如果想使用数字设置特殊权限,可以使用4表示设置S位

2、沾滞位T (sticky bit)

命令:chmod

语法:# chmod [选项] 文件夹

作用:只允许文件的创建者和root用户删除文件

常用选项:o+t 添加粘滞位

       o-t 去掉粘滞位
用法:chmod o+t 目录名
示例代码:
#chmod o+t 
含义:给目录增加粘滞位权限。

举例:

 公司多个部门公用一个文件夹work,为了让所有人都能访问,work文件夹赋予了777权限,用户root新建了一个文件root.txt,发现被别人删除了。我们希望root建立的文件,只有root自己可以删。

 步骤1:root用户下操作

 root用户新建文件夹/work,并且新建两个文件root.txt和root1.txt,赋予/work文件夹和下面的文件777权限
#mkdir /work
#cd /work
#touch root.txt
#touch root1.txt
#chmod -R 777 /work
#ll -d /work

img

步骤2: wangwu用户下操作

 在没有设置粘滞位的时候,wangwu可以删除root创建的文件。
cd /work
ll -d /work
ll
rm -rf root.txt
ll

img

 步骤3:root用户下操作:

 给/work文件夹添加粘滞位
#ll -d /work/
#chmod o+t /work
#ll -d /work/

img

 步骤4:wangwu用户下操作
 发现添加粘滞位后,无法删除root2.txt文件
#ll -d /work/
#chmod o+t /work
#ll -d /work/

img

 步骤5:root用户下操作

 去掉/work文件夹的取消粘滞位
#ll -d /work/
#chmod o-t /work
#ll -d /work/

img

 步骤6:wangwu用户下操作
 wangwu用户下,发现又可以删除了
#cd /work/
#rm -rf root1.txt
#ll

img

五、ACL访问控制

问题:我们学过的所有者身份包含哪些?

答案:ugo,属主,属组,其他。

问题:我们学过的文件权限包含哪些?

答案:rwx,读写执行,特殊s,t

img

 ACL,是 Access Control List(访问控制列表)的缩写,在 Linux 系统中, ACL 可实现对单一用户设定访问文件的权限。

1、基本命令

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

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

2、getfacl命令

img

3、setfacl命令

-m : 修改acl策略

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

-b :删除所有的acl策略

-R :递归,通常用在文件夹

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

setfacl -m u:用户名:rwx /usr/local/shichangbu  给单个用户单独加权限

setfacl -m g:用户组名:rwx /usr/local/shichangbu   给单个组单独加权限

setfacl -x u:用户 /usr/local/shichangbu  去掉某个用户的权限
setfacl -x g:组名 /usr/local/shichangbu    去掉某个组的acl策略

setfacl -b -R /usr/local/shichangbu  删除所有的acl策略,递归子文件

例如:
setfacl -m u:user01:rw   file1 针对于单个用户给可读可写权限
setfacl -m g:sysadmin:rw file1 针对于单个组给可读可写权限

示例代码1:给newuser01用户单独在市场部文件夹上增加rx权限

#mkidr /shichangbu
#cd /shichangbu
#touch file{1..5}.txt
#chown -R root:itheima shichangbu/
递归设置shichangbu文件夹的属主是root,属组是itheima
#getfacl shichangbu/

#useradd newuser01
#passwd newuser01 

#setfacl -m u:newuser01:rx -R /usr/local/shichangbu/
单独设置newuser01对于shichangbu文件夹的rx权限,并且递归包含所有子文件

#getfacl /usr/local/shichangbu
查看/usr/local/shichangbu文件夹的ACL权限

img

验证newuser01用户对于file1文件只有读权限

img

示例代码2:给newusergrp组在市场部文件夹上增加rx权限,递归所有子文件

#groupadd newusergrp
#setfacl -m g:newusergrp:rx -R /usr/local/shichangbu/
单独设置newusergrp组对于shichangbu文件夹的rx权限,并且递归包含所有子文件

#getfacl /usr/local/shichangbu/

img

setfacl命令解释

img

示例代码3:删除所有acl策略

img

六、umask(扩展)

1、什么是umask

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

例如:

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

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

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

最大默认权限:

文件666

文件夹777

2、umask值

可以使用命令umask来查看umask的值:

基本语法:# umask

img

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

umask的默认值,在root和普通用户下是不一样的,分别是022和002

分析:

img

结合上述的举例得知:

默认权限=最高权限-umask( 644=666-022 // 664=666-002 )

但是:

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

666 -> rw-rw-rw-
011 -> -----x--x

相减得:

666 -> -rw-rw-rw-

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

3、修改umask值

umask + 数值修改当前用户的umask 如:# umask 044

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

操作步骤:

#vim ~/.bashrc
① 在文件末尾添加umask 044
② 保存退出 
③ 重新登录用户则保存成功

示例代码:

img

一、权限概述

㈠ 什么是权限

**权限:**在计算机系统中,权限是指某个计算机用户具有使用软件资源的权利。

思考:计算机资源分为哪两部分?

  • 硬件资源 硬盘、CPU、内存、网卡等物理硬件资源
  • 软件资源 软件:操作系统(特殊的软件)、应用程序。只要不启动,这些软件就是一堆静态的文件,并且静静的躺在我们计算机的磁盘中。 软件资源:Linux系统中,一切皆文件!SO,这里的软件资源就是文件资源。

总结:

我们今天所讲的权限,指的就是:文件资源所拥有的相关权限,即文件权限。

㈡ 权限设置目的

文件权限的设置目的:是想让某个用户有权利操作文件

㈢ 文件权限的分类

  • 普通权限 用户正常情况去操作文件所具有的权限
  • 高级权限 用户对某个文件操作有特殊需求,而普通权限不能满足,需要给文件设置高级权限
  • 默认权限 用户在系统中创建一个文件,该文件默认都会有一个权限,该权限是默认有的

注意:

权限是设置在文件上的,而不是用户

二、普通权限(重点)

㈠ 理解普通权限rwx含义

1、读权限—r(read)

  • 针对目录 一个目录拥有r权限,说明可以查看该目录里的内容(ls命令列出)
  • 针对普通文件 一个普通文件拥有r权限,说明可以查看该文件的内容(cat/head/tail/less/more等命令查看)
  • 读权限==r==(read)用数字表示是4

2、写权限—w(write)

  • 针对目录 一个目录拥有w权限,说明可以在该目录里==创建、删除、重命名==等操作(mkdir/touch/mv/rm等)
  • 针对普通文件 一个普通文件拥有w权限,说明可以==修改该文件的内容==(vi/vim编辑器编辑文件)
  • 写权限==w(write)用数字表示是2==

3、执行权限—x(execute)

  • 针对目录 一个目录拥有x权限,说明可以==进入或切换到==该目录里(cd命令)
  • 针对普通文件 一个普通文件拥有x权限,说明可以==执行==该文件(一般程序文件、脚本文件、命令都需要执行权限)
  • 执行权限==x(execute)用数字表示是1==

4、没有权限—横杠==-==

  • 没有任何权限用横杠==-表示,数字表示是0==

㈡ 理解UGO的含义

1、UGO指的是什么

UGO,指的是==用户身份,每个字母代表不同的==用户身份。

  • U(the user who owns it) 文件的拥有者(owner)或者创建者
  • G(other users in the file’s group) 在文件的所属组(默认是创建文件的用户的主组)里的用户
  • O(other users not in the file’s group) 既不是文件的创建者,也不在文件属组里的用户,称为其他人

注意:

除了上面ugo以外,还有一个字母==**a**(all users),表示所有用户==,包含ugo

2、如何判断不同身份的用户对文件的权限

查看文件详细信息,包含权限信息:
[root@localhost ~]# ls -l
total 144
-rw-r--r--. 1 root root     9 Mar  2 20:38 1.sh
-rw-------. 1 root root  1651 Feb 28 11:00 anaconda-ks.cfg
drwxr-xr-x. 2 root root  4096 Mar  6 18:34 Desktop
drwxr-xr-x. 2 root root  4096 Feb 28 14:12 dir1

img

㈢ 修改文件普通权限(chmod)

1、chmod命令用法

chmod [选项] 文件名
常见选项:
-R, --recursive		递归更改目录和目录里文件的权限

2、举例说明

① 通过字母形式更改文件权限

u:表示文件拥有者
g:表示文件属组用户
o:表示其他人,即不是文件的创建者,也不在文件属组里
a:表示所有人
  • 环境准备
[root@localhost ~]# mkdir /tmp/dir1
[root@localhost ~]# touch /tmp/dir1/file{1..5}
[root@localhost ~]# touch /tmp/test{1..3}
[root@localhost ~]# ll /tmp/ -R
  • 使用字母形式修改文件权限
[root@localhost tmp]# pwd
/tmp
[root@localhost tmp]# ll test1
-rw-r--r--. 1 root root 0 Mar  6 20:45 test1
[root@localhost tmp]# chmod u+x test1
[root@localhost tmp]# ll test1
-rwxr--r--. 1 root root 0 Mar  6 20:45 test1
[root@localhost tmp]# chmod g+w test1
[root@localhost tmp]# ll test1
-rwxrw-r--. 1 root root 0 Mar  6 20:45 test1
[root@localhost tmp]# chmod o-r test1
[root@localhost tmp]# ll test1
-rwxrw----. 1 root root 0 Mar  6 20:45 test1

[root@localhost tmp]# ll test2
-rw-r--r--. 1 root root 0 Mar  6 20:45 test2
[root@localhost tmp]# chmod a+x test2
[root@localhost tmp]# ll test2
-rwxr-xr-x. 1 root root 0 Mar  6 20:45 test2

[root@localhost tmp]# ll test3
-rw-r--r--. 1 root root 0 Mar  6 20:45 test3
[root@localhost tmp]# chmod u+x,g+w,o-r test3
[root@localhost tmp]# ll test3
-rwxrw----. 1 root root 0 Mar  6 20:45 test3

[root@localhost tmp]# chmod u=rw,g=rx,o+r test3
[root@localhost tmp]# ll test3
-rw-r-xr--. 1 root root 0 Mar  6 20:45 test3

修改目录的权限:
[root@localhost tmp]# ll -d dir1/
drwxr-xr-x. 2 root root 4096 Mar  6 20:45 dir1/
[root@localhost tmp]# ll dir1/
total 0
-rw-r--r--. 1 root root 0 Mar  6 20:45 file1
-rw-r--r--. 1 root root 0 Mar  6 20:45 file2
-rw-r--r--. 1 root root 0 Mar  6 20:45 file3
-rw-r--r--. 1 root root 0 Mar  6 20:45 file4
-rw-r--r--. 1 root root 0 Mar  6 20:45 file5

1.只修改目录本身的权限
[root@localhost tmp]# chmod g+w dir1/
[root@localhost tmp]# ll -d dir1/    
drwxrwxr-x. 2 root root 4096 Mar  6 20:45 dir1/
[root@localhost tmp]# ll dir1/   
total 0
-rw-r--r--. 1 root root 0 Mar  6 20:45 file1
-rw-r--r--. 1 root root 0 Mar  6 20:45 file2
-rw-r--r--. 1 root root 0 Mar  6 20:45 file3
-rw-r--r--. 1 root root 0 Mar  6 20:45 file4
-rw-r--r--. 1 root root 0 Mar  6 20:45 file5
说明:目录下面文件的权限并没有修改

2.修改目录以及目录里所有文件的权限(递归修改),使用-R参数
[root@localhost tmp]# chmod -R o+w dir1/
[root@localhost tmp]# ll -d dir1/
drwxrwxrwx. 2 root root 4096 Mar  6 20:45 dir1/
[root@localhost tmp]# ll dir1/
total 0
-rw-r--rw-. 1 root root 0 Mar  6 20:45 file1
-rw-r--rw-. 1 root root 0 Mar  6 20:45 file2
-rw-r--rw-. 1 root root 0 Mar  6 20:45 file3
-rw-r--rw-. 1 root root 0 Mar  6 20:45 file4
-rw-r--rw-. 1 root root 0 Mar  6 20:45 file5

② 通过数字形式更改文件权限

  • 学会用数字表示权限
字母和数字对应关系:
r——4
w——2
x——1
-——0

rw-  r-x  r--	用数字表示就是654
rwx  rw-  ---	用数字表示就是760
755	用字母表示就是rwx r-x r-x
644	用字母表示就是rw- r-- r--
  • 使用数字形式修改文件权限
# chmod 644 file1
# chmod 700 file2
# chmod -R 755 dir1

总结:

  • 用户是否可以删除目录里的文件,看的是目录的权限!!!
  • 对于正常能够操作的目录来说,应该默认具备r-x
  • 3、课堂练习

  • 创建5个用户user01~user05和一个admin组
  • 将user01~user03用户加入到admin组里
  • user01用户在其家目录里创建file1~file3三个文件
  • user02用户编辑/home/user01/file1文件的内容:good good study,day day up!
  • user05用户往/home/user01/file1文件里追加内容:I known
  • user04用删除/home/user01家目录的所有文件
  • 三、高级权限(了解)

    ㈠ 高级权限有哪些

    1、冒险位(SETUID)

    • 冒险位,指文件操作者(用户)临时拥有文件拥有者的权限
    • 冒险位,一般针对的是命令或者脚本文件
    • 冒险位,用字母表示是s或S;数字表示是4
    • 冒险位的设置:chmod u+s 文件名或者chmod 4xxx 文件名

    2、强制位(SETGID)

    • 强制位,一般针对的是目录 如果一个目录拥有强制位,那么任何用户在该目录里所创建的任何文件的属组都会继承该目录的属组。
    • 强制位,用字母表示是s或S;数字表示是2
    • 强制位的设置:chmod g+s 文件名或者chmod 2xxx 文件名

    3、粘滞位(STICKY)

    • 粘滞位,一般针对的是公共目录 如果一个公共目录拥有粘滞位,那么该目录下的文件,只有root和文件的创建者可以删除,其他人只能自己管理自己。(A用户不能删除B用户创建的文件)
    • 粘滞位,用字母表示是t或T;数字表示是1
    • 粘滞位的设置:chmod o+t 文件名或者chmod 1xxx 文件名

    ㈡ 高级权限设置

    1、冒险位举例

    需求:
    给一个vim命令设置冒险位,目的是任何人拿vim去修改文件可以临时获得文件拥有者的权限
    
    [root@localhost tmp]# which vim
    /usr/bin/vim
    [root@localhost tmp]# ll /usr/bin/vim
    -rwxr-xr-x. 1 root root 2324712 Dec 22  2016 /usr/bin/vim
    [root@localhost tmp]# chmod u+s /usr/bin/vim
    或者
    [root@localhost tmp]# chmod 4755 /usr/bin/vim
    [root@localhost tmp]# ll /usr/bin/vim
    -rwsr-xr-x. 1 root root 2324712 Dec 22  2016 /usr/bin/vim
    测试验证,普通用户使用vim修改一个本没有权限修改的文件:
    [root@localhost tmp]# ll /etc/passwd
    -rw-r--r--. 1 root root 1650 Mar  5 20:39 /etc/passwd
    [root@localhost tmp]# su - user01
    [user01@localhost ~]$ vim /etc/passwd
    验证是否可以修改成功,如果可以,说明user01用户临时拥有了/etc/passwd文件拥有者的权限
    

    2、强制位举例

    需求:
    给目录dir2设置一个强制位,测试是否任何人在该目录里创建的文件属组都是该目录的属组
    
    [root@localhost tmp]# ll -d dir2
    drwxr-xr-x. 2 root root 4096 Mar  6 13:42 dir2
    给dir2增加强制位:
    [root@localhost tmp]# chmod g+s dir2
    给dir2目录设置权限,让其他人可以写
    [root@localhost tmp]# chmod o+w dir2
    [root@localhost tmp]# ll -d dir2
    drwxr-srwx. 2 root root 4096 Mar  6 13:42 dir2
    测试普通用户user01在dir2目录里创建文件的属组是否是dir2的属组
    [root@localhost tmp]# su - user01
    [user01@localhost ~]$ touch /tmp/dir2/file1
    [user01@localhost ~]$ ll /tmp/dir2/file1 
    -rw-rw-r--. 1 user01 root 0 Mar  6 13:44 /tmp/dir2/file1
    

    3、粘滞位举例

    需求:
    在创建一个公共目录/tmp/dir3,要求所有人都可以在该公共目录里创建、删除文件;但是只能自己管理自己,不能删除别人的文件
    
    [root@localhost ~]# mkdir /tmp/dir3
    [root@localhost ~]# chmod 777 /tmp/dir3
    [root@localhost ~]# chmod o+t /tmp/dir3
    或者一步到位:
    [root@localhost ~]# chmod 1777 /tmp/dir3
    [root@localhost ~]# ll -d /tmp/dir3
    drwxrwxrwt. 2 root root 4096 Mar  6 13:52 /tmp/dir3
    测试验证:
    自己完成
    

    ㈢ 总结

    • 高级权限分类
      • 冒险位——>针对命令 s/S 4 chmod u+s 命令文件
      • 强制位——>针对目录 s/S 2 chmod g+s 目录
      • 粘滞位——>针对公共目录 t/T 1 chmod o+t 公共目录
    • 高级权限设置
    chmod 4xxx  文件名
    chmod 2xxx   目录名
    chmod 1777   公共目录
    

    四、默认权限(了解)

    ㈠ 什么是文件的默认权限

    所谓文件的默认权限(遮罩权限),是指用户创建文件后,文件天生就有的权限,不需要设置。

    ㈡ 文件默认权限由谁控制

    文件默认权限由一个叫做umask的东西来控制。

    ㈢ umask如何控制文件默认权限

    1、临时控制

    • 什么是临时控制?

    临时控制,指的是用命令umask临时设置,只在当前终端当前进程中生效。

    查看当前用户的umask:
    [root@localhost ~]# umask
    0022
    [root@localhost ~]# su - user01
    [user01@localhost ~]$ umask
    0002
    注意:
    1. 管理员和普通用户的umask不同,就表示管理员和普通用户创建的文件的默认权限不同!
    2. 第1位数字表示高级权限;后面3位数字表示普通权限
    
    • 如何临时设置用户的umask? 写在前面: Linux系统中,默认创建目录的最大权限是0777;文件的最大权限是0666 777 666 rw-rw-rw-
    [root@localhost ~]# umask 0007	临时设置root用户的umask为0007
    问:umask=0007,那么在当前终端上root用户所创建目录和普通文件的权限分别是什么呢?
    计算过程如下:
    umask=文件的最大权限-文件的默认权限
    目录:
    0007=0777-目录的默认权限
    目录的默认权限=0777-0007=0770=rwxrwx---	 770
    
    普通文件:
    0007=0666-普通文件的默认权限
    普通文件的默认权限=0666-0007=0660=rw-rw----
    
    说明:
    1.权限用数字表示时没有负数,所以最小就是0
    2.默认权限规则遵循Linux系统中权限最小化原则
    
    $ stu1   umask 0003
    dir:
    默认权限=目录最大权限-umask=777-003=774	rwxrwxr--
    file:
    默认权限=文件最大权限-umask=666-003=663  rw- rw- -wx 实际: 664 rw-rw-r--
    

    2、永久控制

    • 什么是永久设置?

    永久设置,指的是通过修改配置文件设置,对用户的所有终端所有进程生效

    • 修改哪个配置文件呢?
  • 相关配置文件介绍
  • 全局配置文件(针对所有用户所有进程)
    /etc/profile
    系统和用户的环境变量信息,当用户第一次登录时,该文件被读取
    /etc/bashrc
    每个运行的bash信息(系统别名、函数及默认权限的定义),当bash被打开时,该文件被读取
    
    局部配置文件(针对某个特定用户以及用户的所有进程)
    ~/.bashrc
    当前用户的bash信息,当用户登录和每次打开新的shell时该文件被读取
    ~/.bash_profile
    当前用户的环境变量,当用户登录时,该文件被读取
    ~/.bash_history
    保存当前用户历史命令的文件
    ~/.bash_logout
    当用户退出bash或者终端时,会首先执行该文件里的代码,然后再退出
    
    2. 如何永久设置用户的umask?
    1.针对所有用户生效
    # vim /etc/bashrc
    在该文件的最后增加以下内容:
    umask 0007
    
    重新读取该配置文件让其立马生效
    # source /etc/bashrc
    或者
    # . /etc/bashrc
    
    2.针对某个用户生效
    比如,只针对user01用户生效
    [user01@localhost ~]$ vim ~/.bashrc
    在该文件的最后增加以下内容:
    umask 0007
    

    五、文件的属主和属组

    ㈠ 如何查看文件的属主和属组

    img

    ㈡ 如何修改文件的属主和属组

    1、chown命令修改

    chown命令既可以修改文件的属主,也可以修改文件的属组。

    只修改文件的属主
    # chown 用户名	 文件名
    修改文件的属主和属组
    # chown 用户名.组名  文件名
    # chown 用户名:组名  文件名
    # chown 用户名.	文件名	//没有指定组名,默认是用户的主组
    只修改文件的属组
    # chown .组名	文件名
    # chown :组名 文件名
    
    可以加-R选项,表示递归修改
    

    2、chgrp命令修改

    chgrp命令只能修改文件的属组。

    # chgrp 组名 文件名
    

    六、ACL访问控制策略(扩展)

    ㈠ ACL能做什么

  • ACL访问控制策略可以作为前面所讲权限的补充,更加细的来控制文件的权限
  • ACL策略可以只针对某个用户在文件上有相应权限
  • ACL策略也可以只针对多个用户或者一个组里的所有用户在文件上有相应权限
  • ㈡ 如何设置文件的ACL策略

    1、设置ACL策略(setfacl)

    常用选项:
    -m	修改或者设置ACL策略
    -R 递归授权,对目录下已存在的目录或文件有acl策略,但新建的文件没有
    -x 去掉某个用户或者某个组的权限
    -b 删除所有的acl策略
    -d 默认ACL策略,只针对目录,该目录下新建的目录和文件都会继承acl策略
    mask: 定义除其他人和所有者外的最大权限
    

    重点掌握:

    setfacl -m u:用户:rwx  /home/redhat/file1   给单个用户单独加权限
    setfacl -m g:组名:rwx  /home/redhat/file1   给单个组单独加权限
    
    setfacl -x u:用户 /home/redhat/file1   		去掉某个用户的权限
    setfacl -x g:组名 /home/redhat/file1  			去掉某个组的acl策略
    setfacl -b /home/redhat/file1					 删除文件上所有的acl策略
    
    # setfacl -m u:user01:rw file1   	针对于单个用户给可读可写权限
    # setfacl -m g:sysadmin:rw file1  	针对于单个组给可读可写权限
    

    2、查看ACL策略(getfacl)

    # getfacl 文件名
    

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论