权限
Linux为了保证安全,为每个文件设置了r、w、x这3种代表不同操作的权限,而对文件和目录,这三种权限的表现方式略有不同。
对于文件来说,
r代表可读,可以使用类似cat等命令查看命令内容;
w代表可写,可以编辑或删除;
x代表可执行,可以命令提示符下当做命令提交给内核运行;
而对于目录来说,
r表示可以对此目录ls以列出内部所有文件;
w表示可以在此目录创建文件;
x则表示可以使用cd切换进此目录,也可以使用ls -l查看内部文件的详细信息;
这些3种权限合为一组,可以用8进制的数字表示出来:
0 000 — 无权限
1 001 –x 执行
2 010 -w- 写
3 011 -wx 写和执行
4 100 r– 只读
5 101 r-x 读和执行
6 110 rw- 读写
7 111 rwx 读写执行
因此,下面这几组三位数字就代表了右边对应的权限:
755: rwxr-xr-x
640: rw-r—–
660: rw-rw—-
775: rwxrwxr-x
有了这些数字,就使得修改权限等操作方便了许多。
用户和组
有了权限之后,就要分配给不同的人来加以区分。而在Linux中,权限的主体分为用户和组(或者叫用户组)两种。用户自然顾名思义,而组则是一个或者多个用户的集合,共享着同样的权限。每个用户拥有自己独立的UID,而用户相关的信息会被储存在etc/passwd
中。而相对应的,每个组有唯一的GID,信息则储存在etc/group
之下。
用户的类别被分为管理员和用户两种,其中用户又被分为系统用户和一般用户。管理员的UID固定为0,是系统的管理者,拥有各种操作的所有权限。而用户的UID可在1到65535中取值,在这其中,系统用户的UID为1到499,被操作系统预留用于执行各种命令和程序,而500到60000则是一般用户,一般可登陆的非管理员用户就是这种用户。
与之相对的,组也有类似的结构,总体分为管理员组和用户组两种,其中用户组又分为系统组和一般组。创建用户时,如果没有为其执行其指定所属的组,系统会自动为其创建一个与用户名同名的组,这个组被叫做私有组或者基本组,而漠然组以外的其他组则被称为附加组。
当我们访问时/etc/passwd
时,就能看到用户的基本信息了,例如:
seewang:x:1002:1002::/home/seewang:/bin/bash
在这个文件中,每一行代表一个用户,而不同信息的值则用分号隔开。每一列分别是:
- account
- passwd
- UID
- GID
- comment
- HOME_DIR
- SHELL
而在储存组信息的etc/group
中的内容也与之相似。
影子口令
这些用户的基本信息,在很多情况都会用到,比如把相应的UID转化为用户名,这就要求etc/passwd
能够被访问,而passwd中又同时储存了用户的密码,这就带来了许多安全问题。为了解决这个问题,现在大多数的Linux系统都采用了影子口令(shadow)来保证用户的密码安全。在启用了shadow之后,用户和组的密码将不再储存在原来的位置,而是在被加密之后,储存在etc/shadow
和etc/gshadow
之下。在上面的例子中,本应是密码的第二项中只有一个x,这就是启用shadow后的结果。
加密方法
为了保护信息,加密是一种非常必要的手段。一般加密的方法分为下面几类:
对称加密:加密和解密使用同一个密码
公钥加密:每个密码成对出现,一个为私钥(secret key),一个为公钥(public key)
单向加密(散列加密):提取数据特征码进行加密
其中单项加密就是用来加密密码的方法。这种方法具有雪崩效应的特性,即在使用这种方法时,即使数据仅有少许不同,也会引发雪崩效应,使加密的结果完全不同。同时,这类方法又能定长输出,即而结果会以固定长度被输出。比较著名和常用的算法有:
MD5: Message Digest 128位定长输出
SHA1: Secure Hash Algorithm 160位定长输出