查看原文
其他

Linux文件与目录管理(10)

Cloud研习社 Cloud研习社 2023-06-06

默认权限

我们通过前几篇文章的演示可以发现,创建的目录默认权限是755(rwxr-xr-x),创建的文件的默认权限是644(rw-r--r--)。为什么呢?这就和Linux控制默认权限的内容相关了,这就是umask。

umask(了解即可):

[root@studyclub attribute]# umask
0022


在Linux中,创建文件的默认最大权限为666(rw-rw-rw-),即默认不给与可执行(x)权限。如果我们默认不想给予666的权限,那么我们可以通过umask来调整。权限666减去umask值就是最终的权限。我们来看:

# 设置umask,使默认权限为文件所有者可读可写不可执行,用户组只有写的权限,其他用户只有写的权限
# 根据上面的要求,我们得出文件的权限应该是rw所以需要666-umask=622--w--w-,换成数字表示法,应该是622。
# 所以需要666-umask=622,umask=044

# 我们看一下实际效果
[root@studyclub attribute]# umask 044
[root@studyclub attribute]# touch msk
[root@studyclub attribute]# ll msk
-rw--w--w- 1 root root 0 May 14 13:32 msk


下面我们看一种特殊情况,设置umask为011,这个时候默认的权限应该是655,那是不是创建的文件默认就有x权限了呢?

[root@studyclub attribute]# umask 011
[root@studyclub attribute]# touch file011
[root@studyclub attribute]# ll file011
-rw-rw-rw- 1 root root 0 May 14 13:41 file011


额,为什么看上去umask没起作用呢?我们记住一个原则,如果umask每个数都是偶数,则666-umask就是最终的默认权限,如果umask是奇数,需要这样计算:666-umask,计算后的结果,把奇数加1后就是最终的默认权限。上面的权限666-011=655,奇数有两个5,分别加1以后就是666,符合最终的结果。

实战练习:请设置umask为奇数,自行练习、验证上面的结论。

隐藏权限

文件除了上面提到的9个权限位以外,为了进一步提高安全性,还设置了隐藏属性。

chattr:(设置文件的隐藏属性)

我们先看命令格式:

[root@studyclub ~]# chattr [+-=][ASacdistu] 文件或目录名称
选项与参数:
+ :添加某一个特殊参数,原来存在参数不变。
- :移除某一个特殊参数,原来存在参数不变。
= :配置一定,且仅有后面接的参数

两个常用的参数:
a:当配置 a 之后,这个文件将只能添加数据,而不能删除也不能修改数据,只有root
    才能配置这个属性。
i:这个 i 可就很厉害了!他可以让一个文件『不能被删除、改名、配置连也无法
    写入或新增数据!』对於系统安全性有相当大的助益!只有 root 能配置此属性

不常用参数(请学有余力的同学自行练习):
A:当配置了 A 这个属性时,若你有存取此文件(或目录)时,他的存取时间 atime
    将不会被修改,可避免I/O较慢的机器过度的存取磁碟。这对速度较慢的计算机有帮助
S:一般文件是非同步写入磁碟的(原理请参考第五章sync的说明),如果加上 S 这个
    属性时,当你进行任何文件的修改,该更动会『同步』写入磁碟中。
c:这个属性配置之后,将会自动的将此文件『压缩』,在读取的时候将会自动解压缩,
    但是在储存的时候,将会先进行压缩后再储存(看来对於大文件似乎蛮有用的!)
d:当 dump 程序被运行的时候,配置 d 属性将可使该文件(或目录)不会被 dump 备份
s:当文件配置了 s 属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘
    空间,所以如果误删了,完全无法救回来了喔!
u:与 s 相反的,当使用 u 来配置文件时,如果该文件被删除了,则数据内容其实还
    存在磁碟中,可以使用来救援该文件喔!


我们看一下i这个参数:

[root@studyclub attribute]# touch testfile2# 创建一个测试文件
[root@studyclub attribute]# chattr +i testfile2# 给这个文件加上隐藏属性i
[root@studyclub attribute]# ll testfile2# 查看属性,隐藏属性看不出来
-rw-r--r-- 1 root root 0 May 15 18:37 testfile2
[root@studyclub attribute]# rm testfile2 # 删除文件
rm: remove regular empty file ‘testfile2’? y# 确认删除
rm: cannot remove ‘testfile2’: Operation not permitted# 提示没有权限删除

# 现在文件无法删除了,我们把这个加上的隐藏权限去掉吧
[root@studyclub attribute]# chattr -i testfile2 # 去掉隐藏权限i
[root@studyclub attribute]# rm testfile2 # 现在尝试删除,就可以成功删除文件
rm: remove regular empty file ‘testfile2’? y


再来看一个常用的a参数:

[root@studyclub attribute]# echo "welcome to studyclub" > testfile2 # 创建一个新文件并写入内容
[root@studyclub attribute]# chattr +a testfile2 # 给文件新加一个隐藏属性a

# 验证a属性的作用
[root@studyclub attribute]# echo "2 welcome to studyclub" > testfile2
-bash: testfile2: Operation not permitted# 不允许写入
[root@studyclub attribute]# echo "2 welcome to studyclub" >> testfile2# 只能追加
[root@studyclub attribute]# rm -f testfile2
rm: cannot remove ‘testfile2’: Operation not permitted# 文件也无法删除


lsattr(查看隐藏属性):

上面我们给文件添加隐藏权限的时候发现ls -l命令无法查看到这个添加属性。lsattr就是用来查看文件隐藏属性的命令。

[root@studyclub attribute]# lsattr [-adR] 文件或目录
选项与参数:
-a :将隐藏文件的属性也列出来,和ls命令里的-a选项的作用是一样的;
-d :如果接的是目录,仅列出目录本身的属性而非目录内的文件,这个和ls命令里的-d选项的作用是一样的;
-R :连同子目录里的文件也一并列出来, 这个和ls命令里的-R选项的作用是一样的


实例展示:

[root@studyclub attribute]# lsattr testfile2
-----a---------- testfile2

[root@studyclub attribute]# chattr +i testfile2
[root@studyclub attribute]# lsattr testfile2
----ia---------- testfile2



新手应知:
    尝鲜Rocky Linux
《Linux基础及进阶》:

    008 - Linux文件与目录管理(5)

    009 - Linux文件与目录管理(6)

    010 - Linux文件与目录管理(7)

    011 - Linux文件与目录管理(8)

    012 - Linux文件与目录管理(9)


看完本文有收获?请分享给更多人


推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!

微信号|bjdream-1


Cloud研习社 · 

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存