1.文件权限是系统最底层的安全设定方式之一;
2.保证文件可以被可用的用户来进行相应的操作。
对于文件:
ls -l file
ll file
对于目录:
ls -ld dir
ll -d dir
对于一个大目录下的所有子目录和文件,我们可以采用递归的方法来查看文件权限:
ls -lR /mnt/
ll -R /mnt/
为了验证命令我们新建用户,并完成实验:
以file的文件权限信息为例,我们对文件的权限作以解读:
标 号 | 含 义 |
[1] | 文件的类型:“-”——空文件或者文本、“d”——目录、“l”——软链接、 “s”——socket套接字、“b”——block快设备、“c”——字符设备 |
[2] | 文件权限: rw- | r-- | r-- 1 2 3 1.[u]文件拥有者对文件能做什么操作 2.[g]文件所有组对文件能做什么操作 3.[o]其他人能对文件做什么操作 |
[3] | 对文件:文件硬链接的个数(文件内容被记录的次数) 对目录:目录中子目录的个数 |
[4] |
文件的所有人 |
[5] | 文件的所有组 |
[6] | 对文件:文件大小 对目录:目录中,子文件的元数据(matedate可以理解为文件的属性)大小 |
[7] | 文件的内容被最后一次修改的时间 |
[8] | 文件、目录名称 |
改变所有人:chmod
改变所有组:chgrp
我们以改变/mnt/file1的所有组和所有人为例:
注意:改变所有人和所有组的前提是所有组和所有人必须已经存在
同时改变所有人和所有组:chmod wen:renshi /mnt/file1
对于目录来说,上述指令只改变目录本身:
我们在/mnt/test1/下新建hello1和hello2,以此验证实验。
如果想要连同目录下的子目录和文件一起更改所有人和所有组,可以用chown -R 来更改:
1.对权限的理解:
r |
对文件:是否可以查看文件中的内容 --->cat file 对目录:是否可以查看目录中有什么子文件或者子目录 -------> ls dir |
w | 对文件:是否可以改变文件里面记录的字符 对目录:是否可以对目录中子目录或子文件的元数据进行更改 |
x | 对文件:是否可以通过文件名称调用文件内记录的程序 对目录:是否可以进入目录 |
2.更改方式:
chmod <+|-|=> file||dir
##例如:
chmod u-r file ##去除文件所有人读的权限
chmod g+w file ##给文件所有组写的权限
chmod o=x dir ##指定其他人对dir目录的权限为执行
chmod o=rwx dir ##指定其他人对dir目录的权限为rwx
我们对/mnt/file1进行权限更改实验:
对于所有人、所有组、其他人,我们可以通过数字来定义三者的权限:
r w x
2^2 2^1 2^0
4 2 1
rwx rwx rwx
7 7 7
7:rwx
6:rw-
5:r-x
4:r--
3:-wx
2:-w-
1:--x
0:---
chmod 541 file ----> r-x|r--|--r
例如:给/mnt/file2的权限为rw-r-x-w-:
chmod 652 /mnt/file2
umask 系统建立文件时默认保留的权限
1.临时更改系统默认权限
umask 为022时,保留的权限为--- -w- -w- 所以新建目录的权限为 rwx r-x r-x 即755=777-022
新建文件的权限为777-755-111=644 即为rw- r-- r--
注:减111是文件系统所决定的。
umask ##查看当前的umask值
umask 077 ##临时更改系统默认保留权限
用umask只能临时更改系统默认保留权限,当关闭shell重开一个时,就会重置
2.永久更改系统默认保留权限
(1)系统配置
系统配置文件:/etc/profile
vim /etc/profile ##打开配置文件
60行的为普通用户的默认保留权限;62行为超级用户的默认保留权限
更改62行的umask值为077(我们用超级用户建立文件和目录来完成实验),:wq退出保存
(2)shell配置
shell配置文件:/etc/bashrc
71行的为普通用户的默认保留权限;73行为超级用户的默认保留权限
更改73行的umask值为077(我们用超级用户建立文件和目录来完成实验),:wq退出保存
source /etc/profile ##让文件立即生效
source /etc/bashrc ##让文件立即生效
1.sticky 粘滞位
作用:只针对目录生效,当一个目录上有sticky权限时,在这个目录中的文件只能被文件的所有者删除
设定方式:
chmod o+t dir
chmod 1xxx dir
验证sticky粘滞位的作用:
1)在/mnt/下建立/pub目录,并且在/pub目录中新建file1、file2、file3,给它们满权限
2)切换到student用户,删除/mnt/pub/file3
删除成功!
3)给/mnt/pub目录设置粘滞位
可以看到/pub的o位权限变成了rwt,表示设置成功。
4)再次切换到student用户,删除/mnt/pub/file2
删除不成功,提示没有权限。
2.sgid 强制位
设定方法:
chmod g+s file|dir
chmod 2xxx file|dir
作用: (1)对文件:指针对于二进制可执行文件,当文件上有sgid权限时,任何人使用此文件产生的进程都属于文件的所有组
验证sgid 强制位对文件的作用:
1)ls -l /bin/watch,查看文件属性
2)执行watch date命令,使用ps查看进程
watch date
ps ax -o comm,user,group | grep watch
3)修改/bin/watch的所有组为student,对/bin/watch设置sgid强制位,再次执行watch date,使用ps查看进程
作用:(2)对目录:当目录上有sgid权限时,任何人在此目录中建立的子文件都属于目录的所有组
验证sgid 强制位对目录的作用:
1)在/mnt目录下新建目录/jishu,给它满权限
2)切换用户为student,在/mnt/jishu下新建文件,查看文件属性
3)对目录/mnt/jishu设定强制位sgid权限,查看目录属性,'s'已经表示设定成功
4)再次切换用户为student,在/mnt/jishu下新建文件,查看文件属性
3.suid 冒险位
作用:只针对于二进制可执行文件,当文件上有suid权限的时候,任何人执行这个文件程序产生的进程都属于文件的所有人
设定方式:
chmod u+s file
chmod 4xxx file
验证suid权限:
1)执行watch命令,查看watch进程
2)修改/bin/watch文件的所有人为student,然后在对/bin/watch文件设置suid权限
3)再次执行watch命令,查看watch进程
注意:设置特殊权限后清除特殊权限:
chmod 0xxx file|dir
1.作用:让特定的用户对特定的文件拥有特定权限。
2.acl列表查看
- rw- rwx r-- + 1 root root 0 Jan 3 02:01 file
“+”: acl开启标志
getfacl file ## 查看acl开启的文件的权限
#file: file | ## 文件名称 |
# owner: root | ## 文件拥有人 |
# group: root | ## 文件拥有组 |
user::rw- | ## 文件拥有人的权限 |
user:student:rwx | ## 指定用户的权限 |
group::r-- | ## 文件拥有组的权限 |
mask::rwx | ## 能赋予用户最大的权限阀值 |
other::r-- | ## 其他人的权限 |
3.acl列表的管理
setfacl -m u:username:rwx file ## 设定username对file拥有rwx权限
setfacl -m g:groupname:rwx file ## 设定group组成员对file拥有rwx权限
setfacl -x u:username file ## 从acl列表中删除username
setfacl -b file ## 删除file上的acl权限列表
1)设定wen对/mnt/file有r和x的权限
2)设定shengchan用户组对/mnt/file1有r和w的能力,并验证:
3)从/mnt/file的acl列表中删除wen
4)删除/mnt/file1的acl权限列表
4.mask值
1.在权限列表中mask标示能生效的权力值。
2.当用chmod减小开启acl的文件权限时,mask值会发生改变:
chmod g-w /mnt/file1
3.恢复mask值:
5.acl的默认权限设定
acl默认权限只针对目录设定。
acl权限只针对设定完成之后新建立的文件或目录生效,而已经存在的文件是不会继承默认权限。
setfacl -m d:u:wen:rwx /mnt/test
以例子说明acl默认权限列表的设定:
1)首先在/mnt下建立test目录,然后在test目录下建立hello目录和file1文件,进入wen用户,在test目录下的hello目录下新建文 件file2, 并且对/mnt/test/file1进行写入操作:
均不被允许,请求被拒绝。
2)使用acl默认权限权限设定wen对/mnt/test/目录的满权限,设定后在test目录下建立目录hello1和文件file2 :
3)切换用户为wen,对设定前的/mnt/test中原有的子文件和子目录进行操作:
对于在设定默认权限之前的已有的文件和目录,依旧没有操作权限
4)切换用户为wen,对设定后的/mnt/test中新建的子文件和子目录进行操作: