一、Linux系统基础权限
1、权限位的含义
使用“ls -l”命令时,会用长格式显示文件目录的信息,其中第一列即为权限信息,
一般会包含10个位置,如下显示:
权限列的详细说明如下:
a、第1位:代表文件类型,一些常用的文件类型如下:
b、第2-第4位:表示所有者的权限。即拥有读、写、执行权限。
r:代表read,即读取权限;w:write,即写入权限;x:execute,即执行权限;
-:当所在字元位置为“-”时,代表该字元位没有权限。
c、第5-第7位:表示所属组的权限。即加入此群组的账户的权限。
d、第8-第10位:表示其他人的权限。即非本人且没有加入本群组的其他账户的权限。
说明:rwx权限所在的位置是不会改变的,有该权限则相应位置显示字母,
没有该权限,就变成减号(-)。
2、基本权限的作用
读、写、执行权限对文件和目录的作用是不同的。
A、权限对文件的作用(是针对文件的内容而言)
B、权限对目录的作用
目录主要的内容是记录目录下的文件名、子目录名。
扩展:
一般目录的常用权限:
·0(---):任何权限都不赋予。如:给其他人赋0权限。
·5(r-x):基本的目录浏览和进入目录权限,如:给所属组赋5权限
·7(rwx):完全权限,即查看目录、进入目录、目录下创建删除文件和子目录。如:文件的所有者的权限。
3、权限的预设值:umask
Linux系统中,新建一个文件或目录时设置的默认权限与umask相关。
即新建文件或目录的默认权限是通过linux系统给予文件或目录的最大权限和系统设置的umask值进行AND或者NOT运算得到的。
a、linux系统中,对于文件而言,最大权限为666(即rw-rw-rw-);对于目录而言,最大权限为777(即rwxwrwxrwx)
b、普通用户的umask值默认为002(即-------w-);超级用户(如root)的umask值为022(即----w--w-)
c、新建文件、目录时,系统设置的默认权限:最大权限去除掉umask中的权限后,保留下来的权限即为文件或目录的默认权限。
d、修改umask值
·临时修改:在命令行中输入: umask mode;如;umask 033
·永久性修改:修改系统环境配置文件(/etc/profile)中的umask设置
二、文件与目录的隐藏权限
1、隐藏属性
linux系统中文件除了普通rwx权限外,还有一种隐藏权限,如下:
其中,每个位置代表一种隐藏属性,若含有该属性则显示相应字符,如i属性,
若没有该隐藏属性则显示“-”(减号)。
2、常用隐藏属性介绍
3、设置文件的隐藏属性:chattr命令
chattr命令用于设置文件的隐藏属性,格式如下:
4、显示文件的隐藏属性:lsattr命
三、ACL权限
ACL(Access Control List)为访问控制列表。ACL可以设置特定用户或用户组对于一个文件或文件夹的操作权限。
即ACL用于设定某个用户针对文件的权限。
权限的优先级顺序:所有者-->ACL自定义用户-->ACL自定义组-->其他人
1、查看ACL权限是否开启
Linux中ACL权限针对的是分区,故给文件设置ACL权限时,首先要查看文件所在的分区是否开启ACL权限。
一般系统(Ext4、xfs)默认开启ACL权限。
方法一:
步骤一:查看要设置ACL权限的文件所在区分(以根分区为例):df -h
步骤二:查看指定分区是否开启ACL权限:(dumpe2fs命令查看的是Ext4文件系统,xfs无效)
dumpe2fs -h /dev/sda5 | grep ‘Default mount options’
方法二:
2、开启分区的ACL权限
以根分区(/)为例,开启分区的ACL权限:
A、临时开启ACL权限:(注:若系统重启,那根分区权限会恢复到原来状态)
重新挂载根分区,并在挂载时加入ACL权限
B、永久开启分区ACL权限:
修改配置文件“/etc/fstab”,在分区的“defaults”后加入“,acl”值,再重新挂载
步骤一:(编辑配置文件)
步骤二:(重新挂载或者重启系统)
3、查看ACL权限:getfacl命令
4、设置ACL权限:setfacl命令
A、默认ACL权限:(default)
指的是针对父目录而言,新建的文件和子目录会继承父目录的ACL权限。
命令格式:setfacl -m d:u:用户名:权限 -R 文件名
注意:默认权限,只能赋予目录,即命令中的文件名为目录的名称
B、递归ACL权限:
指的是针对父目录中已存在的所有子文件和子目录继承父目录的ACL权限。
命令格式:setfacl -m u:用户名:权限 -R 文件名
C、最大有效权限:mask
·给用户或用户组设定的ACL权限并不是真正的设定权限,而是通过
设定的ACL权限与mask权限进行“与”运算后,获得用户的真正权限。
系统默认的mask权限是rwx(一般不需要更改),此时,任何权限与
mask权限进行与运算,结果仍是权限本身。
·mask是用来指定最大有效权限。可以理解为:用户和用户组所设定的权限
必须在mask权限设定的范围内才能生效。
·注意:一般不会去修改系统默认的mask权限,但是能够修改,命令格式如下:
setfacl -m m:权限 文件名
D、删除ACL权限:
·删除指定的ACL权限:
命令格式:setfacl -x u:用户名 文件名 # 删除指定用户的ACL权限
setfacl -x g:组名 文件名 # 删除指定组的ACL权限
·删除所有的ACL权限:
命令格式:setfacl -b 文件名
四、特殊权限:SUID、SGID、SBIT
特殊权限是用来设定系统中特定指令的,一般用户不建议设定特殊权限,因会有安全隐患的
1、Set UID:SUID权限
SUID权限:在文件(可执行的二进制文件)的所有者属性的x权限位上标志为s时,表示该文件具有SUID权限。
SUID权限的作用是:
拥有可执行文件的执行权限的普通用户,在运行该执行文件的过程时,
暂时获得该执行文件的所有者的权限,执行结束后,释放权限。
SUID权限是在执行的过程中生效。
总结SUID的限制与功能,如下:
·SUID权限仅对二进制程序(binary program)有效
·执行者对该程序需要具有x的可执行权限
·SUID权限仅在执行该程序的过程中有效(run-time)
·执行过程中执行者将具有该程序拥有者(owner)的权限
警告:SUID仅可用在可执行程序(binary program)上,不建议用在shell script上;
不能用在目录上。
举例说明:
普通用户能够使用passwd命令修改密码:passwd指令设置了SUID权限
说明:在指令上中添加SUID权限,即该指令就具有root身份。
这对系统而言非常危险,所以,只用系统默认设置的SUID即可,切记勿手动添加。
设置SUID权限的方法:(基本权限的数字表示法前加的4代表SUID权限)
方法一:chmod u+s 文件名 (权限的字符模式,在user处添加s)
方法二:chmod 4755 文件名 (权限的数字模式,在基本权限的数字前加4)
注意:当文件SUID的标志s不是小写而是大写S时,说明无执行权限x,即为空,无效。
取消SUID权限的方法:chmod u-s 文件名
2、Set GID:SGID权限
SGID权限:在文件的所属组的x权限位上标志位s值时,表示该文件具有SGID权限。
SGID权限可以作用于可执行的二进制文件,也可以作用于目录。
A、SGID对于“文件”的含义:(类似于SUID的作用)
·只有可执行的二进制程序才能设置SGID权限
·执行者对该程序(设置了SGID权限)需要具有x的可执行权限
·在执行该程序的时候,执行者的所属组会临时变成该程序文件的所属组
·SGID权限只在该程序执行过程中有效,即所属组身份的改变只在执行过程有效
例说明:普通用户执行locate命令(locate命令设置了SGID权限)
B、SGID对于“目录”的含义:(常用的用途)
·普通用户必须对该目录(有SGID权限的目录)具有r与x权限,才能进入该目录
·普通用户在此目录下的有效群组将会变成该目录的群组
·用途:若使用者拥有该目录的w权限(写),则使用者在该目录下新建文件后,
新建文件的所属组与该目录的所属组相同。
(即拥有SGID权限的目录下,新建的文件的所属组与该目录的所属组是一样的。)
C、设置SGID权限的方法:(基本权限的数字表示法前加的2代表SGID权限)
方法一:chmod g+s 目录名(权限的字符模式,在group处添加s)
方法二:chmod 2755 目录名(权限的数字模式,在基本权限的数字前加2)
注意:当文件SGID的标志s不是小写而是大写S时,说明无执行权限x,即为空,无效。
D、取消SGID权限的方法:chmod g-s 目录名
3、Sticky Bit:SBIT权限
SBIT权限:即粘着位,在目录的其他人的x权限位上标志成t值,则该目录具有SBIT权限。
SBIT权限只针对目录有效。
SBIT权限对于“目录”的含义:
·使用者对于该目录(有SBIT权限的目录)具有w、x权限,即具有写、入权限,
·使用者在该目录下建立文件或子目录时,只有自己或root能够删除文件或子目录。
通俗的理解是:具有SBIT权限的目录下,只能够对自己建立的文件进行删除、更名、移动
等操作,而无法删除他人建立的文件。如系统中的“/tmp/”目录:
设置SBIT权限的方法:(基本权限的数字表示法前加的1代表SBIT权限)
方法一:chmod -R o+t 目录名(权限的字符模式,在other处添加t)
方法二:chmod -R 1755 目录名 (权限的数字模式,在基本权限的数字前加1)
取消SBIT权限的方法:chmod -R o-t 目录名
五、sudo授权
sudo是linux中的一种权限管理机制,管理员可以授权普通用户去执行一些root的操作。
1、sudo授权的一般原则
(1) 赋予的权限越详细,普通用户得到的权限越小,越安全
(2) 赋予的权限越简单,普通用户得到的权限越大,不安全
2、sudo执行过程:
(1)、普通用户运行sudo时,会检查“/var/db/sudo/”目录下是否有时间戳文件
(sudo执行成功后创建的,默认免密5分钟),并检查是否已经过期;
(2)、若过期,就需要输入当前用户的密码,再检查 “/etc/sudoers”文件,验证用户是
否有运行sudo的权限:若有权限,则执行命令并返回结果,然后退出;若没有权限,则直接退出;
(3)、若没有过期,则不需要输入密码,直接检查“/etc/sudoers”文件,验证用户的sudo权限,并执行命令。
3、与sudo相关的文件:
(1) 配置普通用户权限的文件:/etc/sudoers
(2) sudo的日志相关文件:/var/log/secure /var/log/auth.log
(3) sudo执行时产生的时间戳文件保存的位置:/var/db/sudo/目录
4、sudo设置权限文件的字段信息说明:
·sudo配置普通用户的权限,实际上都是配置“/etc/sudoers”文件来完成的
·“/etc/sudoers”文件内中相关字段信息说明,如下:
·“/etc/sudoers”文件中其他字段的信息,即“别名”类型如下:
User_Alias:用户别名,别名的成员可以是普通用户、群组(加%号)
Host_Alias:主机别名,即被管理的主机地址
Runas_Alias:runas别名,即sudo允许转换至的用户,可使用的身份别名
Cmnd_Alias:命令别名,即能够执行的命令别名
5、sudo授权设置
用 “visudo”命令编辑 /etc/sudoers文件。visudo实质上是使用vi编辑器打开/etc/sudoers文件进行编辑,
保存退出后,会检查编辑后的语法是否出错,比直接使用vi编辑更安全。
6、sudo设置权限举例:
(1) 为普通用户授予root访问权限
方法一:开启sudoers文件中的wheel群组,并将普通用户test加到wheel群组中
A、开启sudoers文件中的wheel群组:将“%wheel”群组的注释去掉
B、添加普通用户test到wheel群组中:
说明:将普通用户添加到wheel附加群组中的方式,可以使用命令
“usermod -aG wheel 用户名”,或者手动vi编辑“/etc/group”文件
方法二:visudo编辑sudoers文件,为普通用户设置权限
(2) 普通用户被赋予更改密码权限,取消对root的密码修改:visudo
说明:其中的“!”号表示禁止使用该命令。
7、查询系统中已设置的sudo权限: