首先简单介绍一下文件的属性:
使用ls -l 长列出
-rw-r–r–. 1 root root 1302 Jul 25 10:23 group
文件类型|owner权限group权限other权限|硬链接数|owner|group|文件大小(bytes)|mtime|文件名
文件类型:
– 普通文件
d 目录文件
l 连接文件
b 块设备文件
c 字符设备文件
p 管道文件
s 数据接口文件
-
普通文件(regular file ): 就是一般我们在进行存取的类型的文件,在由 ls -al 所显示出来的属性方面,第一个字符为 [ – ],例如 [-rwxrwxrwx ]。另外,依照文件的内容,又大略可以分为:
- 纯文本档(ASCII):这是Linux系统中最多的一种文件类型, 称为纯文本档是因为内容为我们人类可以直接读到的数据,例如数字、字母等等。 几乎只要我们可以用来做为设定的文件都属于这一种文件类型。 举例来说,你可以下达『 cat ~/.bashrc 』就可以看到该文件的内容。 (cat 是将一个文件内容读出来的指令)
- 二进制文件(binary):,我们的系统其实仅认识且可以执行二进制文件(binary file) 在Linux当中的可执行文件(scripts, 文字型批处理文件不算)就是这种格式的 举例来说,我们经常使用的 cat 命令就是一个binary file。
- 数据格式文件(data): 有些程序在运作的过程当中会读取某些特定格式的文件,那些特定格式的文件可以被称为数据文件 (data file)。举例来说,我们的Linux在使用者登入时,都会将登录的数据记录在 /var/log/wtmp那个文件内,该文件是一个data file,他能够透过last这个指令读出来! 但是使用cat时,会读出乱码 因为它是属于一种特殊格式的文件。
- 目录(directory): 就是目录 第一个属性为 [ d ],例如 [drwxrwxrwx]。
- 连接文件(link): 就是类似Windows系统底下的快捷方式! 第一个属性为 [ l ](英文L的小写),例如 [lrwxrwxrwx] ;
-
设备与装置文件(device): 与系统周边及储存等相关的一些文件, 通常都集中在/dev这个目录之下!通常又分为两种:
- 区块(block)设备档 :就是一些储存数据, 以提供系统随机存取的接口设备,举例来说,硬盘与软盘等就是! 你可以随机的在硬盘的不同区块读写,这种装置就是成组设备!你可以自行查一下/dev/sda看看, 会发现第一个属性为[ b ]!
- 字符(character)设备文件:亦即是一些串行端口的接口设备, 例如键盘、鼠标等等!这些设备的特色就是『一次性读取』的,不能够截断输出。 举例来说,你不可能让鼠标『跳到』另一个画面,而是『滑动』到另一个地方啊!第一个属性为 [ c ]。
- 数据接口文件(sockets): 既然被称为数据接口文件, 想当然,这种类型的文件通常被用在网络上的数据承接了。我们可以启动一个程序来监听客户端的要求, 而客户端就可以透过这个socket来进行数据的沟通了。第一个属性为 [ s ], 最常在/var/run这个目录中看到这种文件类型了。
- 数据输送文件(FIFO, pipe): FIFO也是一种特殊的文件类型,他主要的目的在解决多个程序同时存取一个文件所造成的错误问题。 FIFO是first-in-first-out的缩写。第一个属性为[p] 。
Linux 文件的基本属性就有九个,分别是 owner/group/others 组别的 read/write/execute 属性,
-rwxrwxrwx 这9个属性中3个位一组,其中可以使用数字来表示各个属性。
r 4
w 2
x 1
八进制数字
— 0
–x 1
-w- 2
-wx 3
r– 4
r-x 5
rw- 6
rwx 7
这里我们简单介绍一下,使用bc计算器进行数值进制间的转换:
下面我们介绍文件的属主和属组的修改。
文件的属性操作:
chown 设置文件的所有者。
chown : change owner
owner.group
owner:group
以上只有root才能修改文件的所有人
:group或 .group 文件的owner也可以使用chown修改文件的所属组(owner必须属于目标组)
-R 递归
–reference sourcefile tarfile
下面将house的属主改为liubei,属组改为shuguo。
接着我们使用chown .group filename和chgrp group filename 修改文件的属组。
接着我们加上 -R ,可以将目录下所有文件一并修改,可以看到owner:liubei,group:shuguo 变成owner:root,group:root,如下图。
chgrp 设置文件的所有组。
chgrp : change group
文件的owner可以修改文件的所属组(owner必须属于目标组)
-R 递归
查看house文件夹的下文件属组为root,如下。
然后递归修改属组:
对于任何一个文件拥有权限才能进行操作:
普通文件
r: 可以读取文件的内容
cat less more nano vim 执行脚本
w: 可以修改文件的内容
nano vim > >> tee gedit
x: 可以执行该文件
执行脚本
目录文件
r: 用户可以列出目录下有哪些文件(不能查看文件的详细信息)
w: 只有w无意义。
x: 用户可以进入该目录(如果知道文件名,且有相对应的文件权限 ,可以执行对应的操作)
rx: 用户可以进入目录,且可以长列出。
rw:等于只有r
wx: 能进入,能创建能删除,不能列出。故用户能否删除文件与文件自身权限无关。
rwx: 全部权限。
—:null
下面我们介绍权限的判断顺序,首先列一条判断准则:
先判断是否是文件的所有人,如果是,则执行所属人的权限后结束,如果不是所有人,则判断是否所属组(可以是主组也可以是辅助组),如果是,则执行所属组的权限后结束,如果不是则执行其他人的权限后结束。
下面创建一个文件house夹,owner:root,group:root,通过chmod o= house 此时文件的基本属性:drwxrwx—,此时我们切换到用户:su – liubei,试着进入house,权限被拒绝(Permission denied),这是因为我们既不是属主,也不再root组里,而且other权限是0(—)。
下面我们回到root下,将house的属主和属组均进行修改,分别改为owner:liubei ,group:shuguo,然后我们su – liubei 切换到用户刘备下,发现就能进去,这是因为owner:liubei拥有rwx权限,接着su – guanyu 切换到用户关羽下,此时关羽也能进入,进行rwx操作,接着su – caocao切换到用户:caocao下,此时连house目录也进不去,这是因为用户:caocao既不是属主,也不在属组,而other权限:—,所以曹操进不去。
首先我们看下shuguo组的成员:
现在属主刘备可以在house中创建、删除、查看文件,属组成员关羽、张飞,则可以进入和查看文件。
现在我们回到root下,将属主(刘备)的权限改为 — ,再切换的用户刘备下,此时虽然刘备在蜀国组找中,但是由于owner优先,所以无法访问house。
现在我们已经了解到文件属主和属组的修改,下面介绍文件属性修改及其修改工具chmod:
chmod :它的执行可以修改文件的权限和文件的属性。注意:只有所属人和root可以更改文件的权限。
方式一:字符方式
人物 动作 行为
ugoa +x= rwx
u owner
g group
o other
a ugo
chmod ugo+rwx
a=rwx
a=
u=….,g=…,o=…
X 当文件本身没有x权限时,则跳过,一般用于批量修改多个文件、目录的权限时,自动跳过没有执行权限的文件。
rwxrw-r–
111,110,100
764
r:100:4
w:010:2
x:001:1
新建文件和目录的默认权限:
umask值 可以用来保留在创建文件权限
新建FILE权限: 666-umask
如果所得结果某位存在执行(奇数)权限,则将其权限+1
新建DIR权限: 777-umask
非特权用户umask是 002
root的umask 是 022
umask: 查看
umask #: 设定
umask 002
umask –S 模式方式显示
umask –p 输出可被调用
我们平时创建一个文件,在root用户下,目录文件默认属性rwxr-xr-x(755),普通文件rw-r–r–(644),普通用户下,目录文件默认属性rwxrwxr-x(775),普通文件默认属性rw-rw-r–(664),原因就是umask的默认值。
普通用户:umask 002
目录文件 普通文件
最大权限 777 666
umask 002 002
默认权限 775 664
root用户:umask 022
目录文件 普通文件
最大权限 777 666
umask 022 022
默认权限 755 644
当我们需要大批量创建文件,但是现有文件权限已不能满足需要,此时我们需要设置umask的默认值。
用户设置: ~/.bashrc 对当前用户生效。
全局设置: /etc/bashrc 对所有用户生效。
对象 目录文件 普通文件
777 rwxrwxrwx 666 rw-rw-rw-
021 —-w—x 021 —-w—x
756 rwxr-xrw- 646 rw-r–rw-
当umask中全部是偶数时,可以直接减,当umask中包含奇数时,对于目录直接减,对于文件,在奇数所在的位减完后加一。
接下来我们介绍可执行文件的SUID,SGID,以及目录上的SGID,首先看下/etc/shadow文件,这个文件是用来存储用户的账户与密码等机密信息,默认情况没有权限的,除了root,其他用户没有权限去访问。
既然其他用户连查看的权利都没有,那么我们平时修改密码的时候怎么完成对此文件的写操作。是的,就是和SUID有关系。先看下 /bin/passwd :
SUID:当对一个可执行的二进制文件作用了SUID权限之后,任何拥有执行该文件权限的人,在执行的过程时都临时拥有该文件所属人的权限。就是因为这个,所以我们才有访问/etc/shadow的权利。
接着介绍SGID:
SGID:当对一个可执行的二进制文件作用了SGID权限之后,任何拥有执行该文件权限的人,在执行的过程时都临时拥有该文件所属组的权限。
现在我们将/bin/cat 考到/app目录下,然后在属组上加上SGID,然后在创建文件file ,属主和属组均为:liubei ,其他人无任何权限。所以关羽通过cat想要偷看不行,但是通过/app/cat则可以。
SGID:当对一个目录作用了SGID权限之后,任何对该目录有wx权限的用户在该目录下创建的文件及目录的所有属均为该目录的所有组。
STICKY:当对一个目录作用了sticky之后(只限制组用户,目录的owner不受影响),该目录下的文件仅其所属人才能删除。
首先以对/app/house目录作用sticky,属组设置为:shuguo,然后创建文件file,属主:guanyu,切换到用户:zhangfei,试着去删除file,提示不能。
以用户:caocao 试着去删除file,Operation not permitted,虽然拥有rwx权限,这就是sticky在搞事情。
原创文章,作者:007,如若转载,请注明出处:http://www.178linux.com/82750