Linux权限管理
一、基本权限
基本概述:不同用户有不同权限,在服务器上,每个用户都会定义合理的等级。一般只有一个管理员,其他都是普通用户。
二、文件基本权限
1.Linux文件权限的设定
图1 修改权限的方式- r w x
文件类型(-:普通文件 d:目录文件 l 软连接文件)
R:读 w:写 x:执行
修改权限命令:
Chmod 【选项】 模式 文件名
选项:-R 递归
模式:[ugoa][+ - =][rwx] //
[mode=421]
a:所有人
权限的数字表示:
R:4(2*2) w:2(2*1) x:1(2*0)
例: rwxr-xr-x :755
2.Linux文件权限的作用
文件权限作用3.linux中权限对目录的作用
权限对目录的作用对文件来讲:最高权限是x(执行)
对目录来讲:最高权限是w(写)
#whoami //查看当前用户
#uaseradd user1 //添加用户user1
#passwd user1 //更改user1用户的密码
#是超级用户登录时候的提示符;$是普通用户登录的提示符
4.linux中其他权限的作用
核心原则#chown 用户名 文件名 //修改文件所有者 如果需要一个普通用户对一个文件有7权限,可以使用此命令
#chgrp 用户组 文件名 //修改文件的所属组
Linux中,不管添加多少用户,都会默认添加一个与用户名称相同的组作为初始组
#chown root:root 123 //修改文件的用户组和用户 为root
例子:#groupadd user //添加一个user用户组
#gpasswd -a user1 user //把user1用户加入到user组
三、默认权限
1.文件的默认权限
1)文件的默认权限:Windows中,新建文件的权限是由上级所在目录继承过来的。
Linux中,是通过umask来定义文件的默认权限。
#umask //查看默认权限
此时回车之后控制台自己输出的0022 //第一位0:文件的特殊权限 022:文件的默认权限.
文件的默认权限:
①文件默认不能建立为执行文件,必须手工赋予执行权限
②所以文件的默认权限最大为666
③默认权限需要换算成字母再相减
④建立文件之后的默认权限,为666减去umask的值
例子:文件的默认最大权限666,umask的值是022
-Rw-rw-rw- 减去 - - - -w- -w 等于 -rw-r- -r- -
2.目录的默认权限
目录的默认权限:
①目录的默认权限最大是777
②默认权限需要换算成字母再相减
③建立文件之后的默认权限,为777减去 umask的值
永久修改profile文件例子:目录默认最大权限是777 umask值是022
-Rwxrwxrwx 减去 - - - - -w- - w - 等于 -rwxr-xr-x
修改umask的值
- umask 0002 //临时修改
Vi /etc/profile //永久修改
四、特殊权限
1.简介
简介:所有者和所属组有读写执行权限,其他人无权限。但是此时想要将一个人赋予权限r-w权限。不考虑这个用户是所有者还是所属组,直接把这个用户拿出来,赋予它acl的权限。
如何做:
图示第一步:查看分区acl权限是否开启
#dumpe2fs -h /dev/sda5 //dumpe2fs命令是查询指定分区详细文件系统信息的命令
选项:-h //仅显示超级块中信息,而不显示磁盘块组的详细信息
图示第二步:如果ACL权限没有打开,需要临时开启ACL权限
#mount -o remount,acl / //重新挂载根分区,并挂载加入acl权限
第三步:如果想要ACL权限永久生效,需要修改配置文件
#vi /etc/fstab
2.linux中acl权限查看与设定
例子 例子 图示#getfacl 文件名 //查看acl的权限
#setfacl 选项 文件名 //设定acl权限的命令
选项:-m:设定acl权限
-x:删除指定的acl的权限
-b:删除所有的acl的权限
-d:设定默认acl的权限
-k :删除默认的ACL的权限
-r:递归设定acl的权限
3.ACL最大权限与删除
1)最大有效权限mask
Mask是用来指定最大有效权限的。如果给用户赋予了acl权限,是需要和mask的权限“相与”才能得到用户的真正权限。
相与 图示 图示2)删除acl权限
#setfacl -x u:用户名 文件名 //删除指定用户的acl权限
#setfacl -x g:组名 文件名 //删除指定用户组的acl权限
#setfacl -b 文件名 //删除文件的所有的acl权限
4.默认的ACL权限和递归ACL权限
图示如果使用递归权限,就难以避免会出现权限溢出。因为执行权限,对目录和文件是不一样的,如果对目录赋予权限,对该目录下的文件赋予递归权限,该文件就会得到目录的权限。除非,对该目录下的文件一个一个赋予权限,就可以避免权限溢出。
图示图示 图示如果递归之后,又重新建立文件,此时新建的文件,没有递归的权限。但是可以使用默认权限。
此时再新建文件,就会有acl权限了。
默认权限也是只针对目录生效!!!!
五、Sudo权限
1.基本概述
root把本来只能超级用户执行的命令赋予普通用户执行, Sudo的操作对象是系统命令。
图示图示例子:授权普通用户重启电脑
#visudo
#su - user1 //普通用户登录
#sudo /sbin/shutdown //普通用户重启电脑
2.授权普通用户可以添加其他用户
图示用户如果不设定密码时,无法正常登录;所以要给它赋予设定密码的权限。
图示例子:给普通用户赋予vi权限,可以查看修改/etc/shadow文件
#visudo
添加# user1 ALL=/bin/vi
此时普通用户会有vi权限
普通用户登录之后
$ sudo /bin/vi /etc/shadow
六、特殊文件权限
注:特殊权限尽量少去修改。
1.SetUID功能:
①只有可以执行的二进制程序才能设定SUID权限
②命令执行者要对该程序拥有x(执行)权限
③命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中,灵魂附体为文件的属主)
④SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效。
当输入mask的时候,回车会出现 0022;第一位0就是特殊权限,后三位是文件的基本权限。
图示 图示2.取消SetUID的方法
#chmod 0755 文件名 //取消文件的权限,用0
#chmod u -s 文件名 //取消组文件的权限
注意:
①关键目录应严格控制写权限。比如“/”“/usr”等
②用户的密码设置要严格遵守密码三原则
③对系统中默认应该具有SetUID权限的文件作一列表,定时检查有没有这之外的文件被设置了SetUID权限。
Suid脚本:定时检查有没有文件被设置了suid权限。
例子1-1 例子1-23.linux中的setGID
SetGID针对文件的作用:
①只有可执行的二进制程序才能设置SGID权限
②命令执行者要对该程序拥有x(执行)权限
③]命令执行在执行程序的时候,组身份升级为该程序文件的属组
④SetGID权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效。
例子:
①/usr/bin/locate是可执行二进制程序,可以赋予SGID
②执行用户lamp对/usr/bin/locate命令拥有执行权限
③执行/usr/bin/locate命令时,组身份会升级为slocate组,而slocate组对/var/lib/mlocate/mlocate.db 数据库拥有r权限,所以普通用户可以使用locate命令 查询 mlocate.db数据库
④命令结束,lamp用户的组身份返回为lamp组
SetGID针对目录的作用:
①普通用户必须对此目录拥有r和x权限,才能进入此目录
②普通用户在此目录中的有效组会变成此目录的属组
③若普通用户对此目录拥有w权限时候,新建的文件的默认属组是这个目录的属组
设定 例子 取消4.SBIT权限
SBIT粘着位的作用
①粘着位目前只是针对目录有效
②普通用户对该目录拥有w和x权限,即普通用户可以在此目录拥有写入权限
③如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下的所有文件。
一旦赋予了粘着位,除了root可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件。
注意:不建议手工建立拥有粘着位的目录,因为它要求必须给其他用户赋予7最高权限。
例子设置粘着位:
#chmod 1755目录名
#chmod o+t目录名
取消粘着位:
#chmod 0777目录名
#chmod o-t目录名
七、不可改变位权限
例子chattr权限:
Chattr [+ - =] [选项] 文件或者目录名
+:增加权限
-:删除权限
=:等于某权限
[选项]:
i:等价于insert。如果对文件设置i属性,那么不允许对文件进行删除、改名,也不能添加和修改数据;如果对目录设置i属性,那么只能修改目录文件下的数据,但不允许建立和删除文件。
A:等价于append(追加)。如果对文件设置a属性,那么只能在文件中增加数据,但是不能删除也不能修改数据;如果对目录设置a属性,那么只允许在目录中建立和修改文件,但是不允许删除。
不仅对于文件如此;对目录也是如此(目录中的文件的内容可以修改)
例子 例子