文件权限
系统为每个用户维护一组文件权限,通常称为权限。
这些权限控制那些用户标识可以访问文件,以及以何种方式访问文件。
每个文件有3组权限:一组针对属主,一组针对组,一组针对其他用户。
每组权限有3种:读权限(r),写权限(w),执行权限(x)
这3种权限相互之间彼此独立,但是可以结合使用。
如果在对应位上不具备该权限用 - 表示。
如:为了修改一个文件,需要同时具有读权限和写权限。为了运行shell脚本,需要同时具有读权限和执行权限。
读 | 读取文件 |
写 | 写入文件 |
执行 | 执行文件 |
读 | 读取目录条目 |
写 | 创建,移动,复制,或删除目录条目(即改变目录条目) |
执行 | 搜索目录(即使用目录条目) |
ps:
如果文件是程序或者某种类型的脚本,那么它就是可执行的。
一个目录条目仅包含一个文件名,一个指向该文件的指针。并不包含实际的文件。
setuid权限
set userid 设置用户标识。一种特殊的文件权限设置,允许其他用户标识访问文件,就好像他们是文件的属主(创建者)一样。
如果在显示文件的长列表中发现文件权限中的x被s所取代,那么该文件拥有setuid文件权限。
大多数情况下,用来允许普通用户标识运行从root拥有的程序中挑选的程序。
这意味着,无论那个用户标识运行程序,它都以root的特权运行。这样就允许程序完成通常由超级用户执行的任务。
这样的权限可能存在安全风险,通常只用来允许普通用户标识为了执行某个具体的任务而以临时特权来运行程序。
维护文件权限
属主:创建文件的用户标识,属主是可以改变文件权限的唯一用户标识(除了超级用户)。
对于每个用户标识来说,在口令文件中列出的组称为主组,用户标识还可以属于其他组,称为辅组。
id命令可以显示用户标识和组标识。
groups 默认显示当前用户标识所属组的名词,如果指定一个或多个用户标识,则线索这些用户标识所属的组。
除非确实需要与组中的用户共享文件,否则最好完全忽略组这一思想。将组和其他人的权限设置为同样。
ps:
超级用户可以完成几乎所以的事情,可以改变任何文件的权限。如何有需要,还可以改变文件的属主和组。
请记住,你无法对超级用户隐藏任何东西。
文件模式
文件模式:使用一个紧凑的3位数字来表示一个完整的文件权限集。
每位数字代表一个权限集。第一位数字表示属主的用户标识的权限,第二位数字表示组中各用户标识的权限,第三位数字表示其他用户标识的权限。
各种权限的数字值:
读权限(r)= 4
写权限(w)= 2
执行权限(x)= 1
没有权限(-)= 0
对于每一组权限,将数字相加。
其实是将每组权限中的三种权限按顺序排列为一个二进制数,具备该权限为1,不具备为0,然后将这个三位的二进制数转化为十进制。
如:r-x 二进制为101,十进制为4+0+1=5
改变文件权限
chmod (change file mode)改变文件模式
chmod 文件模式 文件名
只有属主和超级用户才可以改变文件的文件模式。
如:
chmod 644 file1
6 = 4 + 2 + 1
5 = 4 + 1 + 0
5 = 4 + 1 + 0
给属主读,写和执行权限,给组读,写权限,给其他人读,写权限。
为新文件指定权限
当创建新文件时,系统根据文件的类型为文件指定以下几种模式:
666:不可执行的普通文件
777:可执行的普通文件
777:目录
在这一初始模式上,在减去用户掩码值。
用户掩码是一种模式,由自己设置,表明希望限制的权限。用umask命令设置用户掩码。
如:umask 022
抑制组和其他人的写权限。之后创建的所有文件的默认权限都为初始值-用户掩码。若需更改,用chmod命令。
ps:
除非有很好的理由,否则应该将umask 077命令放入登录文件,从而实现文件的完全专有。如果希望共享文件,则可以对文件使用chomd命令。