一 文件权限存在的意义
系统最底层安全设定方法之一
保证文件可以被可用的用户做相应操作
二 文件权限的查看
ls -l file ##查看文件的权限
ls -ld dir ##查看目录的权限
也可以写成下面的形式,其中( ll=ls -s )
ll file
ll -d dir
三 文件权限的读取
- | rw-rw-r-- | 1 | kiosk | kiosk | 0 | Jul 21 09:18 | file
[1] [2] [3] [4] [5] [6] [7] [8]
查看文件/目录的时候,会出现上面这种类型,则每个部分的含义分别是:
[1]
文件的类型
- ##空文件,或者文本
d ##目录
l ##软链接
s ##socket 套接字(程序的接口)
b ##block 块设备
c ##字符设备
[2]
文件的权限
rw- | rw- | r--
1 2 3
1 [u]文件拥有者对文件能做
2 [g]文件所有组能对文件作什么操作
3 [o]其他人能对文件作什么操作
[3]
对文件:文件硬链接个数(文件内容被记录的次数)
对目录:目录当中子目录的个数
[4]
所有人
[5]
所有组
[6]
对文件:文件大小
对目录:目录中子文件元数据(matedate可以理解为文件的属性)大小
[7]
文件的内容被修改的时间
[8]
文件的名称
四 如何改变所有人和所有组
linux是一个多用户多任务的系统,常常会有多人同时使用同一台主机来进行工作,为了考虑每个人的隐私权以及每个人喜好的工作环境对用户进行分类:文件拥有者(user),文件所属组(group),其他人(other)
chown(改变user) | chgrp(改变group)
chown username file | dir
chown user.group file | dir
chown -R user.group dir
chgrp group file | dir
chgrp -R group dir
五 如何改变文件的权限
1> 对权限的理解
r
对文件:是否可以查看文件中的内容 --->cat file
对目录:是否可以查看目录中有什么子文件 --->ls dir
w
对文件:是否可以改变文件里面记录的字符
对目录:是否可以对目录中子目录或子文件的元数据进行更改
x
对文件:是否可以通过文件名称调用文件内记录的命令
对目录:是否可以进入目录
文件 file 开始是对 student 用户是可读的,将其改为不可读,则就查看不了文件 file
根下的目录 hello 开始是对 student 可读的,就意味着可以查看目录下的子文件,变为不可读之后,就不可查看了
这里将 student 对其目录的 x 权限也取消了,可以看到,并不能进入其目录
2> 更改方式
chmod <u|g|o> <+|-|=> <r|w|x> file|dir
chmod u+x /mnt/file1
chmod g-r /mnt/file2
chmod ug-r /mnt/file3
chmod u-r,g+x /mnt/file4
chmod -r /mnt/file5
chmod o=r-x /mnt/file6
可以看到最后一个 o=r-x 中 x 并没有加上,因此就需要下面的方法来进行添加
r w x
2 1 0
r=2^2=4, w=2^1=2, x=2^0=1
如:r-x|r--|--x
5 4 1
chmod 541 /mnt/file (可以直接更改权限,不用担心上面的命令 x 有时添加不上)
7=rwx, 6=rw-, 5=r-x, 4=r--,
3=-wx, 2=-w-, 1=--x, 0=---
六 umask
umask 系统建立文件时默认保留的权限
临时:
umask 022 ##临时设定系统预留权限为022
上面的就是如何修改系统预留权限,只不过是临时的,需要永久的话,就得更改系统配置
永久:
vim /etc/profile ##系统配置文件
59 if [$UID -gt 199] &&["'id -gn'" = "'id -un'"];then
60 umask 002 ##普通用户的umask
61 else
62 umask 022 ##超级用户的umask
63 fi
vim /etc/bashrc ##shell配置文件
70 if [$UID -gt 199] &&["'id -gn'" = "'id -un'"];then
71 umask 002 ##普通用户的umask
72 else
73 umask 022 ##超级用户的umask
74 fi
source /etc/profile ##配置生效
source /etc/bashrc ##配置生效
正如上面所说先更改 /etc/profile 文件,这里应先输入 (:set nu)先将行数调出来,将022改成了077,这样超级用户在建立的时候预留权限就变成了077
再就是更改 /etc/bashrc 文件,和上面的相同,将022更改为077
最后要先将配置生效,再建立文件,可以看到建立的文件权限变为了700,因为它的预留权限为077
七 特殊权限
1> sticky ##粘制位
作用:
只针对目录生效,当一个目录上有sticky这个权限时,在这个目录中的文件只能被文件的所有者删除
设定方式:
chmod 0+t dir
chmod 1xxx dir
这里给出详细的饰演步骤:(需要在根目录下建立一个目录,给它设定权限,然后在一个普通用户下,在此目录下建立文件,那么这个文件在你切换到另一个普通用户下,不能进行删除,只有建立文件的所有者有权利删除)
2> sgid ##强制位
作用:
对文件:只针对二进制可执行文件,当文件上有sgid时任何人执行此文件产生的进程都属于文件组
对目录:当目录上sgid权限时任何人建立在此目录上建立的文件都属于目录组
设定方式:
chmod g+s file|dir
chmod 2xxx file|dir
饰演步骤:这是对文件的~[(在此针对二进制可执行文件watch)查看/bin/watch,显然此文件用户组属于root,将此文件用户组交于student,给它设定权限,然后在更一个普通用户下进行watch这个命令时,用"ps ax -o comm,user,group | grep watch"对其进行监控,它的进程仍然属于student]
饰演步骤:这是对对目录的~(需要在根目录下建立一个目录,改变它用户组成为student,给它设定权限,并让其使普通用户可以建立文件,在另一个普通用户下,在此目录下建立文件,此文件属于student,并不属于另一个普通用户)
3> suid ##冒险位
作用:
只针对与2进制可执行文件,当文件上有suid时任何人执行这个文件中记的程序产生的进程都属于文件的所有人
设定方式:
chmod u+s file
chmod 4xxx file
饰演步骤:[(在此针对二进制可执行文件watch)查看/bin/watch,显然此文件用户所有人属于root,将此文件用户所有人交于student,给它设定权限,然后在更一个普通用户下进行watch这个命令时,用"ps ax -o comm,user,group | grep watch"对其进行监控,它的进程仍然属于student]
八 acl权限列表
1> 作用
让特定的用户对特定的文件拥有特殊的权限
2> acl列表查看
- rw-rwxr--+ 1 root root 0 Jul 21 15:13 file
^
acl开启
getfacl file ##查看acl开启的文件的权限
#file:file ##文件名称
#owner:root ##文件拥有者
#group:root ##文件拥有组
user::rw- ##文件拥有人的权限
user:kiosk:rwx ##指定用户的权力
group::r-- ##文件拥有组的权力
mask::rwx ##能赋予用户的最大权力阀值
other::r-- ##其他人的权限
这里需要查看 "+" 就得先运用下面的命令才行, 再 getfacl 查看acl列表
3> acl列表的管理
setfacl -m u:username:rwx file ##设定username对file拥有rwx的权限
setfacl -m g:group:rwx file ##设定group组成员对file拥有rwx的权限
setfacl -x u:username fiel ##从acl列表中删除username
setfacl -b file ##关闭file的acl列表
4> mask值
在权限列表中mask标示能生效的权力值
当用chmod减小开启acl的文件权限时mask值会改变
如:chmod g-w file
如果要恢复mask的值
setfacl -m m:rw file
5> acl的默认权限设定
acl默认权限只针对目录设定
acl权限只针对设定完成之后新建的文件或目录生效,而已经存在的文件是不会继承默认权限
setfacl -m d:u:student:rwx /mnt
先设定目录 /mnt 的权限,再在目录下建立 fox 文件,这样 fox 文件就继承了 /mnt 目录的权限