java删除不了 文件夹权限,明明有写权限,为什么还是不能修改文件?

一、文件不可修改属性

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 UTCchattr +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 filechattr +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 属性,那么过了若干天之后, 你突然要新增使用者,却一直无法新增,这一定会令你抓狂!

b739ec46bb5c46d9c0aa4ce35ba1ea56.png

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[明明有写权限,为什么还是不能修改文件?]http://www.zyiz.net/tech/detail-151643.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值