一.Linux的文件信息
linux文件被保存在文件系统下,由以下属性组成: ls -l 之后看到的信息 从左到右可以看到文件的以下属性
- 各种类型
- 访问权限
- 链接数(跟 inode相关,ln 硬链接(会增加同一个inode对应的文件数目),ln -s软链接)
- 文件拥有者
- 文件拥有组
- 修改时间等
-
文件名
二. 本文重点介绍各种类型和访问权限举例:
- -rwxrwxrwx
- drwxrwxrwx
- srwxrwxrwx
- drwsrwsrwt
三. 最开始的bit表示文件类型:
文件类型 | 缩写 | 英文 | 其他名称 |
---|---|---|---|
普通文件 | - | Regular file | |
目录文件 | d | Directory file | |
块特殊文件 | b | Block special file | 块设备文件 |
字符设备文件 | c | Character special file | 字符设备文件 |
先进先出 | p | FIFO | named pipe,命名管道 |
套接字文件 | s | Socket | |
符号链接 | l | Symbolic link | 软链接 |
各文件类型简介
各文件类型的主要含义如下[1]
- 普通文件(Regular file)
- 普通意义上的文件,如数据文件、可执行文件等。 目录文件(Directory file)
- Linux中目录也是一种文件。目录文件包括了文件夹中所有文件的名字和在分区中的位置。目录文件的权限意义也较特殊。 块设备文件(Block special file)
- 一种提供带缓冲的固定大小单元读写的设备文件。如硬盘设备(/dev/sda)及硬盘分区(/dev/hda1)等。 字符设备文件(Character special file)
- 此种类型文件提供无缓存的变长单元读写。一个设备如果不是块设备,就是字符设备。 (named pipe或FIFO)
- 用于系统间通信的文件。 (Socket)
- 进程之前通过网络进行通信的文件。多数网络连接都是用Socket建立的。 (Symbolic link)
- 此种文件仅是一个链接。
四. 文件默认权限,特殊权限
文件权限默认是: 644 rw-r--r--
文件夹权限默认: rwxr-xr-x 表示 755
下面重点讲解特殊权限:
一般来说,使用过Linux的同学都知道,Linux文件的权限有rwx,所有者、所有组、其它用户的rwx权限是彼此独立的。为此,经常会听到如果某个web文件需要被修改的话,需要加上777的权限,这就是让所有用户可写。
但仔细一想,这样的权限未免有些想得比较天真,没有考滤特殊情况。例如/tmp目录默认权限是777,而且有些文件也是允许所有用户访问修改的,那么是不是任何一个用户都可以将这些删除呢?再如/etc/shadow保存的是用户密码文件,默认情况下它的权限是640,那么只有shadow的owner(root)才能修改它,按照常规理解,这是不可理解的,因为每个用户都可能修改密码,也就是会修改这个文件。
为了把这些情况解释清楚,需要引入Linux特殊文件权限的概念。Linux特殊文件权限有三个玩意:sticky bit、SGID、SUID,以下一一道来。
sticky bit
sticky bit只对目录有效,使目录下的文件,只有文件拥有者才能删除(如果他不属于owner,仅属于group或者other,就算他有w权限,也不能删除文件)。
加sticky bit的方法:
chmod o+t /tmp或者
chmod 1777 /tmp
查看是否加了sticky bit,用ls -l,可以看到有类似这样的权限:“-rwxrwxrwt”,t就代表已经加上了sticky bit,而且生效了,如果显示的是“-rwxrwxrwT”,说明也已经加上了sticky bit,但没有生效(因为本来other就没有写的权限)。
看看/tmp目录的权限,就是drwxrwxrwt吧
SGID(The Set GroupID )
加上SGID的文件,表示运行这个程序时,是临时以这个文件的拥有组的身份运行的;加上SGID的文件夹,表示在这个目录下创建的文件属于目录所有的组,而不是创建人所在的组,在这个目录下创建的目录继承本目录的SGID。
加SGID的方法:
chmod g+s /tmp或
chmod 2777 /tmp
查看是否加了SGID,用ls -l,可以看到类似这样的权限“drwxrwsrwx”,s就代表已经加上了SGID,而且生效,如果显示“drwxrwSrwx”,说明已经加上了SGID,但没有生效(因为本来group就没有执行的权限)。
SUID(The Set UserID)
SUID与SGID是一样的,惟一不同的是,运行时是以这个文件的拥有者身份来运行。
加SUID的方法:
chmod o+s /tmp或
chmod 4777 /tmp
同样的,加了SUID的文件权限有这类似这两种:“drwsrwxrwx”、“drwSrwxrwx”。
看看passwd命令的权限:ll /usr/bin/passwd,是"-rwsr-x-rx",终于知道为什么执行passwd时,可以修改/etc/shadow文件了吧。
参考文献:
1.
2.
3.