理解权限:
合租房子模型:
自己租得房子(所有者权限),厨房(用户组权限),其他人不具有房子的使用权限(其他人权限),房东(root权限)
权限是相对于目录和文件来说的:
-rw-r–r– | 1 | root | root | 555 |A pr 20 18:25 | test.txt
权限 | 连接数 | 所有者 | 用户组 | 文件容量 | 修改日期 | 文件名
注:连接数是指硬连接数并不是软连接,硬连接是使用同一个i-node而软连接不会,如果是程序员这个很好理解硬连接就相当于对象引用计数,所有引用都不存在了,这个对象才会回收,而这里是文件才会丢失,而软连接是只知道对象的名字,并没有引用对象,因此文件丢失,软连接也会失效。
权限说明:
- | r,w,- | r,-,- | r,-,-
文件类型 | 所有者权限(u):读,写,执行 | 用户组权限(g):读,写,执行 | 其他用户(o):读,写,执行
文件类型:
d | - | l | b | c |
目录|文件|连接文件|存储设备|一次性读取设备(鼠标)
权限数字表示:
r | w | x
4 | 2 | 1
注:由左到右,从大到小
对于目录来说,x代表能够进入这个目录
写权限不仅是字面意思:还包括新建文件和目录,删除文件和目录,重命名,转移目录中得文件和目录
默认权限:
在新建文件或者目录时默认的权限
umask -S
umask 是减权限的,如umask 022
0代表用户不减权限,用户组和其他用户减掉了写权限
默认文件新建时不会加上执行权限,而目录会加上
因此 022 代表
文件(-rw-rw-rw-) - (—–w–w-) => (-rw-r–r–)
目录(drwxrwxrwx) - (d—-w–w-) => (drwxr-xr-x)
细化权限(EXT2,EXT3):
更细致的权限:只能增加数据不能修改,不能被删除等等
chattr +i|-i 不能被删除,改名,设置连接,无法写入数据
+a | -a 只能添加数据,不能删除也不能修改
lsattr [-adR] 列出隐藏属性
特殊权限:
suid,sgid,sbit
4,2,1
suid执行时获得程序所有者权限
sgid执行时获得程序的所属组权限
sbit创建文件时只有自己和root才能删除
大s代表空的权限
而小s才是实际权限的
单独设置权限ACL
如果想单独给某个用户设置权限,可以用上acl
挂载时启动acl
mount -o remount,acl /dev/sda1
设置acl权限
setfacl [-bkRd] [{-m|-x} acl参数] 文件名
-m :设置后续的acl参数
-x :删除后续的acl参数
-b :删除所有的ACL设定参数
-R :递归设置acl参数
-d :设置预设的acl参数(只对目录有效,在该目录新建的文件也会使用此ACL默认值)
-k :删除预设的ACL参数
user :ACL_USER_OBJ和ACL_USER
group :ACL_GROUP_OBJ和ACL_GROUP
mask :ACL_MASK
other :ACL_OTHER
查看acl权限getfacl
getfacl test.txt
注:mask是限制最大权限用的
如:设置了test.sh的最大权限为r,超过r的权限将会是无效的
setfacl -m mask::r test.
getfacl -c test.sh
user::rwx
user:zyq:rwx #effective:r–
group::rw- #effective:r–
mask::r–
other::r–
查看权限
列出文件和目录权限
ls -al
查看是否开启acl
df –>获得文件系统如:/dev/sda1
dumpe2fs /dev/sda1 |grep acl
修改权限:
改变文件所有者:chown
chown [-R] 用户名:组名 文件或者目录
[root 权限]chown -R tester:tester /tmp/test/
注:需要有足够的权限使用这个命令,如果是远程挂载的目录,是不能在本地改所有者的
-R代表递归修改,比如一个目录下所有文件和目录都修改,就加上这个
改变文件用户组: chgrp
chgrp [-R] 用户组 文件或者目录
chgrp tester /tmp/test.txt
直接改变用户权限:chmod
数字方式:
chmod [-R] XYZ 文件或者目录
chmod 777 /tmp/test.txt
字母方式:
chmod [-R] u|g|o|a +|-|= r|w|x 文件或目录
chmod u=rwx,go=rx /tmp/test.sh 所属用户有所有权限,而用户组和其他用户只有读和执行的权限
chmod a+x /tmp/test.sh 所有用户都有执行权限
chmod a-x /tmp/test.sh 去掉所有用户的执行的权限