概述:
文件的属性(通过ls -l看到的),文件所有人所有组的管理(属主和属组),文件普通权限(读写执行),系统默认权限设定(umask的设定),文件的特殊权限(冒险位,强制位,黏着位)。
1.文件的属性
通过ls -l filename 可以显示filename文件的属性
1) 2) 3) 4) 5) 6) 7) 8)
1).文件类型
- ##普通文件
d ##目录
c ##字符设备
s ##套接字设备
p ##管道
b ##快设备
l ##连接
2).文件读写权限
rw- | r-- | r--
* $ @
*所有人的权限
$所有组权限
@其他人的权限
3).文件内容被系统记录的次数
这里可能不太好理解,什么叫被系统记录次数呢,我们上面这个文件的被记录次数时‘1’,代表被记录一次,那么怎样让这个值增加呢?
这里这个hello文件的被记录数是1
通过ln命令后,hello文件的文件被记录数是2,那个ppp就是hello文件的硬链接,每给hello增加一个硬链接文件,这个文件的被记录数就会增加1。ln -s src des 是增加软连接,但是这个命令并不会增加文件的被记录数。
使用软链接后
,文件被记录数并没有增加。
4).文件所有人
5).文件所有组
6).文件内容的大小
文件内容的大小其实可理解为文件内容的字节数,通过wc -c命令证实了这个结论。
下面我们换一个文件类型看下这个6字段,查看下目录文件的第6个字段。
test_dir是一个新建的目录,他的里面只有'.'和‘..’两个文件,这个目录的第六个字段为什么是6呢?
现在让我们来讨论下linux的目录结构(以后会讨论关于文件系统的问题)
目录中放置的东西是inode号与它文件名的对应关系
就如这张图所描述,其实目录也是个文件,他也有自己的内容,它的内容就如上图,每在目录下创建一个文件,就相当于在目录下写了信息这就是这第六个字段对于目录的作用,其实与文件是一个意思。
7).文件最后一次被修改的时间
相当于mtime
8).文件名字
2.文件所有人所有组的管理
chown username file|dir ##更改文件的所有人
chown username:groupname file|dir ##更改所有人所有组
chown -R username dir ##递归更改目录本身及里面所有人
chgrp -R uesrname dir ##更改目录本身及里面所有内容的所有组
tips:
(1)修改所有人及所有组时,分割符只能用 “:”或者“.”
(2)也可以使用chown uid:gid file|dir 这种形式
3.文件普通权限
rw-|r--|r--
u g o
u:文件所有人可以读写
g:文件组成员可以读
o:其他成员可以读
1).r
对文件:可以查看文件中的内容
对目录:可以查看它里面的文件(通过ls)但不可以进入(t通过cd)。
2).w
对文件:可以查看修改文件的内容
对目录:可以在目录中添加删除文件
3).x
对文件:可以执行这个文件内记录的程序动作
对目录:可以进入目录
对于以上的权限有一点说明
目录:一般不会只给读或者写权限,一定要给他执行权限,用一个形象的比喻,目录只给都不给执行,就是透过窗户看,只给写,不给执行权限,就是不让进去房间,让你拿东西,这都是没有什么意义的。
4).修改文件
chmod [-R] [u|g|o] [+|-|=] [r|w|x] file|dir
5).数字方式修改权限
chmod 777 file
7=rwx
6=rw
5=r-w
4=r--
3=-wx
2=-w-
1=--x
0=---
4.系统默认权限设定
从系统存在来说,开放权利越大,系统存在意义越高
从系统安全角度说,开放权利越少,系统安全性越高
所以系统新建文件或会去掉一些权限
设定方式
umask
我系统默认的权限掩码是0022,意思就是新建的文件会去掉它所有组合其他用户的写权限。
用umask 077可以设定保留权限为0077,但是只是在当前shell中。
如果你想永远有效需要更改/etc/profile和/etc/bashrc配置文件,其中/etc/profile文件为与内核有关,而/etc/bashrc为与shell有关,两个文件中umask一定要一致。
5.特殊权限
1.suid
只针对二进制可执行文件,执行这个文件时进程的所有人为这个文件的所有人,与进程发起人没有关系
用chmod设定
chmod u+s file
suid=4 ---100
chmod 4xxx file ##这样也可以设置suid
suid还叫做冒险位
2.sgid
对文件:只针对二进制可执行文件,任何二进制可执行文件运行的时候,进程的所有组与进程的发起者没有关系,都是这个文件创建者的所有组。
对目录:当目录有sgid权限 ,目录中新建的文件的所有组都自动归档到目录所有组中,和文件的真实创建者没有关系。
设定方式:chmod g+s file|dir
sgid=2 ---010
sgid还叫做强制位
3.sticky
只针对目录,当一个目录上有t权限,那么目录中的文件只能被所有人删除
设定方式
chmod o+t dir
t=1 ---001
最后的最后来练习一下
1.新建用户组,shengchan,caiwu,jishu
2.新建用户要求如下:
* tom 是shengchan组的附加用户
* harry 是caiwu组的附加用户
* leo 是jishu组的附加用户
* 新建admin用户,此用户不属于以上提到的三个部门
3.新建目录要求如下:
* /pub目录为公共存储目录对所有用户可以读,写,执行,但用户只能删除属于自己的文件
* /sc 目录为生产部存储目录只能对生产部人员可以写入,
并且生产部人员所建立的文件都自动归属到shengchan组中
* /cw 目录为财务部存储目录只能对财务部人员可以写入,
并且财务部人员所建立的文件都自动归属到caiwu组中
* admin用户能用touch工具在/sc目录和/cw目录中任意建立文件,但不能删除文件。
接下来这一问就有两种解决方法了
第一种是通过sudo来讲root的权限下放,下图就是过程
通过visudo把这行添加进去,再通过sudo就可以在sc下随意创建文件了,但是不可以删除文件
第二种方法是将/bin/touch文件复制到admiin的家目录下的bin目录,再给这个touch设置冒险位,以后每次admin执行的touch其实是/home/admin/bin/touch,而不是/bin/touch,这样不但完成了要求,而且也防止其他用户也拥有touch的root权限。
4.设定普通用户新建文件权限为"r--r-----"
将/etc/profile和/etc/bashrc下的umask值修改为226即可
5.设定admin用户可以通过sudo自由建立新用户