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

Linux——权限设置相关推荐

  1. linux权限776代表,Linux 权限设置chmod

    Linux中设置权限,一般用chmod命令 1.介绍 权限设置chmod 功能:改变权限命令. 常用参数: 1=x(执行权execute) 2=w(写权write) 4=r(读权Read) setui ...

  2. Linux 权限设置

    一.文件和目录权限 在Linux系统中,用户可以对每一个文件或目录都具有访问权限,这些访问权限决定了谁能访问,以及如何访问这些文件和目录. 1.文件权限简介 在Linux系统中,每一位用户都有对文件或 ...

  3. linux中权限设置,Linux 权限设置chmod

    Linux中设置权限,一般用chmod命令 1.介绍 权限设置chmod 功能:改变权限命令. 常用参数: 1=x(执行权execute) 2=w(写权write) 4=r(读权Read) setui ...

  4. ntfs linux权限设置,如何在NTFS(或FAT32)分区上使用'chmod'? - Ubuntu问答

    问题描述 我有一个需要在NTFS分区上执行的脚本.脚本的权限设置为600. 我试图通过运行chmod 755 script.sh来修改权限,chmod 755 script.sh不报告故障或任何事情 ...

  5. 【Linux】linux权限设置

    文章目录 一.shell 1. shell概念 2. 进程 二.用户 1. 用户分类 2. 用户切换 三.权限 1. 临时权限提升 2. 权限的属性 3. linux中角色类别 4. 第一列文件属性 ...

  6. linux应用程序设置粘滞位,linux 权限设置和SUID,SGID以及粘滞位

    我们知道文件的权限可以用三个八进制数字表示.其实文件的权限应该用四个八进制来表示,不过用 ls -l 命令时,只显示三个罢了.那个没有显示的八进制数字其实是第一个,它用来设定一些特殊权限.这个八进制数 ...

  7. 宝塔Linux权限设置,宝塔linux面板如何绑定域名

    1.到 主机记录,如果是二级域名就填写 bt 或其他,如果是顶级域名,可填写 www 或@:记录值就填写安装宝塔 Linux 面板的 2.登录宝塔 Web 面板 >> 面板设置 >& ...

  8. linux文件夹分配用户权限,linux权限设置(开放某个文件夹给指定用户)

    问题背景: 今天想把自己的数据集开放给同事a,只允许其读,不允许写. 操作: step1: 查看该文件夹属于哪一个用户,哪一个组 ls 文件夹 -l step2: usermod -a -G 指定文件 ...

  9. Linux学习笔记35——特定权限设置(比group、user更细的设置)、身份切换(su、sudo)、密码验证过程详解(PAM)、批量创建用户

    一.主机的细部权限规划:ACL 的使用 从第五章开始,我们就一直强调 Linux 的权限概念是非常重要的! 但是传统的权限仅有三种身份 ( owner, group, others) 搭配三种权限 ( ...

最新文章

  1. mySQL优化 my.ini 配置说明
  2. LeetCode Path Sum III(前缀和)
  3. sql server 2008 您所做的更改要求删除并重新创建以下表
  4. x12arima季节调整方法_降低农村生活污水处理设备运营成本的方法
  5. 求正多边形的面积JAVA_第六章第三十六题(几何:正多边形的面积)(Geometry: area of a regular polygon)...
  6. (四)深入浅出TCPIP之TCP三次握手和四次挥手(下)的抓包分析
  7. 蚂蚁集团上市造富:员工激励达1376.9亿元,人均超800万!
  8. 59条搞笑但却真实无比的编程语录
  9. Linux vsFTPd服务详解——本地用户登录实战
  10. “九”答不可 | 量子计算会“带来革命性改变”吗?
  11. ThreadPoolExecutor线程池源码(二) - 核心源码
  12. python报错:ValueError: invalid literal for int() with base 16: ‘ ‘
  13. Altera的单时钟同步FIFO,带empty和full端口
  14. 安全漏洞防御(8) DDOS 攻击的防范教程
  15. arc120C - Swaps 2
  16. 萌新记一次在openEuler下安装VMware-Tools的失败经历
  17. Anaconda3 偏好设置
  18. 机器学习中,对于数据的预处理是否是测试集和训练集一起进行?
  19. 正确率,精确率,召回率.
  20. 优地、云迹、擎朗、普渡科技的服务机器人场景战争

热门文章

  1. GitHub:建立仓库,本地上传与更新内容
  2. python 培训 太原
  3. springboot的filter 过滤器的使用
  4. Flutter布局组件之层叠组件Stack和Positioned
  5. Windows10家庭版的账号模糊不清使用而导致问题的修复
  6. 连锁酒店无线全覆盖,距离不再是问题!!!
  7. Javascript Object和Map之间的转换
  8. php密文接口,php接口安全:php接口加密的四个方案
  9. 数字员工在苏宁:我们为什么在人力资源体系部署RPA?
  10. 在华为云服务器上部署的web项目,外网不能访问处理方法