目录在文件类型上用d标识
用“/”分隔目录层
Linux操作系统都有且仅有一个起始目录,我们用一个单独的“/”来表示,称其为根目录
对每一个shell和操作环境,都有一个当前工作目录
[root@bogon home]# ls -ld test
drwxr-xr-x 2 root root 4096 Jun 9 05:02 test
在每一个目录下面都有一个.文件和一个..文件
.文件是对当前目录的一个硬链接
..文件是对上级目录的一个硬链接
[root@bogon test]# ll -a
total 16
drwxr-xr-x 2 root root 4096 Jun 9 05:02 .
drwxr-xr-x 4 root root 4096 Jun 9 05:04 ..
目录与权限
目录也是一种文件
目录上的读写执行权限与普通文件有所不同:
1) 读:用户可以读取目录内的文件
2) 写:单独使用没有作用,与执行权限链接可以在目录内添加与删除文件
3) 执行:用户可以进入目录,调用目录内的资料,修改可见文件的内容
除了读写执行权限以外,ext2文件系统还支持强制位(setuid和setgid)与冒险位(sticky)的特表权限。
针对u、g、o分别有 set uid、set gid和sticky
强制位与冒险位添加在执行权限的位置上。如果该位置上已有执行权限。则强制位与冒险位以小写字母的方式表示,否则,以大写字母表示。
set uid与set gid在u和g的x位置上各采用一个s,sticky使用一个t
默认情况下,用户建立的文件属于用户当前所在的组。
目录上设置了set gid,表示在此目录中,任何人建立的文件,都会属于目录所属的组。
示例:在未设置gid的情况下
[root@bogon home]# mkdir test
[root@bogon home]# ls -ld test
drwxr-xr-x 2 root root 4096 Jun 9 06:05 test
[root@bogon home]# chgrp jojo test
[root@bogon home]# ls -ld test
drwxr-xr-x 2 root jojo 4096 Jun 9 06:05 test
[root@bogon home]# echo "hello world" > test/test1.txt
[root@bogon home]# ls -ld test/test1.txt
-rw-r--r-- 1 root root 12 Jun 9 06:08 test/test1.txt
示例:设置test目录的gid:
[root@bogon home]# chmod g+s test
[root@bogon home]# ls -ld test
drwxr-sr-x 2 root jojo 4096 Jun 9 06:10 test
示例:在设置gid的目录下创建文件
[root@bogon test]# ls -l
total 8
-rw-r--r-- 1 root root 12 Jun 9 06:08 test1.txt
[root@bogon test]# mkdir test2.txt
[root@bogon test]# ll
total 16
-rw-r--r-- 1 root root 12 Jun 9 06:08 test1.txt
drwxr-sr-x 2 root jojo 4096 Jun 9 06:18 test2.txt
默认情况下,如果一个目录上有w和x权限,则任何人可以在此目录中建立与删除文件。
一旦目录上设置了冒险位,则表示在此目录中,只有文件的拥有者、目录拥有者与系统管理员可以删除文件。
[root@bogon /]# ls -ld tmp
drwxrwxrwt 7 root root 4096 Jun 9 05:53 tmp
设置冒险位:
[root@bogon home]# ls -ld test
drwxr-sr-x 3 root jojo 4096 Jun 9 06:18 test
[root@bogon home]# chmod o+t test
[root@bogon home]# ls -ld test
drwxr-sr-t 3 root jojo 4096 Jun 9 06:18 test
强制位对文件的作用
在可执行文件上,用户可以添加set uid和set gid
默认情况下,用户执行一个指令,会以该用户的身份来运行程序。(文件设置了uid,则任何人执行该文件都会以所属的user执行)
指令文件上的强制位,可以让用户执行的指令,以指令文件的拥有者或所属组的身份运行进程
Set uid 示例:
[root@bogon home]# which ping
/bin/ping
[root@bogon home]# ls -l /bin/ping
-rwsr-xr-x 1 root root 35864 Mar 15 2007 /bin/ping
可以看到,ping指令是设置了uid的。切换到另外一个用户执行ping命令,发现是可以执行该命令的。然后我们去除掉ping的set uid。
[root@bogon home]# chmod u-s /bin/ping
[root@bogon home]# ls -l /bin/ping
-rwxr-xr-x 1 root root 35864 Mar 15 2007 /bin/ping
如果我们再切换到其他用户执行ping命令,就会报如下错误:
ping: icmp open socket: Operation not permitted
原来icmp包只能给root用户调用,因此只有设置了set uid之后,其他用户执行该执行就相当于root用户执行该指令。再次设置uid之后,其他用户也可以执行了:
[root@bogon home]# chmod u+s /bin/ping
[root@bogon home]# su jojo
[jojo@bogon home]$ ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.286 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.103 ms
另外还有很多其他指令是设置了uid的,例如passwd:
[jojo@bogon home]$ which passwd
/usr/bin/passwd
[jojo@bogon home]$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 22984 Jan 7 2007 /usr/bin/passwd
用户可以使用chmod指令来为文件设置强制位与冒险位。
l set uid:chmod u+x 文件名
l set gid:chmod g+x 文件名
l sticky:chmod o+t 文件名
强制位与冒险位也可以通过一个数字加和,放在读写执行的三位数前来指定
l 4 (set uid)
l 2 (set gid)
l 1 (sticky)
Ps:
Set gid 可以在目录上设定,也可以在文件上设定
Set uid 只能在文件上设定
Sticky 只能在目录上设定
每个用户建立文件时,此文件都会有默认权限,默认权限的值由环境中的umask值来确定。
用户可以自主改动umask,并在改动后的文件上得到体现。
一般用户的默认umask值为002,系统用户的默认umask位022。
[root@bogon home]# umask
0022
[root@bogon home]# su jojo
[jojo@bogon home]$ umask
0002
理想情况下,在Linux系统中创建文件或目录的默认权限如下:
文件:rw_rw_rw_
目录:rwxrwxrwx
[root@bogon home]# mkdir test
[root@bogon home]# ls -ld test
drwxr-xr-x 2 root root 4096 Jun 13 21:37 test
上面是用root用户建立一个test目录,但是我们看到他的权限是rwx_r-x_r-x,而不是rwxrwxrwx,这是为什么呢?
因为root用户的默认掩码为:022,文件的真实权限是:(理想权限-文件权限掩码)即:(7-0,7-2,7-2)
修改用户的umask,并新建目录:
[root@bogon home]# umask 003
[root@bogon home]# mkdir test
[root@bogon home]# ls -ld test
drwxrwxr-- 2 root root 4096 Jun 13 21:55 test
其他用户修改umask,并创建目录:
[jojo@bogon ~]$ umask 000
[jojo@bogon ~]$ mkdir test
[jojo@bogon ~]$ ls -ld test
drwxrwxrwx 2 jojo jojo 4096 Jun 13 21:57 test
1) /bin:存储常用用户指令
2) /boot:存储核心、模块映像等启动文件
3) /dev:存储设备文件
4) /etc:存储系统、服务的配置目录与文件
5) /home:存放个人主目录
6) /lib:存放库文件,诸如核心模块、驱动
7) /lost+found:存储fsck用的孤儿文件
8) /mnt:系统加载文件系统时用的常用挂载点
9) /opt:第三方工具使用的安装目录
10) /proc:虚拟文件系统,包含系统通讯等资料(在内存中)
11) /root:root用户的主目录
12) /sbin:存储系统管理用指令
13) /tmp:临时文件的暂存点
14) /usr:存放于用户直接相关的文件与目录
15) /var:存储在系统运行中可能会更改的数据