Linux的账号管理包括用户与用户组,它们两者是多对多的关系,即一个用户可以属于多个用户组,且一个用户组可以包含多个用户。一个用户组中的用户具有相同的权限。
在Linux中,用户的账户信息和用户组信息都记录在指定的文件中,这些文件构成了Linux用户管理的基础。下面我们就详细介绍Linux用户管理相关的文件。
这个文件虽然叫passwd,但实际存放Linux所有的账户信息,其中每一行表示一个账户信息,每条账户信息由7个字段构成,每个字段用:分隔。
这个文件中除了有root账户、我们自定义的用户账户外,还有很多系统账户,如下所示:
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
在passwd文件中,密码以x表示,实际的密码存放在专门的密码文件/etc/shadow中。为何要这么玩呢?
早起的Unix系统就是将密码存放在passwd文件中的这个位置上。但由于很多程序都需要读这个文件获取用户信息,那么密码就很容易被获取到,虽然密码采用了MD5消息摘要后再存储在这里,但仍然有被破解的风险,因此为了安全,现在的Linux系统都将密码单独存放在/etc/shadow中。
UID=User Identifier,它是用户的标识。Linux通过UID来区分一个个账户。
UID是一个0-65535范围内的数字,不同的取值有不同的含义:
GID=Group Identifier,他是用户组的ID。它的取值范围和UID遵循一样的规范。
这个字段是账户的说明信息,并没什么卵用,只是为了看看。
每个账户都有一个主目录,用户可以在各自的主目录下为所欲为。
这个字段就是设置账户的主目录的路径。
当一个用户登录后,Linux会给该用户分配一个shell来和Linux内核通信,这样该用户就能操控这台计算机了。那么Linux的shell有好多种,究竟给登录用户分配哪个shell呢?这就是在这个参数中设定。
当然,如果不想让用户操控这台计算机的话,可以将这个参数设为/sbin/nologin,这样在用户登录后Linux不会给他分配shell,从而该用户无法操控这台机器。
这个文件存放所有账号的密码,它的权限为-r——–,也就是只有root才能查看这个文件,它具体的内容如下:
root:$1$cfvc4Vwh$KuVS9yJeWOcLkEXKbTryf.:16477:0:99999:7:::
bin:*:16300:0:99999:7:::
daemon:*:16300:0:99999:7:::
adm:*:16300:0:99999:7:::
lp:*:16300:0:99999:7:::
和passwd一样,也是一行代表一个账号,参数之间用:分隔,每个参数的含义如下:
这里才是账号真正的密码存放的地方,它采用了MD5消息摘要。
这个字段记录了上次修改密码的时间。
这个字段表示从1970-1-1到上次修改密码的天数。
如上述root密码的修改时间为16477,也就是1970-1-1往后16477天,也就是2015年2月11日。
这个值是从上次修改时间算起,密码不可以被修改的天数。
从第三个字段开始,经过多少天之后就需要重新设置密码。
在宽限期间内账号仍然可以登录,只不过会给出改密码的提示。
这个值也是从1970-1-1往后的天数,到了那天,这个账号就无法登录。
收费服务可以使用这个功能。
保留字段目前还没有任何作用。
这个文件中记录的是GID和用户名名的对应关系。具体内容如下:
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm
用户组密码很少使用,这个密码由用户组管理员设置。
当然和用户密码一样,用户组的密码也存储在一个独立文件中:/etc/gshadow
用户组的ID
本组成员的用户名。多个成员间用,隔开,注意:不能有任何空格!
这个文件用于存储用户组的密码,这个文件主要作用是:如果root管理员非常忙,没空管每个用户组的成员,那么可以指定几个用户组管理员,专门管理每组成员的添加与删除。
本文件具体内容如下:
root:::root
bin:::root,bin,daemon
daemon:::root,bin,daemon
密码为!表示本用户组无管理员。
了解了这些文件的构成后,接下来我们使用目录来操作这些文件,从而实现用户账号的管理。
useradd [-参数 参数值] 用户名
参数详解:
为账户指定一个UID。
为账户指定一个初始化的GID。
为账户指定还需要加入的用户组。
设置账户的描述信息。
设置账户的主目录。
创建一个系统管理员账号。
指定这个账户的shell。
设置账号失效日期,格式为:YYYY-MM-DD。
设置密码失效日。-1表示永不失效。
查看useradd默认的参数值。
当不用任何参数创建账号时,会使用useradd默认的参数创建,我们可以使用useradd -D查看默认的参数,如下:
GROUP=100#默认的用户组GID为100
HOME=/home#默认在/home下创建用户主目录
INACTIVE=-1#密码默认用户失效
EXPIRE=#账号也用户失效
SHELL=/bin/bash#默认的shell为bash
SKEL=/etc/skel#将这个路径下的目录复制一份作为用户主目录
CREATE_MAIL_SPOOL=yes#是否用户的mailbox
这两个命令其实都是对/etc/shadow文件中的内容进行修改。passwd能设置/etc/passwd文件中的一部分参数,而chage能设置另一部分参数。
passwd [-参数 参数值] 用户名
PS:不加用户名表示修改当前账户的密码。
将账号锁住,实则将shadow文件中的密码改为!
将账号解锁。
列出该用户密码的详细信息。
设置不可以修改密码的天数。
设置必须要修改密码的天数。
设置过期前警告的天数。
设置密码失效日期。
chage [-参数 参数值] 用户名
列出该账号的详细密码信息。
查看该账号的最近一次改密时间。
设置账号失效日。
设置密码失效日。
设置密码不可以被修改的天数。
设置密码有效期。
设置密码过期警告的天数。
该命令用于修改/etc/passwd和/etc/shadow中的信息。
usermod [-参数 参数值] 用户名
冻结该账号。其实将shadow的密码改为!
解冻该账号。
userdel [-r] username
-r :将用户相关的数据均删除,包括如下数据:
/etc/passwd和/etc/shadow中的账户数据
/etc/group和/etc/gshadow中的分组信息
/home/username和/var/spool/mail/username中的个人数据
以下命令较为简单,请自行查阅!