使用xfs命令更改文件的属性

在xfs文件系统中尝试使用chattr命令来修改文件系统的文件属性。

XFS是一种文件系统。

在Linux文件系统中,ext4是redhat6/centos6推荐使用的文件系统,但在redhat7/centos7中,xfs成为了默认的文件系统。

参考:
Red Hat Enterprise Linux 7 安装指南

XFS是具有出色的可伸缩性和高性能的文件系统。(略)这是一个强烈推荐的文件系统,并且默认情况下选择该文件系统。

“chattr” 是什么意思?

更改Linux文件系统(ext2/ext3/ext4)文件属性的命令。
除了权限设置外,还可以添加压缩属性和不可更改(不可删除)的属性。
尽管手册只提到了ext2,但似乎也适用于ext3和ext4。

chattr手册

修改位于Linux第2版文件系统(ext2fs)上的文件属性。

环境

在AWS上的CentOS 7上进行确认。

验证

确认存储设备的状态

使用df命令查看文件系统的格式。
可以看出文件系统类型为xfs。
通常,磁盘设备的命名以/dev/sd开头,
但在这个环境(AWS)中,命名以/dev/xv开头。

$df -T
ファイルシス   タイプ   1K-ブロック    使用   使用可 使用% マウント位置
/dev/xvda1     xfs         41931756 1039576 40892180    3% /
devtmpfs       devtmpfs      484356       0   484356    0% /dev
tmpfs          tmpfs         506944       0   506944    0% /dev/shm
tmpfs          tmpfs         506944   25804   481140    6% /run
tmpfs          tmpfs         506944       0   506944    0% /sys/fs/cgroup
tmpfs          tmpfs         101392       0   101392    0% /run/user/1000

对chattr进行验证

使用Ceontos用户进行验证。

$whoami
centos

在主目录下创建目录和文件。

$mkdir -p ~/test/dir
$cd ~/test
$touch test-file
$ls -al
合計 0
drwxrwxr-x. 3 centos centos  34  2月 20 16:11 .
drwx------. 4 centos centos 123  2月 20 16:10 ..
drwxrwxr-x. 2 centos centos   6  2月 20 16:10 dir
-rw-rw-r--. 1 centos centos   0  2月 20 16:11 test-file

尝试为目录和文件添加无法更改属性的chattr属性。然而,即使我对目录和文件拥有所有权,也无法更改属性,出现错误。

$chattr +i dir
chattr: 許可されていない操作です while setting flags on dir
$chattr +i test-file
chattr: 許可されていない操作です while setting flags on test-file

在手册上确认了以下内容,可以看出普通用户无法给属性i赋值。

已经设置了i属性的文件是无法修改的。
也就是说,禁止删除、改变文件名、创建指向该文件的链接以及向该文件写入数据。
只有超级用户或具有CAP_LINUX_IMMUTABLE能力的进程才能设置或解除此属性。

在获取了root权限并添加了不可更改属性后,成功地进行了设置。

$sudo chattr +i dir
$sudo chattr +i test-file 

可以使用lsattr命令来查看文件的属性。
目标目录和文件被设置为不可修改(i)属性。

$lsattr -a
---------------- ./.
---------------- ./..
----i----------- ./dir
----i----------- ./test-file

尝试删除被添加了不可更改属性的文件。
即使有写入权限,也会显示“未经许可的操作”而无法删除。

$rm -rf dir
rm: `dir' を削除できません: 許可されていない操作です
$rm -f test-file 
rm: `test-file' を削除できません: 許可されていない操作です

即使具有根权限,也无法删除。

$sudo rm -rf dir
rm: `dir' を削除できません: 許可されていない操作です
$sudo rm -f test-file 
rm: `test-file' を削除できません: 許可されていない操作です

不仅不能删除,还不能移动。

$mv dir dir2
mv: `dir' から `dir2' へ移動できません: 許可されていない操作です
$mv test-file test-file2
mv: `test-file' から `test-file2' へ移動できません: 許可されていない操作です

无法对文件进行写入。

$echo hello >> test-file
-bash: test-file: 許可がありません

文件复制可以顺利进行。复制后的文件不会继承属性。

$cp test-file new-file
$ls -al
合計 0
drwxrwxr-x. 3 centos centos  50  2月 20 16:37 .
drwx------. 4 centos centos 123  2月 20 16:10 ..
drwxrwxr-x. 2 centos centos   6  2月 20 16:10 dir
-rw-rw-r--. 1 centos centos   0  2月 20 16:37 new-file
-rw-rw-r--. 1 centos centos   0  2月 20 16:11 test-file
$lsattr
----i----------- ./dir
----i----------- ./test-file
---------------- ./new-file

不允许在无法更改属性的目录下创建任何目录或文件。

$touch dir/create-file
touch: `dir/create-file' に touch できません: 許可がありません
$mkdir dir/create-dir
mkdir: ディレクトリ `dir/create-dir' を作成できません: 許可がありません

解除不可更改的属性。

$sudo chattr -i dir test-file
$lsattr -a
---------------- ./.
---------------- ./..
---------------- ./dir
---------------- ./test-file
---------------- ./new-file

由于解除了不可更改属性,现在可以删除文件了。

$rm -rf dir
$rm -f test-file
bannerAds