Linux系统中,文件都有存取权限这个属性,在终端执行如下命令,就会显示权限属性。
www.linuxidc.com@linuxidc:~$ ls -l
总用量 12
drwxr-xr-x 2 saga saga 4096 2007-03-04 00:51 Desktop
drwxr-xr-x 2 saga saga 8192 2007-03-04 01:25 tmp
简单的说,权限分三组
依次是:文件所有者(o),同组用户(g),其余用户(a)。
每组权限分为3位,r(read), w(write), x(execute)。
可以用8进制表示,r w x 分别是 4 2 1,权限是相加的
rwx就是7,rw就是6。。。。
当对文件进行访问时,内核就检查进程关联的ID和该ID对应的权限位是否符合要求。
当我们要读取文件 /usr/bin/ls 时,就需要对/ /usr /usr/bin 目录有执行权限,对ls有读取权限。
非目录的文件,读取权限和写入权限以及执行权限都不难理解。
对于目录文件(文件夹):
读取权限是列出文件夹里文件列表的权限。
写入权限是修改文件夹里的文件的名字的权限。
执行权限是进入文件夹的权限。
操作 | 需要的权限 |
创建/删除/改名 文件 | 对父目录的w和x权限,以及所有祖先目录的x权限 |
修改文件权限 |
有效用户ID是文件所有者,或者拥有root权限 |
修改文件内容 |
对父目录的x权限,以及所有祖先目录的x权限 |
列出目录的文件列表 |
对父目录的rx权限,以及所有祖先目录的x权限 |
修改文件的所有者 |
BSD系:拥有root权限
System V:拥有root权限,或者有效用户ID等于文件所有者ID |
sticky bit:
拥有sticky bit的文件,执行时会将程序正文段常驻内存,现代的系统一般不用这个
拥有sticky bit的目录,只有对该目录具有写许可权的用户并且满足下列条件之一,才能删除或更名该目录下
的文件: 拥有此文件。拥有此目录。是超级用户。
说明一下进程关联的ID。大致分为三组。
1 实际上是谁
实际用户ID
实际组ID
2 用于检测文件存取权限时出示的ID
有效用户ID
有效组ID
添加组ID
3 由exec函数保存
保存设置-用户ID
保存设置-组ID
进程在默认情况下,有效用户ID == 实际用户ID,有效组ID == 实际组ID。
当文件设置了setuid时,文件执行时,将进程的有效用户ID设置为文件所有者ID。
当文件设置了setgid时,文件执行时,将进程的有效组ID设置为文件的组ID。
这是个相当危险的东西,如果rm命令的那个文件所有者设置成root,并且设置了setuid
那么任何能使用rm命令的用户,都能做到root能用rm命令做到的事情。
涉及到更改权限操作的命令有 chmod chown chgrp 具体的使用可以man这个命令
新建一个文件或者目录的时候,会设置默认的权限。这个设置保存在
/home/用户名/.bashrc 文件
umask 077 是我的设置
umask 后面的 077表示掩码
创建文件目录时,权限位是rwx rwx rwx,将掩码里为1的位置为-
以077为例,就变成rwx — —
创建文件时,umask值最高为6,也就是说,新建的文件,默认没有执行权限,
不管umask是如何设置。