文件权限存在的意义
文件权限的存在是系统最底层安全设定方法之一,保证文件可以被可用的用户做相应操作
文件权限的查看
ls -l file 查看文件信息
ls -ld dir 查看目录本身信息
ll file 相当于ls –l file
ll -d dir 相当于ls -ld dir
ls –LR dir 递归显示子目录
(1) ls -l file ##使用此命令查看文件的属性以及权限
(2) ls -ld dir ##使用此命令查看目录的属性以及权限
(3) ll file ##查看文件的属性
(4) ll -d dir ##查看目录的属性
(5) ls –LR dir ##递归显示子目录
(6) ls –lR dir 可以递归查看目录下的所有目录、文件以及目录下的文件
文件属性的查看
- | rw-r--r--|1|root|root| 32 |Oct 8 02:48 |filename
1 2 3 4 5 6 7 8
(1)文件类型
- 空文件,或者文本
d 目录
l 软链接,相当于快捷方式
s socket套接字(一个程序对外开放的门)
b block块设备
c 字符设备
s 表示套接字(socket) 是程序的一扇门 ,进入这扇门内部才能进入程序内部和程序交流
b 表示块设备(block)
c表示字符设备
(2) 文件的权限:(文件权限共9位,分为3部分)
| rw- |rw- | r–| 三位为一位,分别代表的是user,group,other(简写为u,g,o)
u:文件拥有者对文件能做什么操作(所有人)
g:文件所有组对文件能做什么操作(所有组)
o:其他人对文件能做什么操作(其它人)
(3)文件内容被系统记录的次数:“1”(硬链接)
对文件 | 文件内容被系统记录的次数(文件硬链接个数) |
---|---|
对目录 | 目录中文件属性的字节数(目录中子目录的个数) |
硬链接是有着相同 inode 号仅文件名不同的文件
(4) 用户名字:“root”(文件的所有人)
(5) 用户组名字:“root”(文件的所有组)
(6) 文件内容的大小
对文件 | 文件内容大小 |
---|---|
对目录 | 目录中子文件元数据(文件属性)大小 |
(7)文件最后一次被修改的时间
(8)文件的名称
改变文件的所有组和所有人
使用命令chown或者chgrp
chown username file或者dir 更改文件或者目录的拥有者
chown user-group file或者dir 更改文件或者目录的用户和用户组
chown -R user-group dir 递归更改目录的用户和用户组
准备工作
(1)chown username file|dir ##更改文件或者目录的所有人
(2)chown username.groupname file|dir ##更改文件或者目录的所有人所有组
(3)chown -R username dir ##更改目录本身及里面所有文件的所有人
chgrp group file或者dir 改变文件或者目录的用户组
chgrp -R group dir 递归改变目录的用户组
文件普通权限
r w - | r - - | r - -
u g o
表示:
u | 文件所有人对文件可以读写 |
---|---|
g | 文件组成员对文件可读 |
o | 其他人对文件可读 |
r:
对文件:可以查看文件中的字符
对目录:可以查看目录中文件的信息
w:
对文件:可以更改文件内字符
对目录:可以在目录中添加删除文件
x:
对文件:可以运行文件内记录的程序动作
对目录:可以进入目录中
修改文件的权限
chmod +(增加权限)or -(去掉权限)来改变权限
(1)chmod <u|g|o><+|-|=><r|w|x> file|dir 总的格式
(2) chmod u-x file1 file1拥有者去掉x权限
(3) chmod u+x,g-w file1 file1拥有者去掉x权,file1拥有组添加w权限
(4) chmod ugo-r file2 file2的用户、组、其他人去掉r权限
数字方式修改文件权限
在linux中,三种权限的权值为:r=4,w=2,x=1
例如:
u= r w - = 4+2+0=6
g= r - - = 4+0+0=4
o= r - - = 4+0+0=4
所以文件权限表示为644
系统默认权限的设定
从系统存在角度来说,开放权力越大,系统存在意义越高
从系统安全角度来说,开放权力越少,系统安全性越高
所以系统设定新建文件或目录会去掉一些权限
权限设定方式如下:
umask ##查看系统保留权限默认为022
umask 077 ##修改该系统保留权限为077,此设定为临时设定,只当前shell中生效
永久设定方式:
vim /etc/bashrc ##设置shell中的权限
70 if [ $UID -gt 199 ] && [ “id -gn” = “id -un” ]; then
71 umask 002 ##普通用户的umask
72 else
73 umask 077 ##超级用户的umask
74 fi
vim /etc/profile ##设置系统的权限
59 if [ $UID -gt 199 ] && [ “id -gn” = “id -un” ]; then
60 umask 002 ##普通用户umask
61 else
62 umask 077 ##超级用户umask
63 fi
以上两个文件umask设定值必须保持一致
source /etc/bashrc
source /etc/profile
让设定立即生效
文件的访问控制(acl列表)
(1)acl定义: acl = access control list
指定特殊用户对特殊文件有特殊权限
(2) acl列表查看
-rw-rwxr--+ 1 root root 0 Oct 21 15:45 file 出现“+”表示acl开启
getfacl file #查看acl开启的文件权限
#file: file #文件名称
#owner: root #文件拥有者
#group: root #文件拥有组
user::rw- #文件拥有人的权限
user:kiosk:rwx #指定用户的权限
group::r-- #文件拥有组的权限
mask::rwx #能赋予用户的最大权力阈值
other::r-- #其他人的权限
(3) acl列表的管理
getfacl file
setfacl -m u:username:rwx file #设定username对file拥有rwx权限
setfacl -m g:group:rwx file #设定group组的成员对file拥有rwx权限
setfacl -x u:username file #从acl列表中删除username
setfacl -x g:group file #从acl列表中删除group组
setfacl -b file #关闭file上的acl列表
(4) mask值
在权限列表中mask表示能生效的权限值
当用chmod减小开启acl的文件权限值时mask值会发生改变
chmod g-w westos
如果要恢复mask值
setfacl -m m:rw westos
(5) acl的默认权限设定
acl默认权限只针对目录设定
acl权限只针对设定完成之后新建立的文件或目录生效,而已经存在的文件不会继承默认权限
setfacl -m d:u:student:rwx /mnt/westos
setfacl -k /mnt/westos
特殊权限
1.sticky 粘制位
只针对目录有效,当一个目录上有sticky权限时,这个目录中的文件只能被文件的所有者删除
设定方式:
chmod o+t direcotry
chmod 1777 direcotry
chmod 1xxx direcotry
(1) (1)先在超级用户下建立一个目录 mkdir /mnt/westos
然后设置监控命令j监控改目录以及改目录下的文件:
watch -n 1 “ls -ld /mnt/westos ; ls -l /mnt/westos”
并且在超级用户下设置满权限 chmod 777 /mnt/westos
在超级用户下建立两个普通用户leo westos
分别切换到两个普通用户下建立文件file file1
(2) westos用户可以删除leo用户建立的文件file,这样做很不安全
(3) 在超级用户模式下给westos这个目录增加t权限
给westos目录加上t权限以后,leo用户就不能删除westos用户建立的file1文件了
2.sgid 强制位
设定方式:
chmod g+s file|dir
chmod 2xxx file|dir
对目录:当目录上有sgid权限时任何人在此目录中建立的文件都属于目录的所有组
(1)首先在超级用户下建立一个目录 并且对这个目录进行监控
(2) 查看这个目录的权限
(3)在超级用户下建立一个新用户,并且将新建目录的用户组变为刚刚新建的用户 然后在改目录下建立新的文件,发现此文件的用户组仍然为超级用户,
并不是刚刚 新建的那个用户tom
(4) 为了使在目录中建立的文件都属于目录的用户组,需要在目录上加上s权限
由此可见,当给目录加上s权限时,目录的所有组权限会出现s,此时建立的文件的所有组为目录的所有组。
对文件:只针对二进制可执行文件,当文件上有s权限时任何人执行此文件产生的进程都属于文件的所有组
(1)先监控二进制文件的进程
(2) 查看该二进制文件的权限
(3) 以root身份启动一个进程,这个进程的所有人和所有组均为root
然后将改文件的所有组改为westos,发现并没有改变,仍为root
(4) 给二进制文进加上s权限,重新开启一个新的进程 发现进程属于文件所有组
3.suid 冒险位
作用:只针对二进制可执行文件,当文件上有suid权限时任何人执行这个文件中程序产生的进程都属于文件的所有人
设定方式:
chmod u+s file
chmod 4xxx file
(1) 监控二进制文件的进程
(2) 设置/bin/watch的用户为student 执行watch命令发现进程所有人为root
(3)设定冒险位权限后,执行watch命令 发现进程的用户属于student