Linux系统的密码系统是怎样操作的呢?现在我们来研究一个文件——/etc/passwd。
1.passwd文件
passwd文件存放在/etc目录下。这个文件存放着所有用户帐号的信息,包括用户名和密码,因此,它对系统来说是至关重要的。可以使用如下命令查看该文件:
# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/var/spool/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
apache:x:48:48:Apache:/var/www:/bin/false
nscd:x:28:28:NSCD Daemon:/:/bin/false
mailnull:x:47:47::/var/spool/mqueue:/dev/null
squid:x:23:23::/var/spool/squid:/dev/null
rpm:x:37:37::/var/lib/rpm:/bin/bash
named:x:25:25:Named:/var/named:/bin/false
ident:x:98:98:pident user:/:/sbin/nologin
rpc:x:32:32:Portmapper RPC user:/:/bin/false
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
radvd:x:75:75:radvd user:/:/bin/false
xfs:x:43:43:X Font Server:/etc/X11/fs:/bin/false
gdm:x:42:42::/var/gdm:/sbin/nologin
pcap:x:77:77::/var/arpwatch:/bin/nologin
xx:x:500:500::/home/xx:/bin/bash
可以看到root、bin等帐号。
Passwd文件由许多条记录组成,每条记录占一行,记录了一个用户帐号的所有信息。每条记录由7个字段组成,字段间用冒号“:”隔开,其格式如下:
username:password:User ID:Group ID:comment:home directory:shell
字段含义:
- username 用户名
它唯一地标识了一个用户帐号,用户在登录时使用的就是它。
- password 该帐号的口令
passwd文件中存放的密码是经过加密处理的。Linux的加密算法很严密,其中的口令几乎是不可能被破解的。盗用帐号的人一般都借助专门的黑客程序,构造出无数个密码,然后使用同样的加密算法将其加密,再和本字段进行比较,如果相同的话,就代表构造出的口令是正确的。因此,建议不要使用生日、常用单词等作为口令,它们在黑客程序面前几乎是不堪一击的。特别是对那些直接连入较大网络的系统来说,系统安全性显得尤为重要。
- User ID 用户识别码,简称UID。
Linux系统内部使用UID来标识用户,而不是用户名。UID是一个整数,用户的UID互不相同。
- Group ID 用户组识别码,简称GID。
不同的用户可以属于同一个用户组,享有该用户组共有的权限。与UID类似,GID唯一地标识了一个用户组。
- comment 这是给用户帐号做的注解
它一般是用户真实姓名、电话号码、住址等,当然也可以是空的。
- home directory 主目录
这个目录属于该帐号,当用户登录后,它就会被置于此目录中,就像回到家一样。一般来说,root帐号的主目录是/root,其他帐号的家目录都在/home目录下,并且和用户名同名。
- login command 用户登录后执行的命令
一般来说,这个命令将启动一个shell程序。例如,用bbs帐号登录后,会直接进入bbs系统,这是因为bbs帐号的login command指向的是bbs程序,等系统登录到bbs时就自动运行这些命令。
系统帐号
系统中还有一些默认的帐号,如daemon、bin等。这些帐号有着特殊的用途,一般用于进行系统管理。这些帐号的口令大部分用(x)号表示,代表它们不能在登录时使用。
2.Shadow安全密码
为了增强系统的安全性,Linux系统还可以为用户提供MD5和Shadow安全密码服务。如果在安装 Linux 时在相关配置的选项上选中了MD5和Shadow服务,那么将看到的/etc/passwd文件里的passwd项上无论是什么用户,都是一个“x”,这就表示这些用户都登录不了;系统其实是把真正的密码数据放在了/etc/shadow文件里。
#cat /etc/shadow
root:$1$錕Q蟚蒂O$Akf2arpUQmqucxJcvivIt.:11753:0:99999:7:::
bin:*:11753:0:99999:7:::
daemon:*:11753:0:99999:7:::
adm:*:11753:0:99999:7:::
lp:*:11753:0:99999:7:::
sync:*:11753:0:99999:7:::
shutdown:*:11753:0:99999:7:::
halt:*:11753:0:99999:7:::
mail:*:11753:0:99999:7:::
news:*:11753:0:99999:7:::
uucp:*:11753:0:99999:7:::
operator:*:11753:0:99999:7:::
games:*:11753:0:99999:7:::
gopher:*:11753:0:99999:7:::
ftp:*:11753:0:99999:7:::
nobody:*:11753:0:99999:7:::
ntp:!!:11753:0:99999:7:::
apache:!!:11753:0:99999:7:::
nscd:!!:11753:0:99999:7:::
mailnull:!!:11753:0:99999:7:::
squid:!!:11753:0:99999:7:::
rpm:!!:11753:0:99999:7:::
named:!!:11753:0:99999:7:::
ident:!!:11753:0:99999:7:::
rpc:!!:11753:0:99999:7:::
rpcuser:!!:11753:0:99999:7:::
nfsnobody:!!:11753:0:99999:7:::
postgres:!!:11753:0:99999:7:::
radvd:!!:11753:0:99999:7:::
xfs:!!:11753:0:99999:7:::
gdm:!!:11753:0:99999:7:::
pcap:!!:11753:0:99999:7:::
xx:$1$菪描hAFM$.bGq/0hj6fYHk07Jpzq4Z.:11753:0:99999:7:::
#ls -l /etc/passwd
-rw-r--r-- 1 root root 1399 Mar 7 09:15 /etc/passwd
#ls -l /etc/shadow
-r-------- 1 root root 965 Mar 7 09:15 /etc/shadow
/etc/shadow文件只能以root身份来浏览。为什么要这样做呢,原因其实很简单,在系统设计的时候,/etc/passwd文件是任何人都可以读的,那么那些心有所图的人就可以利用这个文件,使用各种各样的工具按照Linux密码加密的方法把用户甚至root的密码试出来,这样整个系统就会被他所控制,严重危害系统的安全和用户数据的保密性。
3.有关命令
- pwconv
根据/etc/passwd文件生成/etc/shadow。它把所有口令从/etc/passwd移到/etc/shadow中。
- pwunconv
将/etc/shadow中的信息尽可能地恢复到/etc/passwd。