命令格式 : chattr [ -RV ] [ +-= acdijsuADS ] 文件或目录名
注 :
-R —— 递归设置指定目录及其目录下的所有文件和子目录的属性;
-V —— 详细显示目录和文件的属性设置情况。
常用选项 :
a | 只允许向文件追加数据,不允许任何进程覆盖重写文件的内容。 |
A | 设置不允许系统更新文件的最后访问时间 |
i | 不可修改属性。具有该属性的文件不能被删除、更名或修改其内容。 |
c | 压缩属性,写入或读取时,系统会自动进行压缩或解压缩 |
s | 安全删除属性。即在删除一个文件时,会使用0填充原文件所在的存贮区,以使恢复工具无法恢复出文件的内容。 |
u | 可恢复性的删除。对于具有该属性的文件,在删除时,系统会保留其数据块以便以后能恢复该文件的内容 |
解释几个选项 :
-i 选项 :
[natash@bogon ~]$ touch file1.txt
[root@bogon ~]# chattr +i /home/natash/file1.txt
[natash@bogon ~]$ rm -rf file1.txt
rm: cannot remove 'file1.txt': Operation not permitted
发现 natash 自己创建的文件,当该文件增加了 -i 的扩展属性后,natash 自己
都删除不了该文件了!
- s 选项 :
所谓安全删除 ( 举个例子 ) :
现在你删除了一个文件,文件存储的是 银行账户和密码。然后,你
呢把这个文件给删除掉了!!
我们知道的是,在删除一个文件,别人也是可以恢复这个文件的,恢
复过来后是不是就可以拿到你文件里的 ( 银行卡账户和密码)实际
上没那么容易,就假设别人拿到了。
那现在我们给这个文件添加一个 s 安全删除属性。
你原先不是把文件删除了,其实只是删除了文件,里面的内容并没有
删除掉,就是别人把你文件恢复后里面的内容还是在的,那加了 s 属
性后,就会往文件里把原先的内容清掉,然后往里面添充0,原先密
码假设是123 账号是 1555555, 那你再删除后,别人恢复过来,只
会看到0,不会看到 账号 和 密码!!!
-a | 列出目录中的所有文件(包括隐藏文件) |
-d | 以与文件相同的方式列出目录的扩展属性 |
-R | 以递归的方式列出目录的属性及其内容 |
注 :
在Linux系统中,当用户创建一个新的文件或目录时,系统都会为新建的文件或目录分
配默认的权限,该默认权限并不是继承了上级目录的权限,而是与umask值(称为权限
掩码)有关,其具体关系是:
新建文件的默认权限=0666-umask值
新建目录的默认权限=0777-umask值
示例 :
在 展开示例之前先来看几样东西 有助于对示例的理解 :
在 root 用户下创建 文件 :
[root@bogon ~]# ls -l test_file1
-rw-r--r--. 1 root root 0 Nov 6 09:20 test_file1
现在根据 我们前面学过的 以数字表达权限,来看下 在 root 账户下创建一个文件
的数字权限是多少??
===>>> 644 ( 记着这个数字,下面验证时会用到 )
也就是说在 root 账户下 默认创建 文件的权限 是 644 !!
那现在,我们来查看下 root 用户的 UMASK 值 :
[root@bogon ~]# umask
0022
那照应前面的 具体关系 :
===>>> 新建文件的默认权限=0666-umask值
===>>> 你就明白了 为什么 root 用户下 创建 文件的默认权限是 644 了!
( 0666 - 0022 = 644 )
在 普通用户下 创建目录 :
[natash@bogon ~]$ mkdir test_dir
[natash@bogon ~]$ ls -ld test_dir
drwxrwxr-x. 2 natash natash 6 Nov 6 09:37 test_dir
显然在 普通用户下 创建 目录 其默认权限为 775
再来查看下 普通用户的 UMASK 值 :
[natash@bogon ~]$ umask
0002
来验证下 前面的具体关系 :
===>>> 新建目录的默认权限=0777-umask值
因此普通用户创建目录的默认权限即 :
0777 - 0002 = 0775 ( 验证成功 )
综上 :
主要就是想告诉大家 解释下 :
# 就是为什么你在 root 用户下创建的文件的默认权限就是 rw-r--r--
( 创建目录同理 )
# 为什么你在 普通用户下 创建的目录 就是 rwxrwxr-x
( 创建文件同理 )
这都是有原因的 ---- UMASK
下段 我们来详细说说 UMASK 值
官方 :
文件权限管理之: 进程umask
进程 新建文件、目录的默认权限会受到umask的影响,umask表示要减掉的权限
( 这个前面已经提到了 )
# 那为什么 root 用户 的 UMASK 值 是 0022, 普通用户的 UMASK 值是 0002 ?
===>>>
这是因为 UMASK 值 是已经提前在 系统中( 环境变量)设置好的!!
来看看 系统里( 环境变量 )的 UMASK 值 :
那是不是已经看到了 002( 针对 普通用户) 和 022 ( 针对 root 用户 )
# umask 的临时修改 :
前面我们已经提到了 如何查看用户的 umask
===>>>
[root@bogon ~]# umask
0022
[natash@bogon ~]$ umask
0002
即 : 在命令行直接 输入 命令 umask 即可 查询 !
临时修改 : 是一样的 就在 命令行 直接改就行
===>>>
[natash@bogon ~]$ umask 000
[natash@bogon ~]$ touch umask_task
[natash@bogon ~]$ ls -l umask_task
-rw-rw-rw-. 1 natash natash 0 Nov 6 10:12 umask_task
即 : 我们临时修改了 普通用户的 umask 值为 000
那他创建文件 其 默认权限就为 : 0666-000 = 0666
你可以看到创建的文件的权限 rw-rw-rw- 即是 0666
# umask 值的永久修改 :
永久修改的时候自然需要在文件里去设置更改
哪个文件呢 ?
===>>> / etc / profile
那么就需要我们 在 这个文件里去修改 ( vim / etc / profile )
展示下 / etc / profile 文件在修改 UMASK 时的具体内容 :
想要修改该文件,那就必须先要读懂该文件 :
你乍一看该文件肯定还是懵逼的状态,需要做以解释
===>>>
$ UID : 就是 用户的 UID
之前也学习过 用户的 UID
普通用户的 UID : >= 1000
系统用户的 UID : 1 - 999
root 用户的 UID : 0
-gt : 在这里需要多做些解释
-gt : greater than >
lt : less than <
gte : greater than equal >=
lte : less than equal <=
这个呢 就是 表示 一种 大小关系
id - gn : 就是 用户组名
id - un : 就是 用户名
[root@bogon ~]# id -gn
root
[root@bogon ~]# id -un
root
综上: 当你了解了上示的解释的时候,你再去理解 文件里的那句代码 :
当 UID > 199 并且 用户名 和 用户组名 一致 的情况下 :
UMASK : 002
否则 : ( 也就是 UID <= 199 或者 用户名 与 用户组名 不一致的时候 )
UMASK : 022
所以也即是说 : 所有的 普通用户 和 部分普通用户 其 UMASK 是 002
注 :
# 所以 修改的时候 其实只需要修改 UMASK 值 就行 ( 就是 修改 002 或者 022 即可 )
你甚至都不需要读懂 上示文件的具体意思!!!
# 当你修改了 UMASK 值后 千万千万要记着 保存了文件退出后,
再 让文件在 当前SHELL 中生效
===>>>
[root@localhost ~]# source /etc/profile //立即在当前shell中生效
一定要再执行下 上示内容 ,我们才能真正的修改成功 !!!
# 通过 UMASK 决定新建用户 HOME 目录的权限 :
注意这个是 你在新建用户的时候 用户家目录 的默认权限就已经被系统默认创建了。
其 新用户的家目录的权限是由 / etc / login.defs 文件控制的!!
示例 :
[root@bogon ~]# useradd umaskuser
[root@bogon ~]# cd /home
[root@bogon home]# ls -ld umaskuser
drwx------. 3 umaskuser umaskuser 78 Nov 6 11:19 umaskuser
可以看到 , 新建用户的家目录 的权限默认就是 700 ( 准确说 是 0700)
那么,0700 是咋来的呢??
我们就得去 / etc / login.defs 来看看了
===>>> cat / etc /login.defs
那么我们前面学到的 :
目录的默认权限是 : 0777 - UMASK
所以在这里 UMASK 就是 上示文件里的 077
因此 : 0777 - 077 = 0700
0700 就是这么来的!!!!!