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:::
我们对最后一个用户的信息进行解释,该信息表明了如下含义:
1、用户登录名:liyang
2、用户加密的口令:liyang后紧跟的一段乱码信息$1$ciY58zQZ$iKVHLSVZZgM75.lGp5Rmv.
3、从1970年1月1日起到上次修改口令所经过的天数天数为:14633天
4、需要多少天才能修改这个命令:0天
5、该口令永不过期:采用99999表示
6、要在口令失效前7天通知用户,发出警告
7、禁止登录前用户名还有效的天数未定义,以“:”表示
8、用户被禁止登录的时间未定义,以“:”表示
9、保留域,未使用,以“:”表示
(3) 组账号文件——group
/etc/passwd文件中包含着每个用户默认的分组ID(GID)。在/etc/group文件中,这个GID被映射到该用户分组的名称以及同一分组中的其他成员去。
/etc/group文件含有关于小组的信息,/etc/passwd中的每个GID在文件中应当有相应的入口项,入口项中列出了小组名和小组中的用户,这样可方便地了解每个小组的用户,否则必须根据GID在/etc/passwd文件中从头至尾地寻找同组用户,这提供了一个比较快捷的寻找途径。/etc/group文件对小组的许可权限的控制并不是必要的,因为系统用来自于/etc/passwd文件的UID、GID来决定文件存取权限,即使/etc/group文件不存在于系统中,具有相同的GID用户也可以小组的存取许可权限共享文件。小组就像登录用户一样可以有口令。如果/etc/group文件入口项的第二个域为非空(通常用x表示),则将被认为是加密口令。/etc/group文件中每一行的内容如下所示:
1、用户分组名
2、加过密的用户分组口令
3、用户分组ID号(GID)
4、以逗号分隔的成员用户清单
如下是系统中一个具体的/etc/group文件中记录的例子:
adm:x:4:root,adm,daemon
以上面文件第四行为例子,它说明在系统存在一个adm的用户组,它的信息如下:
1、用户分组名为adm
2、用户组口令已经加密,用“x”表示
3、GID为4
4、同组的成员用户有:root,adm,daemon
(4) 组账号文件——gshadow
如同用户账号文件的作用一样,组账号文件也是为了加强组口令的安全性,防止黑客对其实行的暴力攻击,而采用的一种将组口令与组的其他信息相分离的安全机制。其格式如下所示内容:
1、用户组名
2、加密的组口令
3、组成员列表
下面是系统中一个具体的/etc/gshadow文件的例子:
mail:::mail,postfix,exim
以组mail为例,其加密后的组口令被隐藏,其组成员包括mail、postfix和exim。其他的以“::”结尾的组表明没有组成员,但是用户可以自行添加。
总结
对于Linux系统的全方位保护,我们已经介绍了文件系统保护、进程管理、以及本文的用户管理。除了已经介绍过的这三项,Linux日志管理也是必不可缺的一环,这将在下篇文章中进行介绍。