passwd文件

通常在Linux系统中,用户的关键信息被存放在系统的/etc/passwd文件中,系统的每一个合法用户账号对应于该文件中的一行记录。这行记录定义了每个用户账号的属性。:

  • 一般用户只能更改自己的用户密码.

  • root用户可以更改自己或其它用户的密码。

  • 一般情况下id号小于100是系统的内置id。

  • 用户id一般是从500开始编号的。

此外,需要注意的是,如果passwd字段中的第一个字符是“*”的话,那么,就表示该账号被查封了,系统不允许持有该账号的用户登录。



213645574.jpg

在该文件中,每一行用户记录的各个数据段用“”分隔,分别定义了用户的各方面属性。各个字段的顺序和含义如下:

注册名:口令:用户标识号:组标识号:用户名:用户主目录:命令解释程序shell

  1. 注册名:用于区分不同的用户。在同一系统中注册名是唯一的。在很多系统上,该字段被限制在8个字符(字母或数字)的长度之内;并且要注意,通常在Linux系统中对字母大小写是敏感的。这与MSDOS/Windows是不一样的。

  2. 口令:系统用口令来验证用户的合法性。超级用户root或某些高级用户可以使用系统命令passwd来更改系统中所有用户的口令,普通用户也可以在登录系统后使用passwd命令来更改自己的口令。

  3. 用户标识号:UID是一个数值,是Linux系统中唯一的用户标识,用于区别不同的用户。在系统内部管理进程和文件保护时使用UID字段。在Linux系统中,注册名和UID都可以用于标识用户,只不过对于系统来说UID更为重要;而对于用户来说注册名使用起来更方便。在某些特定目的下,系统中可以存在多个拥有不同注册名、但UID相同的用户,事实上,这些使用不同注册名的用户实际上是同一个用户。

  4. 组标识号:这是当前用户的缺省工作组标识。具有相似属性的多个用户可以被分配到同一个组内,每个组都有自己的组名,且以自己的组标 识号相区分。像UID一样,用户的组标识号也存放在passwd文件中。在现代的Unix/Linux中,每个用户可以同时属于多个组。除了在passwd文件中指定其归属的基本组之外,还在/etc/group文件中指明一个组所包含用户。

  5. 用户名:包含有关用户的一些信息,如用户的真实姓名、办公室地址、联系电话等。在Linux系统中,mail和finger等程序利用这些信息来标识系统的用户。

  6. 用户主目录:该字段定义了个人用户的主目录,当用户登录后,他的Shell将把该目录作为用户的工作目录。在Unix/Linux系统中,超级用户root的工作目录为/root;而其它个人用户在/home目录下均有自己独立的工作环境,系统在该目录下为每个用户配置了自己的主目录。个人用户的文件都放置在各自的主目录下。

  7. 命令解释程序:Shell是当用户登录系统时运行的程序名称,通常是一个Shell程序的全路径名,如/bin/bash。为了阻止一个特定用户登录系统,可用/dev/null作为其shell,或例子中的/sbin/nologin。

注:现在的Unix/Linux系统中,口令不再直接保存在passwd文件中,通常将passwd文件中的口令字段使用一个“x”来代替,将/etc /shadow作为真正的口令文件,用于保存包括个人口令在内的数据。当然shadow文件是不能被普通用户读取的,只有超级用户才有权读取。

此外,需要注意的是,如果passwd字段中的第一个字符是“*”的话,那么,就表示该账号被查封了,系统不允许持有该账号的用户登录。

系统管理员通常没有必要直接修改passwd文件,Linux提供一些账号管理工具帮助系统管理员来创建和维护用户账号。


shadow文件

在shadow配置文件中,每条记录都有八个字段,每个字段之间利用冒号“”进行分割。每个字段都完成一项特殊的控制。系统管理员通常需要更改某个字段来实现某个特殊的任务。


213646483.jpg

第一个字段:用户名字。最前面的一个字段表示用户的帐号名。这个字段不用过多解释,不过系统管理员需要知道一点,在系统安装完毕后,除了root特权帐户外,系统还会自动建立不少的用户。这些用户往往用来完成一些特殊的作业。为此在没有了解这些帐户的用途之前,不要轻易更改系统创建的用户。而系统管理员的用户通常情况下都是保存在最后面。也就是说,其记录的顺序是按照帐号创建的先后顺序来保存的。这对于系统管理员迅速定位帐户信息能够提供一定的帮助。

  第二个字段:用户密码。用户名后面看起来一串没有含义的字符串,这就是密码。不过这是处理后的密码。为了操作系统的安全考虑,在这个配置文件中,密码是加密处理过的。如果***者具有一定的专业知识,仍然可以破解这个口令。为此在一些安全性要求比较高的企业中,建议大家采用MD5编码。如此的话,这里显示的字符串长度就会有256个字符,其破解的难度就会大的多。有时会这个字符串为空白,就表示这个帐户没有设置密码。另外用户需要注意的是,这个密码跟微软操作系统不同,其有最大的长度限制。如在RedHat9中其密码的最大长度为8 位。如果用户设置的密码超过这个长度的话,则超过的位数操作系统会忽略掉。所以在设置密码的时候,用户最好不要依靠密码的长度来提高安全性;而最好是通过密码的复杂性,如字符与阿拉伯数字混用等手段来提高操作系统的安全。

  第三个字段:15891,表示密码最后修改的时间。系统管理员或者用户可以更改密码,然后操作系统会记录最后更改的时间。不过这里记录的时间读起来比较困难,其是以天数为单位的。15891就表示root帐户的密码最近一次更改距离现在有 15891天。这个字段对于系统管理员没有什么用途。但是对于操作系统来说,确很有作用。其要通过这个参数来实现密码强制更改策略。

  第四个字段:密码两次更改之间,至少需要间隔的日数。有时候,密码过于频繁更改,对于应用系统的部署会有比较大的影响。如系统管理员在Linux操作系统上部署了文件共享服务。每个用户或者每个部门通过各自的帐户名与密码来访问这个文件服务器。此时,往往需要对这些用户的密码更改进行限制,如在一年之内不允许他们更改密码。因为如果更改密码的话,就需要在每个客户端上也进行相应的调整,这会增加维护的工作量。如上图所示,如果这个字段的值为0,则表示这个时间间隔的天数没有强制限制。

  第五个字段:密码的有效期限。这个字段表示密码更改后,距离下次一定要更改口令的天数。有时候系统管理员为了安全考虑,会给密码设置一个有效期限。当这个期限到后,就会提示用户更改密码。特别是当Linux服务器暴露在互联网上时,频繁更改密码确实是提高其安全性的一个重要手段。如输入60,就代表距离上次更改密码60天后,用户就必须更改一个新的口令。如果逾期不进行更改的话,就会受到警告,最后这个帐户可能就会被注销。如上图所示,如果这个字段的值为99999的话,就表示没有密码有效期的限制,用户可以永远是用这个密码。不过这是一个非常危险的做法,系统管理员还是需要慎用。

  第六个字段:密码失效前的警告。如系统管理员把密码的有效期限设置为60天。那么比较人性化的做法是在密码失效7天之前就开始警告用户,需要更改密码。而不是等到密码失效了,用户不能够利用原有帐户登陆了,才知道自己的密码失效。这个字段就是用来设置当离下次密码必须更改日期前多少天时,就开始警告用户需要更改密码。如上图所示,这里设置为7(这是操作系统的默认值),就表示在密码逾期七天之前向用户提出警告。如果不需要警告信息的话,则这里显示的是空白。注意这根上面的有所区别,没有警告是以空白表示的,而不是以99999来表示。

  第七个字段:账户注销时间。如果用户不听系统的警告,在逾期后仍然没有及时更改密码,那么为了安全起见,系统可能会把这个帐户注销。要实现这个限制的话,就需要在这个字段中进行设置。这个字段就表示超过口令必须更改的日期多少天后,系统会自动将这个帐户注销掉。如这里设置为5天,而密码到期的时间为2013年10月8日。如果用户在5天之内没有更改密码,则到10月13日的时候,系统就会自动的将这个帐户注销,不允许用户登录。有时候,如春节放假回来之后,系统管理员可能不得不更改这个值,如需要延长。因为春节放假时间比较长,不少用户可能会因为没有及时更改密码而被注销。为此系统管理员需要延长这个期限,让用户有足够的时间去更改密码。

  第八个字段:帐号的使用期限。不仅密码具有使用期限,而且帐号也具有使用期限。有时候这个帐号的使用期限控制非常有用。如企业有新员工,其使用期为60天。当然为了企业信息安全考虑,在试用期内的员工其权限肯定需要受到一定的限制。为此系统管理员可以在系统中专门设置一个账号为试用期的员工使用,可以把这个有效期限设置为60天。当过了这个有效期之后,系统就会锁住这个帐户。故通过这个管理机制,就可以最大限度的保障这些试用期员工帐号的安全。即系统管理员不用再费心的去管理这些帐号,其过期后会自动注销。如果这字段为空白的话,就表示没有账号使用期限的限制,其会永久生效。注意通常情况下不要为root帐户设置这方面的限制。否则的话,后果会不堪设想。

  第九个字段:这最后一个字段到现在为止还是一个预留字段,以待后续操作系统升级时使用。

  从上面的分析中,大家可以看出shadow文件中基本上包含了帐户与密码管理中的所有内容。作为系统管理员,除了要了解这个文件的基本结构之外,还需要了解这个文件中哪些字段可以更改。通常情况下,前面三个字段最好不要更改。后面的内容可以根据需要来调整。不过在账号有效期限这个字段中,不要为root帐户设置账号期限。因为root账号主要用来做管理用。如果为其设置有效期限,而期限过期后,那么就没有用户能够来完成系统的维护工作了。通过配置文件来维护帐户、密码等管理策略,要比通过其他方式简单的多。作为一名Linux操作系统管理专家,应该要养成这个能力。而不要太过于依靠其图形化的界面。因为很多管理维护任务,都需要依靠远程终端来实现。此时就需要考验系统管理员命名行操作的能力了。