文件权限和所有权是UNIX/Linux的一个著名特性,本次我们考察了文件权限和所有权
Linux系统中每一个文件都和多种权限类型相关联,我们通常和三类权限打交道
用户 用户组,其他实体
用户 是文件的所有者 ,用户组是多个用户的结合 系统可以让这些用户对文件以某种形式的访问,其他用户就是非用户组之外的任何用户
使用命令 ls -l 或者 ll都可以列出文件的权限
权限的第一个字母的对应关系
“-” 普通文件
“d” – 目录
“c” – 字符设备
“b” – 块设备
“l” – 符合连接
“s” – 套接字
“p” – 管道
在这之后的部分可以划分为三组,每组3个字符,第一组的3个字符 — 对应的用户权限,然后第二组对应的用户组权限,第三组对应着其他用户权限
着9个权限,每一个字符指明了某种权限是否存在,如果没有这组权限,就显示个 “-”
用户的权限序列
rwx
第一个说明了是否可以进行读操作,如果设置了,会出现一个r字符,第二个设置了是否具有写的操作权限,第三个表示是否具有执行的权限,
用户还有一个相较于其他的特殊权限位,setuid(S)特殊权限,出现在x的位置,如果设置了,那么这个可执行文件是可以由其他用户运行的
具有setuid的权限的文件的权限序列如下
-rwS—–
目录也是具有这些权限的
目录的读权限 r 允许读取目录中文件和子目录的列表
目录的写权限 w 允许在目录中创建或者删除文件或者目录
目录的执行权限 x 表示是否可以访问目录中的文件和子目录
用户组
权限序列 —rwx—
第二组字符指定了组权限
组权限的设置和用户权限的设置一样,但是有一个setgid的位置,可以以同目录拥有者所在用户组同组的权限相同的用户来执行文件,这个相同组,并不一定时拥有者所在的组,而是权限组相同即可
—-rwS—
其他用户权限
权限序列 ——-rwx
最后三个字符是其他用户的权限,和用户以及用户组一样,其他用户也有读写执行权限,但是没有S权限
目录有一个特殊的权限,叫做粘滞位,有一个目录中设置了粘滞位,那么这个目录只有创建这个目录的用户才能进行删除这个目录中的文件,
这个粘滞位出现在x这个位置,使用t-T来表示,如果没有设置执行权限,但是设置了粘滞位,那么使用t,如果设置执行权限和粘滞位,那么使用T
例如
——rwt,——rwT
/tmp就是设置了粘滞位
这是一种写保护机制
ls -l的每一行输出
有两个字符串
第一个表示所属用户
第二个表示用户组的持有者
设置文件权限,可以使用chmod命令
简单的设置方式,也是最为繁琐的味
chmod u=rwx g=rw o=r filename
u是用户权限
g是用户组权限
o是其他实体权限
如果需要给文件添加权限,可以使用 +号,使用-删除权限
给用户添加权限可以使用
chmod u+x filename
给所有权限类别增加可执行权限
chmod a+x filename
删除权限则是
chmod a-x filename
而且由于
各个权限都有唯一对应的八进制的一个数
r=4
w=2
x=1
那么 rwx就是 4+2+1 7
所以各个位置上的权限可以设置为
chmod 764 filename
还有一些设置所有权的命令
比如使用chown命令
chown user.group filename
chwon user1 user2 test.sh
从而修改了文件的用户组或者用户名
设置粘滞位
粘滞位是一种权限类型,可以使得只有目录的所有者才能删除目录中的文件,即时用户组合其他的用户拥有足够的权限也不能执行删除操作
要设置粘滞位,首先利用chmod a+t 设置一下
递归的方式设置权限
可以使用
chmod 777 . -R
.是当前目录,这就使得当前目录下的次级目录和文件也受到了权限更改
包括设置所有权
也可以后面加上-R\
以不同的用户运行可执行文件
以其他用户的身份来运行这个可执行文件
因为有一个setuid的特殊文件权限,可以在运行这文件的时候,无论谁运行,都直接作为文件所有者的身份
chmod root .root executable_file
chmod +s executable_file
./executable_file
这样就每次都以超级用户的身份来执行了
setuid的使用不是无限制的,只能用于ELF二进制文件上