一个文件的详细信息:
dr-xr-x---. 16 root root 4096 Aug 26 09:47 root
文件类型 权限 硬链接次数 属主 属组 文件大小 文件最后一次修改时间 文件名
文件类型
- 普通文件
d 目录
c 字符文件 //顺序存储
b 块设备文件 //随机读取
l 链接文件 //软连接(快捷方式)
s 套接字
p 管道文件
权限问题
对于root用户来说没有权限的限制,只对普通用户而言
权限这里的字母三个一组,依次为所属用户、所属组、和其他人
所属用户:u
所属组:g
其他人:o
读:r 写:w 执行:x
我们在设置权限时,r w x也可以用4 2 1来代替(注:数字只是方便我们表示,最终权限的计算还是要用字母)
0 ---
1 --x
2 -w-
3 -wx
4 r--
5 r-x
6 rw-
7 rwx
例:rwxr-xr-x:755
对于普通文件:
r:可读取此文件的实际内容(cat查看文件)。
w:可编辑该文件的内容(vim,echo),但不具备删除该文件本身的权限(删除文件由文件的上层目录控制,与文件本身的权限无关)。
x:该文件具有可以被系统执行的权限。
对于目录文件:
r:具有读目录结构列表的权限,可以查询该目录下的文件名数据(ls将该目录的内容列表显示出来)。
w:对目录有一个创建、移动和复制的权限。
x:用户能否进入该目录。
修改权限:
chmod
所属用户:u
所属组:g
其他人:o
+:增加权限
- :取消权限
例:chmod u=rwx,g+w,o-r FILENAME 给所属用户rwx权限、所属组加一个写的权限、其他人去掉读的权限
权限掩码:控制创建文件的权限
查看权限掩码:umask
修改权限掩码:
umask 022
当权限掩码值为022时:
普通文件的权限属性:666,默认创建普通文件的权限值就为644。
目录文件的权限属性:777;默认创建的目录权限值就为755。
rw- rw- rw- 666
--- r-x r-x 055
rw- r-- r-- 644 //数字只是方便我们表示,最终权限的计算还是要用字母
特殊权限:当前面第一位为4和2权限就叫强制位,1的权限就是冒险位,4代表的是uid,2代表gid,1代表的是sticky
suid:u+s,让进程不再属于它的发起者,而是属于程序文件本身。(suid只对二进制文件有效;调用者对该文件有执行权;在执行过程中,调用者会暂时获得该文件的所有者权限;该权限只在程序执行的过程中有效)。如果文件原来有执行权限就显示为s,反之显示S。
sgid:g+s,对于普通文件,以组的权限执行修改/usr/bin/touch的g+s,touch文件后文件所属组为root(作用于普通文件时,和suid类似);对于目录文件,目录的属组是谁,在目录下创建的文件的属组是目录的属组。即运行程序时,进程的所属组是程序文件自身的所属组,而不是进程发起者的所属组
sticky:o+t,不能够删除其他用户在同目录里创建的文件,也无法修改其他用户创建的文件的内容,可删除修改自己创建的文件
安全上下文:
进程的权限取决于用户的发起者的权限,而并非执行文件本身。
进程访问文件时,先查看用户权限,如果不是,再查看进程的发起用户是不是目标文件所属组成员;系统任何进程开始都保存为一个文件,由用户执行可执行文件后成为进程,而能否执行,取决于用户对可执行文件有没有权限,而程序一旦执行后转为进程,那么进程就与之前的可执行文件无关,进程的权限为进程发起者的权限,而进程能否访问某个文件,则取决于发起者是否有权限访问目标文件,而这一切就叫做安全上下文。
修改文件的所属关系
可以修改一个文件的所属用户和所属组。
chown 修改所属用户
chown USERNAME FILENAME
chown USERNAME:GROUPNAME FILENAME
chown USERNAME.GROUPNAME FILENAME
chown .GROUPNAME FILENAME :
chgrp 只修改所属组
chgrp GROUPNAME FILENAME 与修改所属用户命令格式一致、
几个细节:
1、这里因为redhat用户没有权限,所以就不能访问a文件
这里我们在创建一个haha用户,并将其放入到redhat组中;我们用haha用户访问a文件,显示成功。
权限的匹配是按照用户、组、其他人的顺序来匹配的。
2、当前的用户只能更改当前所属用户的文件权限。比如haha用户只能修改所属于haha用户的文件的权限,而不能修改所属于redhat用户的文件