在对Linux系统的管理和操作过程中,会因用户身份的不同,一些操作和命令无法执行。root(超级用户),具有操作系统的一切权限,不受任何限制,而普通用户只具有有限的权限。因此我们需要学习Linux权限的设定,来维护系统的安全或是达到某种操作目的。
目录
1、查看及读取权限信息
- 文件属性的查看
ls -l filename - 目录属性的查看
ls -ld directory
- 对于属性各字段的理解
字段 | 文件属性字段的理解 | 目录属性字段的理解 |
---|---|---|
1 | 类型 | 类型 |
2 | 文件权限 | 目录权限 |
3 | SELinux Context | SELinux Context |
4 | 文件硬链接个数 | 目录中子目录的个数 |
5 | 文件拥有者 | 文件拥有者 |
6 | 文件拥有组 | 文件拥有组 |
7 | 文件大小 | 目录中自文件或子目录元数据大小 |
8 | 文件最后一次被修改的时间 | 目录中的内容最后一次被修改的时间 |
9 | 文件名称 | 目录名称 |
2、文件的拥有者及拥有组
Linux 是个多用户多任务的系统 , 常常会有多人同时使用同一主机来进行工作 , 为了考虑每个人的隐私权以及每个人喜好的工作环境 , 对用户进行分类。
2.1、用户对于文件的身份划分:
- 文件拥有者(user)
- 文件所属组(group)
- 其他人(other)
2.2、更改文件拥有者及拥有组的方法
文件拥有者及拥有组只有超级用户root可以修改
更改方式:
- chown 用户名 文件 ###更改文件的拥有者
- chgrp 组名称 文件 ###更改文件的拥有组
- chown –R 用户名 目录 ###更改目录的拥有者
- chgrp –R 组名称 目录 ###更改目录的拥有组
- chown 用户名 : 组名 文件 | 目录 ###同时更改文件或目录的拥有者和拥有组
示例:
我们在做这个实验之前,可以先在要实验的环境下建立一个监控,对文件的属性实时监控,便于观察实验结果。
watch -n 1 ls -Rl /mnt 查看mnt目录下所有文件的属性,每秒执行一次
1.用root身份在mnt目录下创建文件及目录,可以看到新建的文件拥有者及拥有组都为root.
2.修改rootfile1和目录test的拥有者为student
3.修改rootfile2和目录test的拥有组为student
注意:在对目录进行更改时,若不加-R参数,则只是对目录本身做更改,而目录中的文件不做变化!
4.把rootfile1的拥有者改为student,拥有组改为linux
3.文件权限读取
3.1 、权限的划分:
u :文件拥有者对文件的权限
g 文件拥有组对文件的权限
o:其他人对于文件的权限
3.2、权限类型
字符 | 含义 | 权限解释 |
---|---|---|
【-】 | 权限关闭 | 此为权限未开启 |
【r】 | readable查看权限 | 对于文件:可查看文件中的内容 ; 对于目录:可列出目录中的文件名称 |
【w】 | writeable可写权限 | 对于文件:可更改文件记录的内容;对于目录:可更改目录中文件数据 |
【x】 | excutable执行权权限 | 对于文件:可用文件名称调用文件内记录的程序; 对于目录:可进入目录 |
4.权限设定的方式
①: 字符方式设定权限
chmod <u|g|o|a><+|-|=><r|w|x> 文件|目录 (a表示所有用户)
chmod o+r linux #对其他用户开启读取linux文件的权限
chmod u+x,g-r linux #对于linux文件,拥有者开启执行功能,拥有组关闭查看权限
chmod go=rw linux #开启拥有组和其他用户对linux文件的查看和可写权限
②:数字的方式管理权限
chmod <数字> 文件|目录
chmod 777 linux2 #所有用户对linux2文件满权限
权限用一个八进制数字来表示
权限 | 二进制 | 八进制 |
---|---|---|
- - - | 000 | 0 |
- - x | 001 | 1 |
- w - | 010 | 2 |
- wx | 011 | 3 |
r - - | 100 | 4 |
r - x | 101 | 5 |
rw - | 110 | 6 |
rwx | 111 | 7 |
③:依照模板复制文件
chmod --reference=属性源文件 目标
chmod --reference=file1 file2 #把file1文件的属性复制给file2
示例:
同样,我们在做实验之前先开启一个对mnt目录下文件属性查看的监控,便于观察实验结果。
1.对于rootfile2文件,给拥有者开启执行权限,关闭组拥有者的查看权限
2.对于rootfile1文件,让拥有者和拥有组都有查看和可写权限
3.对于test目录,修改其权限为rwx — ---
注意:在对目录作更改时,若不加-R参数,则目录中的文件属性不变
我们可以看到用-R参数后,test目录及目录中的文件属性一同被更改
4.把rootfile1的权限复制给roorfile2
复制文件时,也可以用-p参数将源文件属性一同复制给目的文件
5.系统预留权限阀值
5.1、对于权限预留阀值的理解
- 资源存在意义在于共享,权限开放越大,
共享效果越明显,但是安全性越差 - 对于系统安全而言,开放权利越小,系
统越安全 - 在系统中开放应开放的权利,保留不安
全的权利以确保系统功能性及安全性
5.2、权限预留阀值设定
- umask的含义:
系统中使用umask来预留权限,满权限为777,若umask=022,则文件的权限值为:
777-022=755 - umask的查看:
在shell中查看当前用户的权限预留阈值 - umask的设定:
①:临时设定:在shell中直接给umask赋值,只对当前shell有效,打开新的shell,umask值不变
②:永久改变权限阀值
1.在配置文件中修改umask值(shell配置文件/etc/bashrc,系统环境配置文件
/etc/profile)
对文件的预留阈值作出修改,普通用户的umask=055,root的umask=000,保存退出,用source刷新一下文件,umask值被更改
6.特殊权限
6.1、对特殊权限的理解
权限 | 含义 |
---|---|
SUID | 只针对于二进制可执行文件 , 使用拥有SUID权限的文件发其中记录的程序时以 SUID 文件拥有者的身份去执行 |
SGID | 针对二进制可执行文件 : 该命令发起的程序是以该命令所有组的身份去执行 ;针对目录 : 目录新建文件的所属组与该目录的所有组保持一致 |
STICKYID | 对于文件:表示文件即使没有被程序调用也会被加载到交换空间中; 对于目录:表示当目录上有 STICKYID 的权限时 , 所有用户在该目录下均可创建文件 , 但只有文件拥有者和 root 用户可以删除该目录下的文件 |
6.2、对特殊权限的设定
- SUID
chmod u+s 目标
chmod 4原文件属性 目标 - SGID
chmod g+s 目标
chmod 2原文件属性 目标 - STICKYID
chmod o+t 目标
chmod 1原文件属性 目标
示例:
示例1:①开启一个监控,对cat命令的运行进行实时监控
watch -n 1 "ps ax -o user,group,comm |grep cat"
②给/bin/cat文件开启特殊权限,使文件执行时用它的拥有者即root的身份运行
③在监控中可以看到,不管是在root还是student用户的操作下,执行cat命令,该文件都是以root身份去执行
示例2:①:用root身份在/mnt目录下创建st目录,修改/mnt/st目录的组为student
②:给/mnt/st文件开放SGID权限
③:在/mnt/st目录下新建文件rootfile,此文件的所属者为student
示例3:①:用root身份创建一个/mnt/pub目录,对所有用户开放满权限,并设置STICKYID权限
②:用student用户身份在该目录下创建stfile
③:登录linux用户,尝试删除student用户创建的stfile,发现没有权限,不能对其进行删除操作
7.ACL权限列表
传统的权限仅有三种身份 (owner,group,othe)搭配三种权限 (r,w,x), 并没有办法单纯的针对某一个使用者或某一个群组来设置特定的权限需求 , 此时就得要使用ACL( 文件访问控制列表 ,Access Control List) 这个机制。
注意:
因此目前 ACL 几乎已经默认加入在所有常见的 Linux 文件系统的挂载参数中(ext2/ext3/ext4/xfs 等等 ), 但 rhel6.0以及之前的版本默认不支持 acl 的功能。
7.1、有关facl的命令
- getfacl
查看权限列表
getfacl Linux #查看文件Linux的权限列表
- setfacl
设定权限列表
参数 | 作用 |
---|---|
-m | 设定权限 |
-x | 删除指定用户 |
-b | 关闭列表功能 |
setfacl -m u:student:rwx linux #student用户对linux有rwx权限
setfacl -x u:student linux #删除指定的student用户
setfacl -b linux #关闭列表功能
示例:
1.开启一个监控,对/mnt/test的权限列表实时监控
2.对于文件/mnt/test,给用户admin开启rwx权限,student用户开启rx权限
3.关闭student用户的权限
4.直接关闭列表功能,相应的指定用户的权限也将关闭.
7.2、facl列表权限匹配顺序
- 1.资源拥有者
- 2.特殊指定用户
- 3.权利开放多的组
- 4.权利开放少的组
- 5.其他用户
7.3、 facl的mask阀值
- mask阀值是指定用户能够获取的最大有效权限
- 当设定过facl列表后用chmod缩减文件权限很可能会损坏mask
- mask的设定: setfacl –m m:权限值 目标
setfacl -m m:7 test #设定test文件的mask值为7
7.4、facl的default权限
default权限特性:
- 只对目录设定
- 只对目录中新出现的文件按或目录生效
- 对目录本身不生效
- 对目录中原有文件不生效
default权限设定方式:
setfacl –m d:<u|g>:权限 目录
示例:
1.开启监控,查看/mnt/test的权限列表,以及/mnt/test目录及其包含文件的属性
watch -n 1 "getfacl /mnt/test; ls -Rl /mnt"
2.设定/mnt/test目录的default权限,test目录及test目录下先前建立的文件file的权限并没有改变
3.在mnt/test新建file2文件,拥有组的权限为default权限值