linux学习笔记(三) 文件权限理解

文件权限理解

在linux系统中,无论是设备,队列,还是内存,一切都被视为文件,由于linux系统是基于多人分时使用的,因此,权限分离是必不可少的一部分。

基本权限

进入linux任一目录后,输入指令

ls -l

得到以下输出

total 40
-rw-r--r--  1 achilles  staff    26  1 19 23:52 README.md
-rw-r--r--  1 achilles  staff   190  1 19 23:52 clickhouse-jdbc.iml
-rw-r--r--  1 achilles  staff   190  2 20 16:03 job-pending-kill.iml
drwxr-xr-x  6 achilles  staff   192  4 14 21:07 kill-gain-sum
drwxr-xr-x  7 achilles  staff   224  4 28 21:44 kill-job
lrwxr-xr-x  1 achilles  staff     9  4 28 21:45 kill-jobp -> kill-job/
-rw-r--r--  1 achilles  staff  6076  2 20 16:04 pom.xml

第一列所示即为文件的基础属性,主要可以分为四段。

第一段为文件类型,第二段为文件拥有者权限(u),第三段为文件拥有者所在组的权限(g),第四段为其他人的权限(o)。

第三列和第四列分别表示文件拥有者及文件拥有者所在组。

其中,文件类型主要有如下几种

d   目录
-   普通文件或硬链接(ln不带其他参数默认创建硬链接)
l   软链接(一般使用ln -s创建)(删除软链接时注意不要删除目录/)

r w x分别表示读,写,可执行权限,可以用chmod, chgrp等命令改变

chmod u+rwx pom.xml
chmod u=rwx pom.xml
chmod 744 pom.xml
# 744代表以八进制对应表示ugo的权限,r为4,w为2,x为1,对应位权限相加即可

权限判断的执行顺序是,首先判断执行用户是否是文件拥有者,若是,则具有文件拥有者的属性(u),如不是,则判断执行用户是否属于文件拥有者所在组,若是,则具有文件拥有者所在组的权限(g),如不是,则具有其他人权限(o)。

对于文件来说,拥r权限,代表可以读取文件,拥有w权限,代表可以写入文件,拥有x权限,代表可以执行文件

对于目录来说,拥有r权限,代表可以使用ls读取目录详细信息,拥有w权限,代表可以修改目录下的结构即在该目录下创建文件,拥有x权限,代表可以打开目录

使用者能够进入某目录成为可工作目录需要的基本权限

  • 对目录有x权限,进入目录
  • 对目录有r权限,ls读取详细信息

使用者能够在某个目录内读取一个文件需要的基本权限

  • 对目录有x权限,进入目录
  • 对文件有r权限,读取文件

使用者修改一个文件需要的基本权限

  • 对目录有x权限,进入目录
  • 对文件有r权限,读取文件
  • 对文件有w权限,修改文件

使用者创建一个文件需要的基本权限

  • 对目录有x权限,进入目录
  • 对目录有w权限,修改目录结构

注意:若用户对目录具有w权限,即使其对目录内的文件不具有w权限,他也能删除目录内的文件

默认权限

不同用户创建的文件可能具有不同的初始权限,这就涉及到默认权限umask

umask
0022

这个0022代表的含义是什么呢?(第一个0先忽略,后面会提到,此处认为是022)

对于文件来说,一般的最大需要权限为666(一般不需要执行),对于目录来说,一般的最大权限为777(因为需要x权限进入目录)

那么创建文件时,实际的默认权限为022 XOR 666 = 000 010 010 XOR 110 110 110 = 110 100 100 = 644

我们创建一个文件验证一下

touch test && ls -l test
-rw-r--r--  1 achilles  staff  0  4 29 11:08 test

可以看到,符合预期。

目录的默认权限也类似文件的计算方法。

注意,不同的用户具有不同的默认权限,可以用umask改变。

umask 002

隐藏属性

上面部分主要讲了文件的基本权限。如果用户拥有对文件的w权限,那么用户就一定能够修改文件吗?

答案是不一定!因为文件还存在隐藏属性!

使用如下指令可以查看文件的隐藏属性

注意:

lsattr
-------------e-- ./test

下面列出一些常见的隐藏属性

A  :当设置了 A 这个属性时,若你有存取此文件(或目录)时,他的存取时间 atime 将不会被修改,可避免 I/O 较慢的机器过度的存取磁盘。(目前建议使用文件系统挂载参数处理这个项目)
S  :一般文件是非同步写入磁盘的,如果加上 S 这个属性时, 当你进行任何文件的修改,该更动会“同步”写入磁盘中。
a  :当设置 a 之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root 才能设置这属性
c  :这个属性设置之后,将会自动的将此文件“压缩”,在读取的时候将会自动解压缩,但是在储存的时候,将会先进行压缩后再储存(看来对于大文件似乎蛮有用的!)
d  :当 dump 程序被执行的时候,设置 d 属性将可使该文件(或目录)不会被 dump 备份
i  :这个 i 可就很厉害了!他可以让一个文件“不能被删除、改名、设置链接也无法写入或新增数据!” 对于系统安全性有相当大的助益!只有 root 能设置此属性
s  :当文件设置了 s 属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘空间,所以如果误删了,完全无法救回来了喔!
u  :与 s 相反的,当使用 u 来设置文件时,如果该文件被删除了,则数据内容其实还存在磁盘中,可以使用来救援该文件喔!
e  :表示是ext文件系统来存储的,不能使用chattr -e来去掉
注意1:属性设置常见的是 a 与 i 的设置值,而且很多设置值必须要身为 root 才能设置
注意2:xfs 文件系统仅支持 AadiS 而已

可以使用chattr指令配合上面的参数来修改文件的隐藏属性,如

chattr +i test
# 表示改文件不能被删除,也不能被修改了

特殊权限

还有一类特殊权限,SUID, SGID, SBIT

SUID

如果文件拥有者设置了SUID权限,且文件使用者具有对文件的x权限,那么文件使用者在执行时将以文件拥有者的身份执行。即 set UID。

比如/etc/shadow这个文件的权限为

---------- 1 root root 1287 Apr 25 19:02 /etc/shadow

即只有root用户有权限修改这个文件,可是普通用户实际上是可以使用passwd指令修改自己的密码

ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 27856 Aug  9  2019 /usr/bin/passwd

我们可以看到,/usr/bin/passwd指令属于root用户,root用户组,文件创建者root拥有的权限和之前讲的基本权限不同,为rws,这个s权限即为SUID权限,其他用户对其具有x权限。所以其他用户在执行/usr/bin/passwd指令时,会暂时具有文件拥有者root的权限,从而修改/etc/shadow

注意:SUID仅能对文件设置,不能对目录设置。

SGID

s标志在文件拥有者所在群组的x标志位,而不在文件拥有者的x标志位时,称为SGID。即set GID。

对文件来说,如果文件设置了SGID权限,且文件使用者具有对文件的x权限,那么文件使用者在执行时将以文件拥有者所在组的身份执行。

对目录来说,如果目录设置了SGID权限,且使用者具有对文件的rx权限,那么使用者能够进入此目录,使用者在此目录下的有效组将会变成该目录的组。此外,若使用者在此目录下具有w权限(可以新建文件),则使用者创建的新文件具有与目录一样的组。

SBIT

t标志表示,且一般标在ox权限处。sticky BIT。

如:

drwxrwxrwt

SBIT仅对目录有效,它表示,当使用者对目录具有w, x权限时,即使用者具有写入的权限,若此时目录设置了SBIT,则表示使用者在该目录下创建文件或目录时,仅有自己和root才可以删除对应的文件或目录。

特殊权限其他

最后,前面提到过文件权限修改一般为3位八进制数字,涉及特殊权限时则为4位八进制数字(如0022,第一个0表示特殊权限,可以简化为022

  • 4 表示SUID
  • 2 表示SGID
  • 1 表示SBIT

如:

touch test && chmod 6070 test && ls -l test
---Srws--- 1 root root 0 Apr 29 11:43 test

详细解释一下6070。第一位6表示文件有SUIDSGID权限,第二位0表示文件拥有者不具有rwx权限,第三位7表示文件所属组具有rwx权限,第四位0表示其他用户不具有rwx权限,这样看来权限应为---srws---,那么实际的权限中大写的S表示什么意思呢?

如果具有对文件的x权限,则使用SUID/SGID替换x时,使用小写的s

如果不具有对文件的x权限,则使用SUID/SGID替换x时,使用大写的S

这样定义后,整个文件权限体系就逻辑清楚,成为一个完整的体系了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值