一.文件权限存在的意义
文件权限的存在是系统最底层安全设定方法之一,保证文件可以被可用的用户做相应操作。
二.文件权限的查看
ls -l file 查看文件信息
ls -ld dir 查看目录本身信息
ll file ##相当于ls –l file
ll -d dir ##相当于ls -ld dir
ls –LR dir ##递归显示子目录
ls -l file
ls -ld dir
ll file ##相当于ls –l file
ll -d dir
注意:alias ##利用该命令可以查询到此系统下的命令的别名
ls –LR dir
总结:通过使用命令ls –lR dir 可以递归查看dir(目录)下的所有目录、文件和目录下的文件
三.权限的读取
d|rw-rw-r–| |kiosk|kiosk| 0 |Jul 21 18:26|file
[1] [2] [3] [4] [5] [6] [7] [8]
[1]文件的类型:
- | 空文件,或者文本 |
---|---|
d | 目录 |
l | 软连接,相当于快捷方式 |
s | socket套接字(一个程序对外开放的门) |
b | block块设备 |
c | 字符设备 |
p | 管道 |
[2]文件的权限
| rw- |rw- | r–
三位为一位,分别代表的是user,group,other(简写为u,g,o)
u:文件拥有者对文件能做什么操作
g:文件所有组对文件能做什么操作
o]:其他人对文件能做什么操作
[3]:
对文件:文件硬链接个数(文件内容被记录的次数)
对目录:目录中子目录的个数
[4]文件的所有人
[5]文件的所有组
[6]:
对文件:文件大小
对目录:目录中子文件元数据(matedata元数据可以理解为文件案的属性)大小,文件夹的时间戳不算
[7]
文件的内容被修改的时间
[8]文件的名称
三.如何改变文件所有人和所有组
chown
chown username file|dir 更改文件拥有者
chown user-group file|dir 更改文件或者目录的用户和用户组
chowm -R user-group dir 递归更改目录的用户和用户组
watch监控
(为了实验效果明显方便,我们用watch监控)
1.更改文件拥有者
2.改变更改文件或者目录的用户和用户组
递归更改了目录的用户
chgrp
chgrp group file|dir 改变文件或者目录的用户组
chgrp -R group dir 递归改变目录的用户组
改变文件的用户组
递归改变目录的用户组
四.如何改变权限
chmod 可以通过+(增加权限)或者-(去掉权限)来改变权限
(1) 对权限的理解
r:
对文件:是否可以查看文件中的内容 —→cat file
对目录:是否可以查看目录中有什么子文件或者子目录 --→ls dir
w:
对文件:是否可以改变文件里面记录的字符
不可编辑,这个文件是只读的
可以看出结果:我们可以对文件进行编辑了。
对目录:是否可以对目录中子目录或子文件的元数据进行更改
x:
对文件:是否可以通过文件名称调用文件内记录的程序
先建立一个文件,在文件里写入date命令
sh是一个命令解释器。这里加上r是因为只有读了才能知道是什么命令,才能够执行
对目录:是否可以进入目录
(2) 更改方式
== chmod <u/g/o><+/-/=><r/w/x> file/dir 对文件或者目录进行修改权限==
chmod u+x /mnt/westos/test
chmod g-r /mnt/westos/hello
chmod ug-r /mnt/westos
chmod u=r,g+x /mnt/file1
chmod –r /mnt/file2
chmod o=rw- /mnt/file3
(3) rwx对应的数字
r | 4 |
---|---|
w | 2 |
x | 1 |
(分别是2的进制)
7=rwx,6=rw-,5=r-x,4=r–,3=-wx,2=-w-,1=–x,0=—
随堂测试:
1.新建用户要求我们在前面已经做过(前一篇博客)这里就不做解释。
首先新建目录
已经建好的用户
修改权限:
检查:
五.umask
umask 系统建立文件时默认保留的权利
(1)查看umask的值是多少:
超级用户的umask
普通用户的umask
临时设定umask
umask XXX XXX是你要预留的权利,比如umask 007
总结:
系统默认中,超级用户是777-022
普通用户是777-022-111
永久更改umask
1.
vim /etc/profile ##系统配置文件
59 if [ $UID –gt 199 ] && [ “id –gn” = “id –un” ];then
60 umask 022 ##普通用户的umask
61 else
62 umask 077 ##超级用户的umask
63 fi
原始的如上图,将其数字改为下图的样子
2.
vim /etc/bashrc ##shell配置文件
70 if [ $UID –gt 199 ] && [ “id –gn” = “id –un” ];then
71 umask 002
72 else
73 umask 077
74 fi
改为下图
3.
source /etc/profile ##调用,让更改立即生效
source /etc/bashrc
结果:
超级用户由原来的0022变成0077
普通用户由0002变成0022
六.特殊权限
1.
sticky ##粘制位
作用:只针对目录有效,当一个目录上有sticky权限时,在这个目录中的文件只能被文件的所有者删除
设定方式:
chmod o+t dir
chmod 1xxx dir 两者功能相同
实验如下:
1.
首先可以创建一个监控,实时观看/westos目录的权限变化
tom建立一个file1,harry建立一个file2
tom用户把harry建立的文件file2删除了,也就说明别人可以删除不是自己建立的文件
为了解决这个问题,我们可以进行以下操作
总结:当一个目录上有sticky权限时,在这个目录中的文件只能被文件的所有者删除
sgid ##强制位
设定方式:
chmod g+s file/dir
chmod 2xxx file/dir 两者功能相同
作用:
1)对目录:当目录上有sgid权限时任何人在此目录中建立的文件都属于目录的所有组
实验如下:
用watch -n 1 " ls -ld /westos ; ls -l /westos " 进行监控
1.mkdir /westos
2.ls -ld /westos 此时可以看到/westos的目录权限为755
3.useradd westos 增加一个用户
4.chgrp westos /westos 在watch监控下可以看到原来用户组root变成了westos
5.touch /westos/file 可以看到此时的file用户组还是root
为了解决这个问题,我们进行一下操作
6.chmod g+s /westos 给用户组加权限,使任何人在此目录中建立的所有文件都属于此目录的所有组
7.ls -ld /westos 可以看见权限改变,用户组的权限改为r-s
touch /westos/file1 可以看到file1的用户组为westos
再次检测:
su - westos 切换到普通用户westos
touch /westos/file2 失败,因为不具有写的权力
exit
su - root
chmod g+w /westos 注意:这一步也可以写在前面,也可以直接chmod 777 /westos
在前面设定之后就可以在westos用户直接建立/westos/file3
su - westos
touch /westos/file3 可以看到即使是普通用户westos建立的file3 它的文件用户组依旧是westos
也可以在再建立普通用户,在里面建立文件,看是否用户组属于westos
总结:用了chmod g+s /westos
任何人在此目录中建立的所有文件都属于此目录的用户组
2)对文件:只针对与二进制可执行文件,当文件上有sgid时任何人执行此文件产生的进程都属于文件的组
实验如下:
因为对文件的时候只对二进制可执行文件有效,所以我们用==/bin/watch==进行实验
对进程的监控 ps -ax -o user,group,comm | grep watch
1.ls -l /bin/watch 查看/bin/westos
2./bin/watch -n 1 date 运行一个进程
3.用ps -ax -o user,group,comm | grep watch监控 发现用户是root用户组也是root
4.ctrl+c 退出进程
5.chgrp westos /bin/watch 将/bin/watch 的用户组改为westos。
6./bin/watch -n 1 date 运行一个进程
7.ps -ax -o user,group,comm | grep watch监控 发现我们修改了用户组,但是root的用户组没改变
但是此时我们需要将文件用户组改为我们设定的用户组
1.chmod g+s /bin/watch 赋予这个文件权限,将其用户组改为我们设定用户组
2. ls -l /bin/watch 查看/bin/westos 发现用户组的权限改为r-s
1. /bin/watch -n 1 date 运行一个进程
2.ps -ax -o user,group,comm | grep watch监控 发现root用户的用户组变成了westos
3.useradd cui 建立一个新的用户 (已经建立就不用建立了)
4.su - cui 切换到普通用户
5./bin/watch -n 1 date 运行一个进程
6.用ps -ax -o user,group,comm | grep watch监控 发现watch命令用户是cui 用户组已经改为了westos
说明用此命令,任何人执行此文件产生的进程,它的用户组都属于文件的用户组(也就是我们设定的用户组)
3
.suid ##冒险位
设定方式:
chmod u+s file
chmod 4xxx file 两者功能相同
作用:只针对与二进制可执行文件,当文件上有suid时任何人执行这个文件中程序产生的进程都属于文件的所有人
实验如下:
此时我们需要无论谁产生的这个进程,都属于我们的设定的文件所有人
步骤如下:
结果如下:
再次验证:
总结:当文件上有suid时任何人执行这个文件中程序产生的进程都属于文件的拥有者
七.acl权限列表
(1)作用:让特定的用户对特定的文件拥有特定权限
(2)acl列表查看
-rw-rwxr–+ 1 root root 0 Jul 21 14:25 file 1中权限中的“+”即为acl开启
getfacl file
查看acl开启的文件的权限
file : file | 文件名称 |
---|---|
owner : root | 文件拥有者 |
group : root | 文件拥有者 |
user::rw- | 文件拥有人的权限 |
user::kiosk:rwx | 指定用户(kiosk)的权限 |
group::r– | 文件拥有组的权力 |
mask::rwx | 能赋予用户的最大权力值 |
other::r– | 其他人的权限 |
(3)acl列表的管理
从acl列表增加
setfacl –m u:harry:rwx file ##设定harry对file拥有rwx权限
setfacl –m u:harry:0 file ##设定harru对file拥有0权限
setfacl –m g:shengchan:rwx file ##设定shengchan对file拥有rwx权限
从acl列表删除
setfacl –x u:harry file ##从acl列表中删除用户harry
setfacl –x g:shengchan file ##从acl列表中删除组shengchan
关闭acl列表
setfacl -b file ##关闭file上的acl列表
上面的‘+“消失不见了,说明关闭了acl列表
(4)mask的值
在权限列表中mask标志能生效的权力值,当用,mask值会发生改变
实验如下
用watch命令监视:
设定westos对/mnt/file拥有rw权限
如果要恢复mask的值,输入以下命令:chmod g+w /mnt/file
或者setfacl –m m:rw /mnt/file
(5)acl的默认权限设定
acl默认权限只针对目录设定,“acl权限只针对设定完成之后新建的文件或目录生效,而已经存在的文件是不会继承默认权限的”
setfacl –m d:u:student:rwx /mnt/westos 设定acl默认权限
setfacl –k /mnt/westos 删除设定的默认权限