1、基本权限和归属
用户在访问一个文件或目录时,由文件或者目录设置的访问权限和归属关系来决定最终权限
1>访问权限
文件的访问权限:
r--->读 w--->写 x--->执行
目录的访问权限:
r--->可以查看该目录的内容:ls
w--->可以创建、删除、移动文件或者子目录:mkdir/mv/cp/rm/touch/vim
x--->可以进入到该目录中:cd
2>归属关系
u 所有者:拥有此文件/目录的用户
g 所属组:拥有此文件/目录的组
o 其他人:除所有者和所属组以外的用户
a 所有用户:以上三者归属的名称
3>ls -l 输出结果分析
dr-xr-xr-x. 2 root root 4096 Aug 27 09:38 bin
权限位(类型+属主+属组+其他人) 硬链接个数 所有者 所属组 大小 最后修改时间 文件/目录名
2、权限的数值表示
r--->4 w--->2 x--->1
常见的目录权限:rwxr_xr_x--->755
常见的文件权限:rw_r__r__--->644
3、设置访问权限-chmod
格式1:chmod [-R] [ugoa] [+-=] [rwx] 文件或者目录
-R递归修改目录权限
对文件或者目录的归属关系中的权限进行添加(+)、减少(-)和设置(=)权限
格式2:chmod [-R] [权限的数值表示值] 文件或者目录
4、改变文件或者目录的归属关系-chown
chown [所有者] 文件或目录 只改变文件或者目录的所有者
chown :[所属组] 文件或目录 只改变文件或者目录的所属组
chown [所有者]:[所属组]文件或者目录 改变文件或者目录的所有者和所属组
-R 递归修改文件或者目录的归属关系
5、默认权限
1>创建目录时赋予权限:mkdir -r [权限的数字表示] 目录
2>权限掩码
查看权限掩码:umask
查看权限值(默认):umask -S
目录最大权限是777,文本的最大权限是666(均无可执行权限)
配置文件:/etc/login.defs
权限的判断顺序:所有者>所属组>其他人
6、特殊权限
1>SUID,SGID
SUID用来传递用户的身份,只对二进制文件的x位有效。当一个文件的所有者拥有x权限,则设置完SUID后,可执行权限位变为s,若该文件的所有者先前没有x权限,则则设置完SetUID后,可执行权限位变为S,标识SetUID设置未起效。拥有SUID的文件当其他用户使用执行时该用户拥有了所有者的权限。
SGID主要作用于目录,当一个目录被赋予SGID权限后,若其他人对这个目录拥有rwx权限,则其他人在这个目录下所创建的所有文件和目录的所属组都是这个目录的所属组,即继承了该目录的所属组。
“举个栗子”
passwd命令是向/etc/passwd 文件写入用户信息,而该文件只有root用户才有写权限。因此当其他用户修改密码使用passwd命令时,该用户拥有了root权限,则可以向/etc/passwd文件写入用户信息的。
2>Sticky Bit (粘滞位)
Sticky Bit用来限制目录的写入权限,禁止操作非本人的文档。改变的是目录的其他人中的x位
“举个栗子”
/tmp目录作为系统的共享目录,所有用户都对其有rwx权限。用户tom在该目录下创建了一个文件并写入了非常重要的信息。而jerry也可看到这个文件,但是如果jerry可以删除或者改动这个文件,则对tom来说是不公平的。所以/tmp拥有了Sticky Bit使得jerry无法去修改tom所创建的所有文件或者目录。
3>设置特殊权限
特殊权限 | 符号 | 数字表示 | 影响的权限 | 影响的对象 |
SUID | s | 4 | user的x位 | 可执行程序 |
SGID | s | 2 | group的x位 | 可执行程序/目录 |
Sticky Bit | t | 1 | other的x位 | 目录 |
添加SUID:chmod 4755 文件
添加SGID:chmod 2755 文件/目录
添加Sticky Bit:chmod 1755 目录
7、ACL权限
ACL即Access Control List,ACL可以设置特定的用户或者用户组对文件/目录拥有rwx的操作权限。ACL权限需要内核和文件系统的支持,现在2.6内核配合EXT2/EXT3, JFS, XFS, ReiserFS等文件系统都是可以支持ACL的。
1>查看文件系统是否支持ACL权限
[root@localhost ~]# dumpe2fs /dev/sda1 | grep acl
dumpe2fs 1.41.12 (17-May-2010)
Default mount options: user_xattr acl //支持ACL权限
2>查看文件/目录的ACL策略
getfacl 文件或者目录
3>设置ACL策略工具:setfacl
设置ACL策略:
setfacl -m u/g:用户名/组名:权限 文件或者目录
-R 可以递归修改目标文件夹及其下属所有文件的ACL权限
设置可继承的ACL权限(只对新建的子文档有效)
setfacl -d -m u/g:用户名/组名:权限 目录
清除所有ACL策略
setfacl -b 文件或目录
清楚指定用户的ACL策略
setfacl -x u/g:用户名/组名 文件或者目录
8、关于目录权限的继承
1>强制继承:
chmod -R ... /partent/
chown -R ... /partent/
2>自动继承
方法1:调整umask值,适用于当前用户的整个shell环境
方法2:针对文件的归属关系设置SUID和SGID
方法3:setfacl -d -m...
9、练习
1>创建文件夹/data/test,设置目录的访问权限使所有者和所属组具备读写执行的权限;其他人无任何权限。
mkdir -pm 770 /data/test
2>递归修改文件夹/data/test的归属使所有者为zhangsan,所属组为lisi。
chown zhangsan:lisi /data/test
3>请实现在test目录下,新建的所有子文件或目录的所属组都会是lisi。
chmod g+s /data/test
4>为lisi创建ACL访问权限,是lisi可以查看/etc/shadow文件。
setfacl -m u:lisi:r /etc/shadow