一、文件权限的意义及查看方法
1.文件权限存在的意义:是系统最底层安全设定方法之一,是保证文件可以被可用的用户做相应的使用
2.文件权限查看
如图:
写法及含义
- ls -l 文件 (可查看文件的属性与权限等数据)
- ls -ld 目录 (可查看目录本身的属性与权限等数据 )
- ll 文件 (相当于ls -l 的用法)
- ll -d 目录 (相当于ls -ld 的用法)
二、文件权限的读取
在查看文件权限时会出现例如下面的内容
- |rw-rw-r--| 1 |root| root| 0 | Jul 21 09:18 | file
[1] [2] [3] [4] [5] [6] [7] [8]
注: - |rw-rw-r--| 1 |root| root| 0 | Jul 21 09:18 | file 的含义
【1】 表示文件的类型
有以下几种:
- - 表示空文件或文本
- d 表示目录
- l 软链接 (连接文本)
- s 套接字 (数据接口文件)
- b 块设备 (设备文件里面的可供存储的接口设备)
- c 字符设备
【2】文件的权限
如 rw- rw- r--
(1)(2)(3)
(1)[u] 代表文件所有者对文件的使用权限
(2)[g] 代表文件所有组对文件的使用权限
(3)[o] 代表其他人对文件的使用权限
【3】对文件:文件硬链链接个数 (文件内容被记录的次数)
对目录:目录中子目录的个数
【4】文件的所有者
【5】文件的所有组
【6】对文件:文件的大小
对目录:目录中子文件元数据大小
注: 元数据(matedate可以理解为文件的属性)
【7】文件的内容被修改的时间
三、如何改变文件的所有者和所有组
1.chown 改变文件的所有者
方式:
chown username file/dir 表示改变文件或目录的所有者
chown user.group file/dir 表示同时改变文件或目录的所有者和所有组
chown -R user.group dir (可以连目录下的所有子目录或文件都同时更改文件所有者)
2.chgrp 改变文件的所有组
方式:
chgrp group file/dir 改变文件或目录的所有组
chgrp -R group dir(可以连目录下的所有子目录或文件都同时更改文件所有组)
四、如何改变文件的权限
1.对权限的理解
- r 可读(read)
对文件:是否可以查看文件中的内容
对目录:是否查看目录中有什么子文件或者子目录
- w 可写(write)
对文件:是否可以改变文件里面记录的字符
对目录:是否可以对目录中子目录或子文件的元数据进行更改
- x 可执行(execute)
对文件:是否可以通过文件名称调用文件内记录的程序
对目录:是否可以进入目录
2.权限更改方式
(1)符号类型改变文件权限
如下表所示:
chmod | u g 0 | + - = | r w x | 文件或目录 |
例如:给文件的所有者加上 x 权限 即可使用 chmod u+x 文件
给文件的所有组去掉 r 权限 即可使用 chmod g-r 文件
其他人对文件有 rx 权限 即可使用 chmod 0=rx 文件
操作如下图:
去掉全部人对文件的 r 权限 即可使用 chmod -r 文件
同时给文件的所有者与所有组都去掉 r 权限 即可使用 chmod ug-r 文件
给文件的所有者去掉 r 权限,所有组加上 x 权限 即可使用 chmod u-r,g+x 文件
操作如下图:
(2)数字类型改变文件权限
- rwx 的权限数分别为:r =4 , w=2, x=1
- 算法:如 r-xr----x [u]=4+0+1=5,[g]=4+0+0=4, [o]=0+0+1=1
- 用法: chmod 541 file1 表示将这个文件的权限改为 r-xr----x
如图所示:
五、文件默认权限(umask)
1.临时更改umask (当重新打开一个shell时会自动恢复成默认)
当umask 为077 时,创建的文件权限是777-077-111=600
2.永久更改umask
一共分为三步:
(1)更改系统配置文件的 umask
(2)更改shell配置文件的umask
(3)立即让更改生效
source /etc/profile , source /etc/bashrc
如图:
注:普通用户的 umask 002
超级用户的 umask 022
根据自己的用户身份去执行相应的操作
六、特殊权限
1.suid 冒险位
(1)作用
只针对与二进制可执行文件
本权限仅在执行该程序的过程中有效
执行者将具有该程序所有者的权限
(2) 设定方式
chmod u+s file /dir 或 chmod 4xxx file/dir
在没设定冒险位之前先 执行 watch 并查看其进程的所有者为 root
修改/bin/watch 的所有者,设定冒险位,执行watch ,查看其进程的所有者改为 student
2.sgid 强制位
(1)作用
对文件:只针对二进制可执行文件,当文件上有sgid时任何执行此文件产成的进程都属于文件的组
对目录:当目录上有sgid权限时任何人在此目录中建立的文件都属于目录的所有组
(2)设定方式
chmod g+s file /dir 或 chnod 2xxx file/dir
对文件:
用 ls 对 /bin/watch 进行查看,执行 watch -n 1 date 命令 ,使用 ps ax -o comm.user,group | grep watch 查看 进程,可以发现 watch 进程的所有组属于 root
修改 /bin/watch 的所有组为 student ,并且设置强制位,再次执行 watch ,使用 ps 对其进程进行查看,所有组变为 student
对目录:
在/mnt下创建 noah 目录,并查看其所有组属于 root
将目录中其他人的权限加上 w ,用普通用户在 noah 下进行操作,查看目录的所有组改为 普通用户
对目录设定强制位权限,并查看 目录权限, 其中出现 s 表示设定成功 再次进入普通用户,对/mnt进行操作
3.sticky 粘制位
(1)作用
只针对目录生效,当一个目录上有sticky权限时,在这个目录中的文件只能被文件的所有者删除
(2)设定方式
chmod 0+t dir 或 chmod 1xxx dir
有以下步骤:
先建立一个 /cute 目录,在这个目录下创建 三个 文件,并查看文件权限。
将 目录及其里面的文件权限全改为 777
u
在设置粘滞位之前切换到普通用户,对/cute下的文件进行操作,发现可以执行。
使用 chmod 1777 /cute 设置粘滞位 可以发现 /cute 权限后面的 x 变成了 t 即表示设置成功。
再次切换到普通用户,对/cute进行操作,发现被拒绝。
七、acl 的使用
1.acl 的作用
让特定的用户对特定的文件拥有特定的权限
2.acl 的设置技巧
getfacl : 可以查看某个文件或目录的 acl 设置项目
setfacl : 可以设置某个文件或目录的 acl
(1)setfacl 命令用法
setfacl -m u:username:rwx file 设定username对file拥有rwx权限
setfacl -m g:group:rwz file 设定group 组成员对file拥有rwx权限
setfacl -x u:username file 从cal列表中删除username
setfacl -b file 关闭file上的acl列表
(2)getfacl 命令用法
#file : file 文件名称
#owner: root 文件所有者
#group: root 文件所有组
user: :rw- 文件所有者的权限
user:wstos:rwx 指定用户的权限
group: :r-- 文件所有组的权限
mask: :rwx 能赋予用户的最大权力伐值
0ther: :r-- 其他人的权限
3.mask 值
mask 标示能生效的权力值,当用 chmod 减少开启 acl 的文件权限时 mask 值会发生变化
chmod g-w westos
如果要恢复mask值使用:setfacl -m m:rw westos
4.acl 的默认权限设定
acl 默认权限只针对目录设定
acl权限只针对设定完成之后建立的文件或目录生效,而已经存在的文件是不会继续默认权限
操作如下:
先创建一个目录 /westos ,在/westos下创建 文件 ,切换成普通用户,对这个文件进行操作,发现权限被拒绝。
设定/westos的默认权限,在/westos下创建一个目录 noah 和 一个文件 file1
切换到普通用户,对设定默认权限的 /westos/file 进行操作,发现被拒绝。
对 设定默认权限后的 /westos/noah 和 /westos/file1 进行操作,发现可以操作。