一、文件权限的基础知识点:
ugo表示与文件关联的3个部分:用户、组、其他用户
rwx读、写、执行
lsattr查看文件的隐藏属性,下面是文件的一些属性:
append only (a)
no atime updates (A)
compressed(c)
no copy on write (C)
no dump (d)
synchronous directory updates (D)
extent format (e): the file is usingextentsfor mapping the blocks on disk.
immutable (i)
data jour‐nalling (j)
secure deletion (s)
synchronous updates (S)
no tail-merging (t)
top of directory hierarchy (T)
and undeletable (u)
attribute is used by thehtree programcode to indicate that a directory is being indexed using hashed trees(I)
对应的中文解释:
+ :在原有参数设定基础上,追加参数。
- :在原有参数设定基础上,移除参数。
= :更新为指定参数设定。
A:文件或目录的 atime (access time)不可被修改(modified), 可以有效预防 磁盘I/O错误的发生。
S:硬盘I/O同步选项,功能类似sync。a:即append,设定该参数后,只能向文件中添加数据,而不能删除,多用于服务器日志文件安全,只有root才能设定这个属性。
c:即compresse,设定文件是否经压缩后再存储。读取时需要经过自动解压操作。
d:即no dump,设定文件不能成为dump程序的备份目标。
i:设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。i参数对于文件 系统的安全设置有很大帮助。
j:即journal,设定此参数使得当通过mount参数:data=ordered 或者 data=writeback 挂 载的文件系统,文件在写入时会先被记录(在journal中)。如果 filesystem被设定参数为 data=journal,则该参数自动失效。
s:保密性地删除文件或目录,即硬盘空间被全部收回。
u:与s相反,当设定为u时,数据内容其实还存在磁盘中,可以用于undeletion。各参数选项中常用到的是a和i。a选项强制只可添加不可删除,多用于日志系统的 安全设定。而i是更为严格的安全设定,只有superuser (root) 或具有 CAP_LINUX_IMMUTABLE处理能力(标识)的进程能够施加该选项。
e:表示采用ext文件系统。
Chmod a+ 修改所有用户组的文件访问权限
遇到无法删除文件的情况:1)可能是只有该文件的只读权限
2)设置了immutable(不可改变)位.
二、2种特殊权限:a和I
1.关于i权限:
chattr +i 1.txt运行之后第5个段会出现i,之后这个文件就不能修改也不能删除。
怎么去掉该权限:chattr -i 1.txt2. 关于a权限:
Chattr +a 1.txt只能用echo增加不能用vi去修改,不能删除。
如果是对于目录设置这样的权限,则:该目录下只运行增加文件,不运行修改文件和删除文件。但在它的子目录里面建的子目录或者子目录里面建的文件可以删除掉。
三、授予权限:比如我有一个user1用户,然后某个的目录的权限是root root 755,当我从root切换到user1的时候,就不能在该目录下新建文件或者目录或者删除文件。如果该目录的上层目录是777权限,那不管子目录的权限是什么都可以删除修改。
如果该上层777权限的目录下面有个root的文件,强制对该文件修改内容,那么该文件的所属组和属主将会变成该用户,其实内部原理是先把以前的文件干掉后重新创建:
[user1@whitehat test]$ ll
total 0
-rw-r--r-- 1 root root 0 Aug 6 16:13 abc
[user1@whitehat test]$ vi abc
[user1@whitehat test]$ ll
total 4
-rw-r--r-- 1 user1 user1 9 Aug 6 16:14 abc
Set_uid:可以临时获得文件所属主的权限。
Set_gid:某个目录下面新建的目录的所属组会和这个目录的所属组相同
Sticky:/tmp目录就是典型的拥有t这个权限的目录。
1)set_uid.例如passwd这个命令,如下:
这个s就叫set_uid,被授予set_uid权限的只能是二进制文件,并且建立在可执行权限的基础上,去掉执行权限x,就会变成大S。怎么下发权限,权限下发之后,普通用户就可以通过直接passwd修改密码,如下:
[user1@whitehat ~]$ passwd
Changing password for user user1.
Changing password for user1.
(current) UNIX password:
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
2)set_gid,首先这个是针对目录的。
通过chmod g+s就实现了set_gid功能。在该目录下面建立的文件或者目录(或者子目录下面建立的子目录)的组与父目录的所属组相同。3)sticky,我们可以看看tmp目录的权限,我们可以看到在最后有个t,当然root账户可以删除tmp下面的文件,但是普通用户就无法删除或者修改或者增加其他用户创建的文件:使用chmod o+t对其授权
下图显示,怎么用数字设置这3个权限:
四、set_uid/set_gid/sticky权限的数字表示:
说明:这些特殊标志显示为小写字母 (s, s, t). 若无执行权限则显示为大写字母 (S, S, T)。