2. 管理用户及组文件安全
Linux操作系统采用了UNIX传统的方法,把全部的用户信息保存为普通的文本文件。用户可以通过对这些文件进行修改来管理用户和组。
(1) 用户账号文件——passwd
/etc/passwd文件是UNIX安全的关键文件之一。该文件用于用户登录时校验用户的登录名、加密的口令数据项、用户ID(UID)、默认的用户分组ID(GID)、用户信息、用户登录子目录以及登录后使用的shell。这个文件的每一行保存一个用户的资料,而用户资料的每一个数据项采用冒号“:”分隔。如下所示:
LOGNAME:PASSWORD:UID:GID:USERINFO:HOME:SHELL
每行的头两项是登录名和加密后的口令,后面的两个数是UID和GID,接着的一项是系统管理员想写入的有关该用户的任何信息,最后两项是两个路径名:一个是分配给用户的HOME目录,另一个是用户登录后将执行的shell(若为空格则默认为/bin/sh)。
下面是一个实际的系统用户的例子:
cracker:x:6018: 6018: cracker:/home/ cracker:/bin/bash
该用户的基本信息为:
1、登录名:cracker
2、加密的口令表示:x
3、UID:6018
4、GID:6018
5、用户信息:cracker
6、HOME目录:/home/ cracker
7、登录后执行的shell:/bin/bash
用户的登录名是用户用来登录的识别,由用户自行选定,主要由方便用户记忆或者具有一定含义的字符串组成。
所有用户的口令的存放都是加密的,通常采用的是不可逆的加密算法,比如DES(Data Encryption Standard,数据加密标准)。当用户在登录提示符处输入它们的口令时,输入的口令将由系统进行加密。再把加密后的数据与机器中用户的口令数据项进行比较。如果这两个加密数据匹配,就可以让这个用户进入系统。在/etc/passwd文件中,UID信息也很重要。系统使用UID而不是登录名区别用户。一般来说,用户的UID应当是独一无二的,其他用户不应当有相同的UID数值,只有UID等于0时可以例外。任何拥有0值UID的用户都具有根用户(系统管理员)访问权限,因此具备对系统的完全控制。通常,UID为0这个特殊值的用户的登录名是“root”。根据惯例,从0到99的UID保留用做系统用户的UID。如果在/etc/passwd文件中有两个不同的入口项有相同的UID,则这两个用户对文件具有相同的存取权限。
每一个用户都需要有地方保存专属于自己的配置文件。这需要让用户工作在自己定制的操作环境中,以免改变其他用户定制的操作环境,这个地方就叫做用户登录子目录。在这个子目录中,用户不仅可以保存自己的配置文件,还可以保存自己日常工作用到的各种文件。出于一致性的考虑,大多数站点都从/home开始安排用户登录子目录,并把每个用户的子目录命名为其上机使用的登录名。
当用户登录进入系统时,都有一个属于自己的操作环境。用户遇到的第一个程序叫做shell。在Linux系统里,大多数shell都是基于文本的。Linux操作系统带有好几种shell供用户选用。用户可以在/etc/shells文件中看到它们中的绝大多数。用户可以根据自己的喜好来选用不同的shell进行操作。按照最严格的定义,在上面所介绍的/etc/passwd文件中,每个用户的口令数据项中并没有定义需要运行某个特定的shell,其中列出的是这个用户上机后第一个运行的程序是哪个。综上所述,通过使用cat命令查看/etc/passwd文件(#cat /etc/passwd)。
(2) 用户影子文件——shadow
Linux使用不可逆的加密算法如DES来加密口令,由于加密算法是不可逆的,所以黑客从密文是得不到明文的。但/etc/passwd文件是全局可读的,加密的算法是公开的,恶意用户取得了/etc/passwd文件,便极有可能破解口令。而且,在计算机性能日益提高的今天,对账号文件进行字典攻击的成功率会越来越高,速度越来越快。因此,针对这种安全问题,Linux/UNIX广泛采用了“shadow(影子)文件”机制,将加密的口令转移到/etc/shadow文件里,该文件只为root超级用户可读,而同时/etc/passwd文件的密文域显示为一个x,从而最大限度地减少了密文泄露的机会。
/etc/shadow文件的每行是8个冒号分割的9个域,格式如下:
username: passwd: lastchg: min: max: warn: inactive: expire: flag
如下所示的是一个系统中实际影子文件的例子:
liyang:$1$ciY58zQZ$iKVHLSVZZgM75.lGp5Rmv.:14633:0:99999:7:::