当前位置: 首页 > Linux

为什么我有写权限却不能修改文件?

时间:2023-04-06 06:28:45 Linux

一、文件的不可修改属性1、什么是不可修改属性?我们知道Linux系统中的所有文件都可以设置读、写、执行权限。但是在实际操作中修改一些文件的时候,经常会出现当前用户对该文件有写权限,但是仍然不能修改文件的情况。这通常是因为文件已设置为不可修改的属性。unmodifiable属性是通过chattr命令将文件设置为不可修改的,一旦设置,包括root在内的任何用户都不能删除该文件,除非取消其不可修改属性。使用chattr设置不可修改的属性后,您可以使用lsattr命令查看它。其中,+i和+a这两个属性是最常用的。+i属性可以防止文件被添加和修改,也不能被删除或重命名。+a属性可以防止文件被删除和修改数据,只能以echo'string'>file的形式向文件追加数据。不可修改属性对系统非常重要,尤其是在系统的数据安全方面,可以防止重要文件被篡改。但是,chattr命令只能在Ext2/Ext3/Ext4等传统Linux文件系统上完全有效,其他文件系统可能无法完全支持该命令。比如xfs只支持部分参数。2.查看文件系统方法一:df-Tfilenamecommand[root~]#df-T.bash_historyFilesystemType1K-blocksUsedAvailableUse%Mountedon/dev/vda1ext451473868204610602868968842%/可以通过秒Type列得知文件系统类型为ext4。方法二:查看/etc/mtab文件通过查看/etc/mtab文件判断文件系统的类型。[root~]#cat/etc/mtabrootfs/rootfsrw00sysfs/syssysfsrw,relatime00proc/procprocrw,relatime00devtmpfs/devdevtmpfsrw,nosuid,size=930832k,nr_inodes=232708,mode=75500securityfs/sys/kernel/securitysecurityfsrw,nosuid,nodev,noexec,relatime00tmpfs/dev/shmtmpfsrw,nosuid,nodev00devpts/dev/ptsdevptsrw,relatime,gid=5,mode=620,ptmxmode=00000tmpfs/runtmpfsrw,nosuid,nodev,mode=75500.../dev/vda1/ext4rw,noatime,data=ordered00.../etc/mtab文件的第一列指定分区设备路径(例如/dev/vda1),第三列指定文件系统类型(例如ext4)。2.chattr设置不可修改的属性1.chattr命令chattr[+-=][选项][文件或目录][+-=]+:增加权限-:删除权限=:设置权限选项i:(插入)插入文件:不能删除和重命名文件,不能添加和修改文件数据。目录:不能创建和删除文件,可以修改目录a中的文件数据:(追加)追加文件:不能删除或修改数据,只能以echo'string'>file的形式向文件追加数据。目录:只允许在目录中添加和修改文件,不允许删除文件导出目录本身的属性,不导出子文件的属性。3.i选项不能删除和重命名示例文件,也不能添加或修改文件数据。创建文件file_i,随机写入一些内容[root/tmp/chattr]$touchfile_i[root/tmp/chattr]$date>file_i[root/tmp/chattr]$catfile_i2018-06-08Friday12:04:57UTCchattr+ifile_i[root/tmp/chattr]#chattr+ifile_i[root/tmp/chattr]#lsattrfile_i----i--------file_i无法删除[root/tmp/chattr]#rmfile_irm:无法删除"file_i":不允许操作无法重命名[root/tmp/chattr]#mvfile_ifilemv:无法将"file_i"移动到"file":不允许操作无法添加数据[root/tmp/chattr]#date>>file_ibash:file_i:Insufficientpermissionscannotmodifydata[root/tmp/chattr]#date>file_ibash:file_i:Insufficientdirectoryapplicationi选项无法创建和删除文件,可以修改目录创建directorydir_i存放文件数据,并创建文件file[root/tmp/chattr]#mkdirdir_i[root/tmp/chattr]#touchdir_i/file[root/tmp/chattr]#lldir_i/totalusage0-rw-r--r--1rootroot0Jun812:13filechattr+ifile_i[root/tmp/chattr]#chattr+idir_i/[root/tmp/chattr]#lsattr-ddir_i/----i----------dir_i/无法创建文件[root/tmp/chattr]#touchdir_i/file2touch:无法创建“dir_i/file2”:权限不足,无法删除文件[root/tmp/chattr]#rmdir_i/filerm:Unabletodelete"dir_i/file":权限不足,无法修改目录下的文件数据[root/tmp/chattr]#date>dir_i/file[root/tmp/chattr]#catdir_i/fileFriday,June08,201812:17:16UTC三、实际应用1、手动设置DNS服务器/etc/resolv.conffile包含DNS服务器的列表DNS服务器负责将域名转换为IP地址。它通常设置为您的ISP(Internet服务提供商)的DNS服务器地址。但如果您更喜欢使用第三方DNS服务器,您可以修改/etc/resolv.conf以将其指向您选择的服务器。但是下次您连接到您的ISP时,/etc/resolv.conf将恢复为以前的设置。为避免这种情况,请将+i属性添加到/etc/resolv.conf以使其不可变。2.防止用户修改历史命令记录~/.bash_history记录了用户操作任务运行的所有历史命令。给.bash_history文件加上+a属性,只能追加内容,不能删除文件和修改内容。这样可以防止用户修改历史操作命令记录。Chattr一定要特别小心使用,切记不要滥用,否则会造成很多麻烦。比如:有一天你心血来潮,给重要的密码记录文件/etc/shadow增加了+i属性,然后过了几天,你突然想添加用户,但是一直加不下来驱使你疯狂的!