Linux——权限设置

Linux 中的文件或目录拥有 3 中角色:
  • 所有者
  • 所属群组
  • 其他人

这三种角色都分别有不同的权限。


Linux 用户账号密码以及群组的记录文件位置

① 账号以及一般使用者还有 root 用户的相关信息记录在/etc/passwd
在这里插入图片描述

② 个人的账号密码记录在/etc/shadow
在这里插入图片描述

③ 组名信息记录在/etc/group
在这里插入图片描述


Linux 的文件属性

可以使用 ls -al 进行查看:
在这里插入图片描述
可以发现, Linux 的文件属性可以分成 7 部分:

① 第一部分表示文件的类型和权限:

共由 10 个字符组成:
第 1 个字符表示这个文件的类型:

  • d:目录
  • -:文件
  • l:连接文件,即快捷方式
  • b:可供存储的接口设备,如 /dev/sda
  • c:串行接口设备,如鼠标、键盘
  • s:数据接口文件,资料接口文件,通常被用在网络上的数据惩戒,在 /var/run 中可以看到
  • p:数据输送文件,主要目的是解决多个程序同时存取一个文件造成的错误问题

后面的 9 个字符,以 3 个为一组分别表示文件所有者文件所属群组以及其他人的权限:

  • 第 1 组(即第 2 - 4 个字符):文件所有者拥有的权限
  • 第 2 组 (即第 5 - 7 个字符):文件所属群组拥有的权限
  • 第 3 组(即第 8 - 10 个):其他人拥有的权限

文件的权限且 rwx 这三个参数组成

  • r 表示可读,可用 4 代替(后面修改权限时会用到)。
  • w 表示可写,可用 2 代替。
  • x 表示可执行,可用 1 代替。
  • - 表示无此权限。

如:drwxr-xr--

  • d 表示这是一个目录
  • rwx 表示文件的所有者拥有可读可写可执行的权限
  • r-x 表示文件所属群组拥有可读可执行,不可写权限
  • r-- 表示其他人拥有可读,但不可写不可执行的权限
②第 2 栏表示有多少文件在此目录下

若是文件则一般只有 1;若是目录则视情况而定。

③ 第 3 栏表示这个 文件或目录 的拥有者
④ 第 4 栏表示这个 文件或目录 的所属群组
⑤ 第 5 栏表示这个文件的 大小,默认单位为 bytes
⑥ 第 6 栏表示这个文件的 创建日期 或 最近修改日期

若太久没被改动,则可能只会显示年份,若想显示完整的时间格式,可以使用命令:ls -l --full-time

⑦ 第 7 栏表示这个文件的 文件名

修改文件所属群组:chgrp

可以使用 chgrp 命令来修改文件所属群组,但是修改后的组名必须在/etc/group文件中存在才行。

如:将 a.txt 的群组更改为 users 组:
chgrp users a.txt

可以加一个参数-R 表示对目录的所属群组进行递归修改,即在此目录下的所有文件和目录的群组都要做相应的修改。
将 test 目录下的所有文件和目录的群组都改为 users 组:
chgrp -R users /test


更改文件的所有者:chown

可以使用 chown 命令来修改文件的所有者,但是修改后的用户名必须是已经存在系统中的账号,也就是在 /etc/passwd 文件中有记录的用户名称。

如:将 a.txt 的所有者改为 yt:
chown yt a.txt

同样的,也可以加上 -R 参数进行递归,将某个目录下的所有文件和目录的所有者都进行修改。
将 test 目录下的所有文件和目录的所有者都改为 yt:
chown -R yt /test

也可以同时更改文件所有者所属群组
chown 所有者:所属群组 文件或目录
如:将 a.txt 的文件所有者改为 yt;所属群组改为 users:
chown yt:users a.txt


更改文件的权限:chmod

可以使用两种方式来改变一个文件或目录的权限:

  • 使用数字来修改,即(r:4、w:2、x:1)
  • 使用符号
① 使用数字类型来修改权限
  • 可读(r)可用数字 4 表示;
  • 可写(w)可用数字 2 表示;
  • 可执行(x)可用数字 1 表示

然后将 3 中角色(即文件所有者、文件所属目录、其他人)的读写权限的数值形式的值相加再分别赋予即可。

如:修改 a.txt 的文件权限:

  • 将文件所有者的权限改为可读可写可执行:4 + 2 + 1 = 7
  • 将文件所属群组的权限改为可读可执行,不可写:4 + 0 + 1 = 5
  • 将其他人的权限改为可读,不可写不可执行:4 + 0 + 0 = 4

通过以上的分析,就可以通过命令进行修改 a.txt 的权限:
chmod 754 a.txt

同样可以使用-R参数进行递归修改。

使用符号类型来修改权限

在这里插入图片描述
文件或目录拥有的 3 中角色:

  • 所有者:user
  • 所属群组:group
  • 其他人:others
  • 以上 3 种身份都包括:all

那么就可以使用符号来代表上面的 4 中情况:

  • 所有者:u
  • 所属群组:g
  • 其他人:o
  • 以上所有身份:a

用符号来代表读写执行 3 中权限:

  • 读权限:r
  • 写权限:w
  • 执行权限:x

用符号来代表对权限的增加、删除和修改

  • 添加权限:+
  • 删除权限:-
  • 设定权限:=

通过一些例子来说明:
① 将一个文件的权限设定为 rwxr-xr–(即所有者可读可写可执行、所属群组可读可执行不可写、其他人可读不可写不可执行):
chmod u=rwx,g=rx,o=r test.txt

② 若不知道文件原先属性,想将全部人(所有者、所属群组、其他人)的权限都添加可读权限:
chmod a+r test.txt

③ 给文件的所属群组添加可执行权限:
chmod g+x test.txt

④ 给文件的所有者除去可读权限
chmod u-r test.txt


权限对文件的意义
  • 读权限(r):可读取此文件的实际内容,如读取文本文件的文字内容等
  • 写权限(w):可以编辑、新增或是修改该文件的内容,但不含删除该文件
  • 执行权限(x):该文件具有可以被系统执行的权限

权限对目录的意义
  • 读权限(r):表示具有读取目录结构列表的权限。因此若具有 读取 一个目录的权限时,表示可以查 询该目录下的文件名数据,即可以使用 ls 命令将该目录的内容列表显示出来

  • 写权限(w):若具有对目录的写权限,则说明:
    ① 可以在该目录下建立新的文件和目录
    ② 可以删除该目录下已经存在的文件和目录
    ③ 可以将该目录下已经存在的文件或目录更名
    ④ 可以移动该目录内的文件和目录的位置
    由此可见,目录写权限特别重要,不可随便的赋予。

  • 执行权限(x):表示用户能否进入该目录成为工作目录,即能否使用 cd 命令进入该目录


文件的预设权限:umask

预设权限

在一般情况下:

  • 若建立的是文件:则预设没有可执行权限(x),也就是说只有可读(r)和可写权限(w),最大为666
    文件的预设权限如下
    -rw-rw-rw-
  • 若建立的是目录:默认所有权限均开放,具有可读(r)、可写(w)和可执行(x)权限,即777.
    目录的预设权限如下:
    drwxrwxrwx
umask

umask就是指定:目前用户在建立文件或目录时的权限默认值,可以直接输入umask 进行查看。
在这里插入图片描述

可以看到,输入 umask 后,会输出 4 位数字,如上图所示的就是0022

  • 位数字描述的是特殊权限(SGID、SUID 等)的默认权限需要减掉的权限分数
  • 位数字描述的是所有者的默认权限需要减掉的权限分数
  • 位数字描述的是所属群组的默认权限需要减掉的分数
  • 位数字描述的是其他人的默认权限需要减掉的分数

需要特别说明的是:umask 显示的分数指的是,默认值需要减掉的分数。
如:去掉读权限(r)就是4,去掉读权限(r)和写权限(w)就是6.

下面看一个例子例子:

如上图中输入 umask 后,显示的是0022,现在我们先只关注后面 3 个数字,即022

  • 第一个数字是 0 ,表示默认情况下文件的所有者没有去掉任何权限
  • 第二个数字是 2,表示默认情况下文件的所属群组的权限被拿掉了写权限(w)
  • 第三个数字是 2,表示默认情况下其他人的权限去掉了写权限(w)

故:
① 当建立的是文件时,由于文件的默认权限是:-rw-rw-rw-(666);但是被去掉了 022。
666 - 022 = 644,即-rw-r--r--
因此当 umask 为 0022 时,若我们建立的是文件,默认情况下该文件的权限是: -rw-r--r--

② 若建立的是目录,由于目录的默认权限是 drwxrwxrwx(777);但是被去掉了 022。
777 - 022 = 755,即drwxr-xr-x
因此当 umask 为 0022,若我们建立的是目录,默认情况下该目录的权限是:drwxr-xr-x

修改预设权限

直接在 umask 后面接数字就可以修改(忽略 第一位),如:
umask 002


配置文件的隐藏属性(只在 Ext2 / Ext3 文件系统上生效):chattr

用法:
chattr [+-=] [ASacdistu] 文件或目录名

选项意义
+增加一个特殊参数,其他原本存在的参数不变
-删除一个特殊参数,其他原本存在的参数不变
=直接设定参数
A当存取该文件或目录时,访问时间(atime) 不会被修改
S一般文件是异步写入磁盘的,加了 S 参数可以同步写入磁盘
a该文件只能增加数据,不能删除也不能修改数据,只有 root 才能设定这个属性
c会自动将文件压缩,在读取的时候会自动的解压缩,存储时,会先进行压缩后再储存
d当 dump 命令被执行时,设定了 d 属性将使地该文件或目录不会被 dump 备份
i可以让一个文件不能被 删除、更名、设定连接,无法写入或新增数据,只有 root 可以设定此属性
s如果文件被删除,这个文件将会被完全的移除出这个硬盘空间
u与 s 相反,如果文件被删除,数据内容还存在硬盘中,可以使用此参数来救援该文件

可以使用 lsattr 来查看文件的隐藏属性
lsattr [选项 ] 文件或目录

选项意义
-a将隐藏文件的隐藏属性也显示出来
-d如果是目录,则仅列出目录本身的属性而非目录内的
-R递归列举子目录的隐藏属性

文件的特殊权限(SUID、SGID、SBIT)

通常情况下,文件和目录拥有 3 个一般的权限,即 读写执行(rwx);
但是,其实还有两个特殊权限:s、t

1. set UID(SUID)

s 这个标志出现在文件拥有者的 x(可执行) 权限上时,那么就说明该文件具有了 SUID 的特殊权限

SUID 的限制与功能:

  • SUID 权限只对二进制程序有效
  • 执行者对于该程序需要具有 可执行权限(x)
  • SUID 只在执行该程序的过程中有效
  • 若具有 SUID 权限,则每一个执行者在执行该文件时会临时具有文件所有者的权限

例子:
① 在 Linux 系统中,所有的账号密码都记录在 /etc/shadow 这个文件中,且该文件的权限为:
在这里插入图片描述
说明 /etc/shadow 这个文件只有 root 用户可以读,且只有 root 用户可以强制写入。

② 再来看看 passwd 这个命令。passwd 是一个可以修改登录密码的命令,也就是说 passwd 这个命令需要去修改 /etc/shadow 文件。
但是在上面看到了,/etc/shadow 这个文件只有 root 用户可以修改,那么普通用户为什么可以通过更改 /etc/shadow 的内容来更改密码呢?
来看看 passwd 这个命令文件的权限:
**加粗样式**
可以看到 passwd 文件的属性为:-rwsr-xr-x ,在原本文件所有者的执行权限的位置上出现了 s ;且该文件的所有者为 root。

由此可以看到,当一般用户调用 passwd 命令时,由于具有了 SUID 权限,因此当执行 passwd 命令去修改 /etc/passwd 文件时,会临时具有 root 的权限,也就可以进行修改了

③ 但是一般用户不能使用 cat 命令来查看 /etc/shadow 文件的内容,因为 cat 命令的权限为:-rwxr-xr-x 文件的所有者是 root ,但由于其不具有 SUID 权限,故不能临时具有 root 的权限,所以无法查看。
在这里插入图片描述
在这里插入图片描述

2. Set GID(SGID)

当 s 标志出现在文件所属群组时,则具有了 SGID 权限。
与 SUID 不同的是,SGID 可以针对目录和文件来设定,而 SUID 只能针对文件来设定。

① 若是针对文件,SGID 有如下限制和功能:

  • SGID 只对二进制程序起作用
  • 程序的执行者对于该程序需要具有可执行权限(x)
  • 执行者在执行该程序的过程中会临时获得该文件所属群组的支持,临时成为该群组的成员

例子:我们可以使用 /usr/bin/locate 这个命令程序去搜索 /var/lib/mlocate/mlocate.db 这个文件中的内容
先来看看 /usr/bin/locate 和 /var/lib/mlocate/mlocate.db 这两个文件的权限:
在这里插入图片描述
在 /usr/bin/locate 这个命令文件的所属群组的可执行权限位置上出现了 s 标志,说明其具有 SGID 权限。
当一个普通用户使用该命令去操作其他文件时,由于具有 SGID,那么久会临时具备了其所属群组(即 slocate )的权限,从而可以去读取 /var/lib/mlocate/mlocate.db 这个文件的内容。

② 若是针对目录,SGID 具有如下限制和功能:

  • 若用户对此目录具有 可读(r)和可执行(w)权限,即该用户能够进入此目录
  • 用户在此目录下的有效群组(effective group)将会变成该目录的群组
  • 若用户在此目录下具有可写权限(w),即可以新建文件,则使用者建立的新文件的群组与此目录的群组相同,而不是和使用者的群组相同
3. Sticky Bit(SBIT)

SBIT 只对目录起作用。

SBIT 的限制和基本作用:

  • 用户需要对此目录具有 可写(w)和可执行(x)权限,即具有写入权限
  • 当用户在该目录下建立文件或目录时,只有自己和 root 管理员才有权利删除这个文件
4. SUID、SGID、SBIT 权限的设定

之前在设定权限时,我们只指定了 3 位数字,即默认的可读(r)、可写(w)、可执行(x);而我们可以在这 3 位数字前面再加上 1 个数字来代表特殊权限。

当使用 4 位的数字来设定权限时,第一位数字代表的权限:

  • 4:具有 SUID 权限
  • 2:具有 SGID 权限
  • 1:具有 SBIT 权限

例子:将一个文件的权限修改为:-rwsr-xr-x
chmod 4755 a.txt

也可以使用符号来设置权限:
chmod u=rwxs,g=xo=x a.txt
chmod g+s,o+t a.txt

若出现了大写的 T、S,则说明文件本身不具有可执行权限(x),因此为空。
如:文件的所有者不具有 x 权限,但是却设置了 SUID,则该文件的权限为:-rwSrwSrwT


权限和命令之间的关系

列举一些例子,来说明一下什么指令能在什么样的权限下才能运行:

① 让用户能够进入某目录成为可工作目录的基本权限:

  1. 可使用的指令:cd 等变换工作目录的指令
  2. 目录所需权限:可执行权限 (x)
  3. 若用户还想要在这个目录内利用 ls 查看文件名,则需要对此目录具有 可读权限®

② 用户在某个目录内读取一个文件的权限:

  1. 可使用的指令:cat、more、less 等
  2. 目录所需权限:至少需要 可执行权限(x)
  3. 文件所需权限:至少需要 可读权限®

③ 让使用者可以修改一个目录下文件的基本权限:

  1. 可使用指令:vi
  2. 目录所需权限:可执行权限 (x)
  3. 文件所需权限:可读可写权限(r、w)

④ 让一个使用者可以在一个目录下创建一个文件的基本权限:

  1. 可使用命令:touch 等
  2. 目录所需权限:需要具有 可写可执行权限(r、w)

⑤ 让用户进入某目录并执行该目录下的某个指令的基本权限:

  1. 目录所需权限:可执行权限 (x)
  2. 文件所需权限:可执行权限 (x)

主机的西部权限规划:ACL 的使用

传统的权限仅有 3 中身份 (owner、group、others) 搭配 3 中权限 (r、w、x)。并没有办法只针对某一个用户或某一个群组来设定特殊的权限需求。此时就需要使用到 ACL 这个机制了。

1. 什么是 ACL

ACL 是 Access Control List 的缩写,主要目的是在提供传统的 owner、group、others 的 read、write、execute 权限之外的细部权限设定。ACL 可以针对单一用户、但以文件或目录来进行 r、w、x 的权限设置。

ACL 主要可以针对的几个方面:

  • 用户(user):可以针对用户来设定权限
  • 群组(group):可以针对群组来设定权限
  • 有效权限(mask):针对建立新文件的默认权限
2. setfacl:设定某个目录或文件的 ACL

setfacl [选项] 文件名

选项意义
-m设定后续的 acl 参数给文件使用,不可与 -x 合用
-x删除后续的 acl 参数,不可与 -m 合用
-b删除所有的 acl 设定参数
-k溢出预设的 acl 参数
-R递归设定 acl
-d设定默认 acl 参数,只对目录有效

针对特定用户的设定规范:
u:用户列表:[rwx]
如:
① 针对用户 yt文件 acltest 设置权限规范 rx(可读可执行):
setfacl -m u:yt:rx acltest
在这里插入图片描述
权限部分多了个 +,且与原本的权限(644)有一定差异。

② 若不加用户列表,则是对该文件的所有者设置
setfacl -m u::rwx acltest
在这里插入图片描述
可以看到对文件所有者设置了 rwx 权限后,上面显示的文件所有者 root 的权限变为了 rwx。

当一个文件设置了 ACL 参数后,他的权限部分就会多出一个 + 号。但是此时看到的权限和实际权限可能会有误差,我们就需要通过命令getfacl 来查看权限。

3. getfacl:查看 ACL 权限

getfacl 文件名
在这里插入图片描述
通过这个就可以查看到各个我们设置的 ACL 权限。原本用户 yt 是属于 other 那一组的权限(即只有r--),但是由于刚刚我们设置了:setfacl -m u:yt:rx acltest,因此 yt 用户具有了 r-x 的权限。

需要特别注意的是:mask::r-x 这一行:
mask 是此文件的预设权限,其意义是:使用者或群组所设定的权限必须要存在于 mask 的权限设定范围内才会生效。即有效权限(effective permission)。
因此如上图所示:如果这里的 mask 为 mask::r--,但是 yt 的权限为 user:yt:r-x,因为 mask 只有 r(可读),因此即便用户 yt 设置了拥有 rx(读执行)权限,但是依旧不存在 x 执行权限。

4. 针对不同方面来设置 ACL 权限

① 针对用户
setfacl -m u:用户名:[rwx] 文件名
如:
setfacl -m u:yt:rx acltest1

② 针对特定群组
setfacl -m g:群组名:[rwx] 文件名
如:
setfacl -m g:mygroup:rx acltest2

③ 针对有效权限 mask 的设定
setfacl -m m:[rwx] 文件名
如:
setfacl -m m:r acltest3

④ 针对预设权限的设定
如果想要在创建了 ACL 权限的目录下的再建立的文件或目录拥有设定了的 ACL 权限(也就是集成了目录的权限),那么就需要使用针对预设权限的设定方式
setfacl -m d:[ug]:用户列表:[rwx] 文件名

如:让用户 yt 在设定了 ACL 的目录下拥有 rx 权限
setfacl -m d:u:yt:tx /acltest

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是Linux常用命令之创建、删除和设置权限。 ## 创建文件和目录 1. 创建文件:`touch 文件名`,比如:`touch test.txt` 2. 创建空目录:`mkdir 目录名`,比如:`mkdir testdir` 3. 创建带有多级子目录的目录:`mkdir -p 目录名/子目录名/子目录名`,比如:`mkdir -p testdir/subdir1/subdir2` ## 删除文件和目录 1. 删除文件:`rm 文件名`,比如:`rm test.txt` 2. 删除目录:`rmdir 目录名`,比如:`rmdir testdir` 3. 强制删除文件或目录:`rm -rf 文件或目录名`,比如:`rm -rf test.txt` 或 `rm -rf testdir` ## 设置文件和目录权限 Linux中,每个文件和目录都有自己的权限设置权限分为读(r)、写(w)、执行(x)三种,分别表示对文件或目录的读取、写入和执行操作。对于每个文件或目录,都有三组权限文件所有者(owner)、所属组(group)、其他人(others)。可以通过以下命令来设置文件和目录的权限: 1. 改变文件或目录的所有者:`chown 新的所有者 文件或目录名`,比如:`chown root test.txt` 2. 改变文件或目录的所属组:`chgrp 新的所属组 文件或目录名`,比如:`chgrp users test.txt` 3. 改变文件或目录的权限:`chmod 权限文件或目录名`,比如:`chmod 777 test.txt`,其中777表示所有人都有读、写、执行权限。更多关于chmod命令的详细内容可以查看这篇文章:[Linux常用命令(四)——文件和目录权限设置](https://blog.csdn.net/weixin_42462202/article/details/108846998)。 以上就是Linux常用命令之创建、删除和设置权限的内容,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值