UNIX文件系统控制文件和目录中的信息以何种方式存在磁盘及其他辅助介质上。它
控制每个用户可以访问何种信息及如何访问。因此它是增强UNIX系统安全性的最基本
的工具之一。
存储在UNIX文件系统中的信息被安排成目录和文件的树形结构。树形结构由在一个总
目录中的目录和子目录构成,总目录被称之为根目录(root)。每一个目录内可以包含
子目录和其他项目,如文件、指向其他文件系统的指针(符号连接)、表示设备的逻
辑名称(如/dev/tty)以及其他的类型(proc等).
文件
UNIX系统中每一个用户可访问的事物均可以被表示为文件系统中的一个“文件”——
包括进程和网络连接。每一个文件至少具有一个文件名,一个拥有者,以及访问权限
和其他的属性。这些属性被存放在文件系统的i节点(index node)上,这是基本文件
系统的条目。i节点存放除文件名外有关文件系统的任何东西。只有文件名存放在目录
内,并通过指针与i节点联系。
目录
目录是文件系统中的一个专门的条目。一个目录实际上是文件名和i节点的列表。文件
名可以由任意字符的字符串组成,但不能包含/和null字符。
与文件名相联系的是数字指针,它实际上是一个i节点在磁盘上的索引。一个i节点包
含文件系统中一个文件条目的信息。
目录中只包含文件名和i节点索引数,不存放任何需要保护的信息,其作用类似一个
文件名与i节点之间的映射关系的简单的关系数据库。多个文件可以指向同一个i节点。
同样多个目录也可以指向同一个i节点。
rm不一定能真正删除一个文件,当i节点的连接值为0时才真正删除文件。
每一个目录都包含有. 和 …两个目录。
i节点
UNIX系统中应用一个被称之为i节点(inode)的结构来存储文件系统中的各个级成部分
的管理信息。i节点驻留在硬盘上,没有自己的名字,但具有索引数,用以指向它们在
i节点数组中的位置。
每个i节点通常包括:
. 该数据条目的内容在磁盘上的位置
. 该数据条目的类型(文件、目录、符号连接等)
. 该数据条目的字节数目
. 该节点最后一次被修改的时间(ctime)
. 该文件最后一次被修改的时间(mtime)
. 该文件最后一次被访问的时间(atime)
. 该文件对应的文件名数目(连接数)
.UID
.GID
. MODEbit
当前目录和路径
绝对路径 VS 相对路径
使用ls命令
ls-a
ls -lF(Total行指出了目录中全部文件所占据的KB数。)
ls -aF (*/ = @)
ls -l(mtime)
ls -lu(atime)
ls -lc(ctime)
文件授权 (ls -l输出)
*** 可执行位仅对于可执行文件有意义。
LINUX中必须即拥有执行权限也拥有读权限时才能够执行相个script命令。
使用chmod命令
chmod[Rfh] [agou] [±=] [rwxXstugo] filelist
权限
rread
wwrite
xexecute(or access for directories)
X 仅当文件是一个目录或一个已经设备了某些执行位的文件时,设置执行权限
s setuser or group id
t saveprogram text on swap device(Sticky)
u 从拥有者的授权中删除访问权
g 从用户组的授权中删除访问权
g 从其他用户的授权中删除访问权
8进制的文件属性
4000SUID
2000SGID
1000sticky
0400-r--------
0200–w-------
0100—x------
0040----r-----
0020-----w----
0010------x—
0004-------r–
0002--------w-
0001---------x
umask命令
umask功能的接口是在sh,ksh,csh shell程序内的一个内在的命令!?
默认文件建立模式: 0666
计算umask值的一个简便方法:在umask中,2屏蔽写准许位,7屏蔽所有权限。
使用目录权限
UNIX将目录的内容存放在普通的文件中。但目录的权限与普通文件有所区别。
r 读可用opendir() readdir()或ls找出那个文件在这个目录内
w 写可以新建、删除或重命名在这个目录内的文件或子目录
x 执行可以stat这个目录的内容(如确定目录的所有者,和在目录中的文件的长
度). 仅在设置此位时才能使此目录成为当前的目录或打开在该目录(或
它的子目录)内的文件。
常用的目录权限
0755 //usr/bin 任何人可以看到目录的内容,但只有拥有者和root才能改变它
1777 /tmp/var/mail 任何用户可以在该目录内建立文件,但不能删除其他用户的
文件
0700$HOME 用户可以访问自己的主目录的内容,但其他用户则不可。
删除不恰当的文件
$rm./-foo
$rm --foo
$rm -i*
SUID
passwdsu
SUID/SGID/sticky
—s------SUID 执行此SUID的进程的有效UID被设置为程序拥有者的UID
------s—SGID
---------tsticky(一般只用于目录)
—S------SUID 设置SUID但不设置相应位的执行位
*** 不要写SUID的Shell Script, 必要时改用perl(taintperl)
找到所有的SUID和SGID文件
find / (-perm -004000 -o -perm -002000 ) -type f -print
OR (Except for NFS )
find / (-local -o -prune ) \
(-perm-004000 -o -perm -002000 ) -type f -print
在被mount的文件系统中关闭SUID和SGID
mount -onosuid … (一般用于NFS)
设备文件
设备文件是导致UNIX流行和灵活的原因之一。
/dev 目录
/dev/null
/dev/kmem伪设备
/dev/MAKEDEV
大多数设备文件应不允许普通用户读写.
非法的设备文件
不在/dev目录下,可能为非法侵入者提供可利用入口:
find / (-type c -o -type b ) -exec ls -l {} ;
find / !-type f -a ! -type d -exec ls {} ;
(包含符号连接,PIPE等)
chown 改变文件所有者
chgrp 改变文件的属组