Linux基础之权限管理
一、基本权限:
1、基本用户与基本权限
(1)基本用户
- U:owner为属主
- G:group为属组
- O:other为其他用户
(2)基本权限
- r:read读权限,数字设定4
- w:write写权限,数字设定2
- x:execute执行权限,数字设定1
2、基本权限操作
(1)修改文件权限:chmod
描述:修改文件或目录权限
用法:
- chmod [{ugoa}{±=}][文件或目录]
- chmod[421][文件或目录]
- -R 递归修改
- 可以连写,中间用逗号隔开
举个栗子:
1.初始状态:
2.修改权限方法1:
3.修改权限方法2:将修改的权限改回原来的权限
因为rwx分别有代表数字4,2,1;所以也可以通过设置数字代表具体权限。rwx = 4+2+1=7,rw=4+2=6,rx=4+1=5, r=4,wx=3,w=2,x=1;
4.将a目录下所有文件权限统一改成和a目录一样的。
初始状态:
递归修改:
注意:只有root用户及文件所有者才能修改权限,如果当前目录允许普通用户进行操作(rwx或者wx),无论当前目录下文件是否允许操作,都可以被其他用户操作。
(2)修改文件所有者:chown
用法:
- chown [文件主.文件组] [文件或者目录] 可以同时修改文件主和文件组
- chown[文件主:文件组] [文件或者目录] 可以同时修改文件主和文件组
- chown[文件主] [文件或者目录] 修改文件主
举个栗子:
(3)修改文件所属组:chgrp
用法:
chgrp [用户组] [文件|目录]
(4)设置创建文件默认权限:umask
功能描述:显示、设置文件的缺省权限
备注:
- umask :以反码形式显示文件权限
- umask -S :显示文件权限
- umsk [反码数字]:设置默认权限。
- 文件默认为0022;目录文件:rwxr-xr-x,普通文件:rw-r–r–(因为系统默认不让其他用户进行操作所以所有用户都不让执行文件)
举个栗子:
将默认目录权限设置为rw-r–r–
二、ACL权限
因为linux中基本权限只有三个,ACL 权限是为了解决身份权限不足的情况,可以针对单一文件进行单一用户的权限设置。
1、getflac [文件|目录] :查看该文件的ACL权限
2、setfacl [选项] [文件名|目录] : ACL权限管理
选项说明:
- -m :设定ACL权限:setfacl -m u:[用户名]:[权限] [文件名]
- -R :递归设定目录内的所有文件:serfacl -m u:[用户名]:[权限] -R [文件名]
- -x:删除指定用户的ACL权限:setfacl -x u:[用户名][文件名]
- -g:删除指定用户组所有的ACL权限:setfacl -g:[组名][文件名]
- -b:删除文件的所有ACL权限:setfacl -b[文件名]
- -d:设定继承的ACL权限(给父目录加上继承后,创建的新文件会继承该权限):serfacl -m du:[用户名]:[权限] -R [文件名]
- -k:删除继承的权限
举个栗子:
创建文件,创建用户,创建组,将用户加入组,将文件组改为创建组,创建用户,设置acl权限即可。
检验:
3、组设定ACL权限:
命令:setfacl - m g:[组名]:权限 [文件|目录]
4、高级特性:最大有效权限mask
mask的作用是指定最大权限,mask值与acl权限相与的到的才是acl用户的真正ACL权限。
命令:setfacl -m m:权限 [文件]或者 setfacl -m mask::权限 [文件]
举个栗子:
5、删除ACL权限
命令:
- 删除指定用户的ACL权限:setfacl -x u:[用户名][文件名]
- 删除指定用户组的ACL权限:setfacl -x g:[组名]【文件名】
- 删除文的所有ACL权限:setfacl -b [文件名]
6、递归ACL权限
父目录在设定ACL权限时,所有的子目录和子文件也会拥有相同的ACL权限
命令:setfacl -m u:[用户名]:权限 - R [目录名]
7、继承ACL权限
如果父目录设定了继承的ACL权限。那么父目录中所有新建的子文件都会继承父目录的ACL权限。
命令:setfacl -m d:u:[用户名]:[权限][目录名]
三、高级权限
1、SUID权限
使用背景:
- 只有可以执行的程序才能设定SUID权限
- 命令执行者需要对程序拥有x权限
- 命令执行者在执行程序时获得该程序文件属主的身份
- SUID只在该程序执行过程中有效,即身份改变只在程序执行过程中有效。
命令:
- SUID设置:chmod 4755 [文件名] #4代表SUID,755还是基础权限随意设定
- SUID设置:chmod u+ s [文件名]
- SUID权限取消:chmod 755 [文件名]
- SUID权限取消:chmod u-s[文件名]
举个栗子:
从下图中可以看到passwd权限中,有一个s权限,这就代表着suid权限,passwd其实就是修改/etc/shadow配置文件中的内容,通过ll命令可以看到shadow权限都是-,普通用户时不允许查看修改该文件的,但是普通用户是可以修改自己密码的,这就是因为passwd中通过使用SUID 权限使用的root身份修改的/etc/shadow里面内容。
2、SGID权限
作用:继承属组(继承父级的所有组)
命令:
- chmod 2755 [目录] #2代表SGID,755还是基础权限随意设定
- chmod g+s [目录]
- SGID取消:chmod g-s [目录]
注意:设定了SGID权限后,目录下新建的文件属组才会继承父级的属组,在设置SGID前建立的文件不会继承,删除了SGID后,原本继承的属组也不会消失。
3、Sticky
说明:
- 只针对目录生效
- 如果加了该权限,普通用户需要对该目录具有w和x权限,即普通用户可以在此目录内写入文件;
- 如果没有该权限,普通用户只要拥有w和x,就能随意删除目录下的所有文件,包括其他用户的文件;
- 赋予某个目录的Sticky权限后,普通用户只允许删除所有者为自己的文件,root用户还是可以随意删除。
命令:
- chmod 1755 [目录] #1代表Sticky
- chmod o+t [目录]
- Sticky取消 chmod o-t [目录]
举个栗子:tmp文件就是拥有Sticky权限的(基础权限后的t表示拥有该权限)
现在tmp文件是给所有用户所有权限的,test文件也是,但是其他用户还是没法删除。此时只能删除该用户自己的文件,不是自己的文件不能删除。
4、文件属性chattr
补充 lsattr:查看文件隐藏属性。
- lsattr -a :显示所有文件和目录的隐藏属性
- lsattr -d:若是目录,仅列出目录本身的属性,不包括子文件的隐藏属性
修改文件隐藏属性
命令:chattr [±=] 选项 文件或目录名
选项:
- i:设置文件i隐藏属性,不允许对文件进行删除、改名、添加及修改数据;设置目录i属性,不允许在目录中创建及删除文件
- a:设置文件a隐藏属性,只能在文件中增加数据,不能删除及修改数据;设置目录a属性,只允许在目录中建立文件,而不能删除文件。