共计 2885 个字符,预计需要花费 8 分钟才能阅读完成。
一、文件不可批改属性
1. 什么是不可批改属性
咱们晓得,Linux 零碎中的文件都能够设置读、写、执行权限。然而在实际操作中批改某些文件时,常常会呈现明明以后用户领有对该文件的写权限,却还是无奈对文件进行批改。这种状况通常是因为文件被设置了 不可批改属性。
不可批改属性 是通过 chattr 命令将文件设置为不可批改,而且一旦设置,包含 root 在内的任何用户都无奈删除该文件,除非撤销其不可批改的属性。
应用 chattr 设置 不可批改属性 后,能够应用 lsattr 命令来查看该属性。
其中,最罕用的就是 +i
与 +a
这个两个属性。+i
属性能够让一个文件无奈被增加和批改文件内容,也不能对文件进行删除和改名。+a
属性能够让一个文件不能被删除和批改数据,只能以 echo '字符串' > file
的模式向文件中追加数据。
不可批改属性对系统很重要,尤其是在零碎的数据安全下面,能够防止重要文件被篡改。
不过 chattr 指令只能在 Ext2
/Ext3
/Ext4
的 Linux 传统文件系统下面残缺失效,其余的文件系统可能就无奈残缺的反对这个指令了,例如 xfs
仅反对局部参数。
2. 查看文件系统
- 办法一:
df -T filename
命令
[root~]# df -T .bash_history
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/vda1 ext4 51473868 20461060 28689688 42% /
能够通过第二列的 Type 得悉 文件系统类型是 ext4。
- 办法二:查看
/etc/mtab
文件
通过查看 /etc/mtab
文件来确定文件系统的类型。
[root~]# cat /etc/mtab
rootfs / rootfs rw 0 0
sysfs /sys sysfs rw,relatime 0 0
proc /proc proc rw,relatime 0 0
devtmpfs /dev devtmpfs rw,nosuid,size=930832k,nr_inodes=232708,mode=755 0 0
securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0
devpts /dev/pts devpts rw,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /run tmpfs rw,nosuid,nodev,mode=755 0 0
...
/dev/vda1 / ext4 rw,noatime,data=ordered 0 0
...
/etc/mtab
文件的第一列指定了分区设施门路(例如 /dev/vda1
),第三列指定了文件系统类型(例如ext4
)。
二、chattr 设置不可批改属性
1. chattr 命令
chattr [+-=] [选项] [文件或目录]
[+-=]
+
:减少权限-
:删除权限=
:设定权限
选项
i
:(insert)插入
- 文件:不能对文件进行删除和改名,不能增加和批改文件数据。
- 目录:不能建设和删除文件,能够批改目录下文件数据
a
:(append)追加
- 文件:不能删除和批改数据,只能以
echo '字符串' > file
的模式向文件中追加数据。- 目录:只容许在目录中增加和批改文件,不容许删除文件
2. lsattr 查看文件系统属性
lsattr [选项] [文件名]
选项
-a
:显示所有文件和目录-d
:若指标是目录,仅列出目录自身的属性,而不是子文件的属性
3. 示例
文件利用 i
选项
不能对文件进行删除和改名,不能增加和批改文件数据。
- 创立文件 file_i,并随便写入一些内容
[root/tmp/chattr]$ touch file_i
[root/tmp/chattr]$ date > file_i
[root/tmp/chattr]$ cat file_i
2018 年 06 月 08 日 星期五 12:04:57 UTC
chattr +i file_i
[root/tmp/chattr]# chattr +i file_i
[root/tmp/chattr]# lsattr file_i
----i----------- file_i
- 不能删除
[root/tmp/chattr]# rm file_i
rm: 无奈删除 "file_i": 不容许的操作
- 不能改名
[root/tmp/chattr]# mv file_i file
mv: 无奈将 "file_i" 挪动至 "file": 不容许的操作
- 不能减少数据
[root/tmp/chattr]# date >> file_i
bash: file_i: 权限不够
- 不能批改数据
[root/tmp/chattr]# date > file_i
bash: file_i: 权限不够
目录利用 i
选项
不能建设和删除文件,能够批改目录下文件数据
- 创立目录 dir_i,并在目录下创立一个文件 file
[root/tmp/chattr]# mkdir dir_i
[root/tmp/chattr]# touch dir_i/file
[root/tmp/chattr]# ll dir_i/
总用量 0
-rw-r--r-- 1 root root 0 6 月 8 12:13 file
chattr +i file_i
[root/tmp/chattr]# chattr +i dir_i/
[root/tmp/chattr]# lsattr -d dir_i/
----i----------- dir_i/
- 不能创立文件
[root/tmp/chattr]# touch dir_i/file2
touch: 无奈创立 "dir_i/file2": 权限不够
- 不能删除文件
[root/tmp/chattr]# rm dir_i/file
rm: 无奈删除 "dir_i/file": 权限不够
- 能够批改目录下文件数据
[root/tmp/chattr]# date > dir_i/file
[root/tmp/chattr]# cat dir_i/file
2018 年 06 月 08 日 星期五 12:17:16 UTC
三、实际利用
1. 手动设置 DNS 服务器
/etc/resolv.conf
文件蕴含了一组 DNS 服务器列表。DNS 服务器负责将域名转换成 IP 地址。
它通常被设置成你所属 ISP(互联网服务提供商) 的 DNS 服务器地址。但如果你更喜爱应用第三方的 DNS 服务器,能够批改 /etc/resolv.conf
,将其指向所选的服务器。
可当下次你再连贯到 ISP 时,/etc/resolv.conf
又会复原到之前的设置。为了防止这种状况,能够为 /etc/resolv.conf
增加 +i
属性设置成不可批改。
2. 避免用户批改历史命令记录
~/.bash_history
中记录了用户操作工作运行的所有历史命令。
为 .bash_history
文件增加 +a
属性,只能追加内容,不能删除文件和批改内容。这样就能避免用户批改历史操作命令记录。
chattr 在应用上必须要特地小心,切记不要滥用,否则会造成很大的困扰。
例如:某天你突发奇想,给/etc/shadow
这个重要的明码记录文件增加了+i
属性,那么过了若干天之后,你忽然要新增使用者,却始终无奈新增,这肯定会令你抓狂!