一. 文件权限
1. 文件属性的查看
ls -l file #查看文件file属性
-rw-r--r--. 1 root root 0 Dec 31 09:55 file
1 2 3 4 5 6 7 8
1.文件类型
-:普通文件
d:目录
c:字符设备
s:套接文件
p:管道
b:块设备
2.rw-r--r--:文件读写权限
rw-r--r--
1 2 3
1 拥有者
2 所属组
3 其他人
3.
对文件:文件内容被系统记录的次数
对目录:二级子目录的个数
4.文件的拥有者
5.文件的所属组
6.文件的内容大小
7.文件最后一次被修改的时间
8.文件的名字
例:
2.文件拥有者和所属组的改变
chown username file/dir
chgrp groupname file/dir
chown username.groupname file/dir
chown -R username dir (递归)
chgrp -R groupname dir (递归)
例:
3. 文件的普通权限
u #用户
g #组
o #其他人
r
对文件:可以查看文件的字符(内容)
对目录:可以查看目录中文件/目录的信息
w
对文件:可以更改文件内的字符
对目录:在目录中增删改查
x
对文件:可以运行文件中记录的程序动作
对目录:可以进入目录
4. 系统默认权限的设定
系统设定新建文件或目录会去掉一些权限
设定方式:
umask(普通用户和超级用户) #查看系统减掉的权限
umask xxx #修改该系统减掉xxx,此设定是临时设定,只在当前shell生效
永久设定:
vim /etc/bashrc
70 if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
71 umask 002 #普通用户的umask
72 else
73 umask 022 #超级用户的umask
74 fi
vim /etc/profile
59 if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
60 umask 002
61 else
62 umask 022
63 fi
以上两个文件的umask值必须保持一致
source /etc/bashrc
source /etc/profile
让系统重新加载配置文件,让设定立即生效
例:
5. 文件的访问控制(acl列表)
ps:acl只对目录下新建的目录生效,对已经建立的目录是无效的
(1). acl的定义
acl=access control #指定特殊的用户对特殊的文件有特殊的权限
ls -dl /home/kiosk/
#’+‘标示开启了acl访问控制列表
#注意:当文件/目录有权限列表时,ls -l能看到的权限是假的
getfacl /home/kiosk
例:
(2).设置acl列表
setfacl -m u:student:rwx file #设置开启用户acl列表
#-m 设定
#u 用户
#g 组
getfacl file #查看详细file信息
例:
(3). 手动改变u g o 的读 写 执行 的权限
chmod u-w,g+x,o+w file #给u减去写的权限,给g加执行的权限,给o加写的权限
例:
(4). 删除acl列表中的用户或组和关闭acl列表
setfacl -x u:student file #删除列表中的用户或组
setfacl -b file #关闭列表
setfacl -m m:rw- file #mask用来标示实际能够赋予用户最大权限
#可能:当你用chmod改变文件普通权限的时候可能会破坏acl mask
例:
6. acl默认权限
当我们需要普通用户对属于root的某个目录拥有写的权限时,并且目录中新建的子目录对普通用户也生效,就要设定acl默认权限
ps:默认权限只对目录中新建的目录或文件生效,对已经建立的目录和文件无效,对目录本身也无效
7. 特殊权限位
(1). suid ##冒险位
设定方法:
chmod u+s touch所在的目录 #suid=4
chmod 4755 touch所在的目录
只针对二进制可执行文件
文件内记录的程序产生的进程的拥有者为文件的拥有者,和进程的发起人没关系
例:
chmod u+s /usr/bin/touch
=chmod 4755 /usr/bin/touch
(2). sgid ##强制位
设定方式:
chmod g+s 文件/目录 #sgid=2
chmod 2xxx 文件/目录
a: 对文件:只针对二进制可执行文件,
任何人运行二进制文件程序时程序产生的进程的所属组都是文件的所有组
和程序发起人组的身份无关
例:
chmod g+s /usr/bin/touch
=chmod 2755 /usr/bin/touch
b: 对目录:当目录有sgid权限后,目录中新建的所有文件的所有组
都自动归属到目录的所有组之中,和文件建立者所在的组无关
例:
chmod g+s /chason
=chmod 2755 /chason
(3). sticky ##粘制位
t权限:
只针对于目录,当一个目录上有t权限,那么目录中的文件只能被文件的拥有者删除设定方式:
chmod o+t 目录 #t=1
chmod 1777 目录
例:
chmod o+t /chason
=chmod 1777 /chason