本章开始介绍Linux用户管理。很多教材一上来就介绍用户管理的各种命令。而我将从用户管理的配置文件入手,因为我们需要了解用户管理的原理和概念。我们先了解一下用户管理的配置文件。配置文件信息文件名用户信息文件/etc/passwd密码文件/etc/shadow用户组文件/etc/group用户组密码文件/etc/gshadow用户配置文件/etc/login.defs,/etc/default/useraddnew用户信息文件/etc/skel登录信息/etc/motd1.用户信息文件用户信息文件为/etc/passwd。首先我们看一下这个文件的格式:$vi/etc/passwd这个文件里面保存了所有的Linux用户信息,每一行信息代表一个用户,我们可以看到我的系统一共有44个用户。每行信息是什么意思?我们先看一下这个文件的帮助信息:$man5passwd可以看到文件格式是:name:password:UID:GID:GECOS:directory:shell这样可以理解每行信息包含7个部分,各部分之间用:隔开,各部分信息表示如下:字段含义名称(用户名)用户名密码(密码)用户登录系统时使用的密码UID用户标识号GID默认组标识号GECOS(annotativeDescription)比如存放用户全名等信息的目录(hostdirectory)用户登录系统shell(commandinterpreter)后的默认目录用户使用的shell,默认为bash用户名:不要太长,建议8个字符以内,不要使用特殊字符passwordbit:这里为什么叫passwordbit而不是password?因为这里没有存储真正的密码。但是,在最早的UNIX中,这确实是存储的密码。目前这里使用x来占用用户标识号:Linux内核不识别字母,只能识别数字。也就是说,内核操作的每一个对象,无论是进程、用户、用户组等,都需要有一个数字标识。用户的数字ID是UIDLinux用户分为三种:超级用户(root,UID=0);普通用户(UID500-60000);伪用户(UID1-499)。所以,我在这里纠正很多同学的一个误区。很多同学认为只有root才是超级用户,其实不然,UID=0的用户才叫超级用户。默认组标识号:每个用户必须属于至少一个用户组;每个用户组可以包含多个用户;同组用户享有组内共享的权限注释说明:描述用户信息,方便以后用户使用用户管理的家目录:每个用户在系统中必须有一个家目录。添加用户时,如果不指定host目录,会自动在/home目录下添加一个与用户同名的目录。2、用户密码文件用户密码文件是/etc/shadow,文件中保存了用户真实的密码。我们先来看看这个文件的内容:$vi/etc/shadow这个文件包含了所有的Linux用户信息,每一行信息代表一个用户的密码。我们在上一步查看用户信息文件的时候,一共发现了44个用户,那么这里也会有44个密码。每行信息是什么意思?我们先看一下这个文件的帮助信息:这里最重要的其实是两部分,一个是登录用户名loginname,一个是encryptedpassword加密密码。可以看出每行信息包含7个部分,每个部分之间用:隔开,每部分信息表示如下:字段含义用户名用户登录系统时使用的用户名最近修改time用户上次修改密码的最小间隔天数密码更改间隔的最小天数密码保持有效的最大时间间隔最大天数Warningtime从系统警告到密码过期的天数账户闲置时间账户闲置时间Time绝对numberofdayspasswordexpiration掌握这两个配置文件后,我们其实可以手动创建一个用户,而不是使用useradd命令。让我给你演示一下。三、手动创建系统用户1、在/etc/passwd文件中添加一个基本用户信息:$vi/etc/passwd这里我们添加一个普通用户名为eddy,按Esc,然后输入:wq!保存并退出。然后我们需要创建用户的家目录:$mkdir/home/eddy创建完成后发现这个目录的属主是root,所以我们需要把这个目录的属主改成新创建的用户eddy:$chowneddy/home/eddy2.在/etc/shadow文件中添加用户的密码信息:$vi/etc/shadow然后添加一行密码信息,这里我们设置密码为空,保存退出,这样我们就手动添加了一个用户。我们现在可以使用eddy用户登录。4.新建用户信息文件新建用户信息文件在/etc/skel目录下:$ls-a/etc/skel这里使用-a参数显示隐藏文件,因为这个目录下的文件都是隐藏的文件。当我们使用命令创建新用户时,系统会自动将这个目录下的文件复制到新用户的家目录下。五、用户配置文件:1./etc/login.defs,这里记录了用户的一些默认配置,我们打开这个文件看看:$vi/etc/login.defs从这个文件可以看到,在前面讲到用户信息文件/etc/passwd和用户密码文件/etc/shadow时的一些配置,这里都有默认值。也就是说,在使用命令创建用户时,从这里读取一些默认的配置。设置项含义MAIL_DIR/var/spool/mail创建用户时,系统会在/var/spool/mail目录下创建用户邮箱PASS_MAX_DAYS99999密码有效期,99999为密码从1月1日起有效的天数,1970273,可以理解为密码一直有效。PASS_MIN_DAYS0表示距离上次修改密码的最小天数,用户可以再次修改密码,默认值为0。PASS_MIN_LEN5指定密码的最小长度,默认不少于5个字符,但现在认证时用户登录已经被PAM模块替换,所以这个选项不生效。PASS_WARN_AGE7指定密码过期前多少天,系统开始传递用户密码即将过期,默认为7天。UID_MIN500指定最小UID为500,即添加用户时,默认UID从500开始。注意,如果手动指定一个UID为550的用户,那么下一个创建的用户的UID将从551开始,即使不使用500~549之间的UID。UID_MAX60000指定一个用户的最大UID为60000。GID_MIN500指定最小GID为500,即添加组时,该组的GID从500开始。GID_MAX60000最大用户GID为60000。CREATE_HOMEyes指定在创建用户时是否同时创建用户的家目录,yes表示创建,no表示不创建,默认是yes。UMASK077用户主目录的权限默认设置为077。USERGROUPS_ENAByes指定删除用户时是否同时删除用户组。准备一下,这里指的是被删除用户的初始组。此项的默认值为是。ENCRYPT_METHODSHA512指定用户密码的加密规则。默认为SHA512,这是一种新的密码加密方式。原来的linux只能用DES或者MD5加密。2./etc/default/useradd$vi/etc/default/useraddGROUP表示默认组HOME表示默认家目录INACTIVE账户默认禁用:-1表示不禁用EXPIRE账户的过期时间,有时需要临时创建一些账户,然后可以指定过期时间默认使用哪个shellSKELSHELL新建用户信息文件模板目录
