Linux账号管理

这里写图片描述

Linux的账号管理包括用户与用户组,它们两者是多对多的关系,即一个用户可以属于多个用户组,且一个用户组可以包含多个用户。一个用户组中的用户具有相同的权限。
在Linux中,用户的账户信息和用户组信息都记录在指定的文件中,这些文件构成了Linux用户管理的基础。下面我们就详细介绍Linux用户管理相关的文件。

Linux的账号文件

1./etc/passwd

这个文件虽然叫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

下面详细介绍每个参数的含义:

1.1. 账号名称

1.2. 密码

在passwd文件中,密码以x表示,实际的密码存放在专门的密码文件/etc/shadow中。为何要这么玩呢?
早起的Unix系统就是将密码存放在passwd文件中的这个位置上。但由于很多程序都需要读这个文件获取用户信息,那么密码就很容易被获取到,虽然密码采用了MD5消息摘要后再存储在这里,但仍然有被破解的风险,因此为了安全,现在的Linux系统都将密码单独存放在/etc/shadow中。

1.3. UID

UID=User Identifier,它是用户的标识。Linux通过UID来区分一个个账户。
UID是一个0-65535范围内的数字,不同的取值有不同的含义:

  • UID=0
    表示该账户为系统管理员。root的UID即为0.当然,你可把其他账户的UID设为0,此时该账户就拥有与root一样的权限。
  • UID=1~99
    Linux自行创建的账户,权限和普通账户没啥区别,只是为了规范。
  • UID=100~499
    系统操作相关的账户。这些账户是由用户创建的,权限和普通账号的权限没啥区别,也只是为了规范。
  • UID=500~65535
    普通用户的UID。

1.4. GID

GID=Group Identifier,他是用户组的ID。它的取值范围和UID遵循一样的规范。

1.5. 账号说明信息

这个字段是账户的说明信息,并没什么卵用,只是为了看看。

1.6. 用户主目录

每个账户都有一个主目录,用户可以在各自的主目录下为所欲为。
这个字段就是设置账户的主目录的路径。

1.7. 该账户登录后的shell

当一个用户登录后,Linux会给该用户分配一个shell来和Linux内核通信,这样该用户就能操控这台计算机了。那么Linux的shell有好多种,究竟给登录用户分配哪个shell呢?这就是在这个参数中设定。
当然,如果不想让用户操控这台计算机的话,可以将这个参数设为/sbin/nologin,这样在用户登录后Linux不会给他分配shell,从而该用户无法操控这台机器。

2./etc/shadow

这个文件存放所有账号的密码,它的权限为-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一样,也是一行代表一个账号,参数之间用:分隔,每个参数的含义如下:

2.1 账号名称

2.2 密码

这里才是账号真正的密码存放的地方,它采用了MD5消息摘要。

2.3 最近修改密码的日期

这个字段记录了上次修改密码的时间。
这个字段表示从1970-1-1到上次修改密码的天数。
如上述root密码的修改时间为16477,也就是1970-1-1往后16477天,也就是2015年2月11日。

2.4 密码不可以被修改的天数

这个值是从上次修改时间算起,密码不可以被修改的天数。

2.5 密码需要被重新设置的天数

从第三个字段开始,经过多少天之后就需要重新设置密码。

2.6 密码更改期限前的发出警告的天数

2.7 密码过期后的宽限天数

在宽限期间内账号仍然可以登录,只不过会给出改密码的提示。

2.8 账号失效日期

这个值也是从1970-1-1往后的天数,到了那天,这个账号就无法登录。
收费服务可以使用这个功能。

2.9 保留字段

保留字段目前还没有任何作用。

3./etc/group

这个文件中记录的是GID和用户名名的对应关系。具体内容如下:

root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm

3.1 用户组名

3.2 用户组密码

用户组密码很少使用,这个密码由用户组管理员设置。
当然和用户密码一样,用户组的密码也存储在一个独立文件中:/etc/gshadow

3.3 GID

用户组的ID

3.4 该组的用户的用户名

本组成员的用户名。多个成员间用,隔开,注意:不能有任何空格!

4./etc/gshadow

这个文件用于存储用户组的密码,这个文件主要作用是:如果root管理员非常忙,没空管每个用户组的成员,那么可以指定几个用户组管理员,专门管理每组成员的添加与删除。
本文件具体内容如下:

root:::root
bin:::root,bin,daemon
daemon:::root,bin,daemon

4.1 用户组名

4.2 密码

密码为!表示本用户组无管理员。

4.3 本用户组的管理员账号

4.4 该用户组的成员账号

账号管理

了解了这些文件的构成后,接下来我们使用目录来操作这些文件,从而实现用户账号的管理。

1. 新增用户:useradd

useradd [-参数 参数值] 用户名

参数详解:

1.1 -u

为账户指定一个UID。

1.2 -g

为账户指定一个初始化的GID。

1.3 -G

为账户指定还需要加入的用户组。

1.4 -M

1.5 -m

1.6 -c

设置账户的描述信息。

1.7 -d

设置账户的主目录。

1.8 -r

创建一个系统管理员账号。

1.9 -s

指定这个账户的shell。

1.10 -e

设置账号失效日期,格式为:YYYY-MM-DD。

1.11 -f

设置密码失效日。-1表示永不失效。

1.12 -D

查看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

2. 设置密码:passwd、chage

这两个命令其实都是对/etc/shadow文件中的内容进行修改。passwd能设置/etc/passwd文件中的一部分参数,而chage能设置另一部分参数。

2.1 passwd

passwd [-参数 参数值] 用户名
PS:不加用户名表示修改当前账户的密码。

2.1.1 -l

将账号锁住,实则将shadow文件中的密码改为!

2.1.2 -u

将账号解锁。

2.1.3 -S

列出该用户密码的详细信息。

2.1.4 -n

设置不可以修改密码的天数。

2.1.5 -x

设置必须要修改密码的天数。

2.1.6 -w

设置过期前警告的天数。

2.1.7 -i

设置密码失效日期。

2.2 chage

chage [-参数 参数值] 用户名

2.2.1 -l

列出该账号的详细密码信息。

2.2.2 -d

查看该账号的最近一次改密时间。

2.2.3 -E

设置账号失效日。

2.2.4 -I

设置密码失效日。

2.2.5 -m

设置密码不可以被修改的天数。

2.2.6 -M

设置密码有效期。

2.2.7 -W

设置密码过期警告的天数。

3. 修改账户信息:usermod

该命令用于修改/etc/passwd和/etc/shadow中的信息。

usermod [-参数 参数值] 用户名

3.1 -L

冻结该账号。其实将shadow的密码改为!

3.2 -U

解冻该账号。

3.3 其他参数请自行查阅。

4. 删除账户:userdel

userdel [-r] username
-r :将用户相关的数据均删除,包括如下数据:
/etc/passwd和/etc/shadow中的账户数据
/etc/group和/etc/gshadow中的分组信息
/home/username和/var/spool/mail/username中的个人数据

以下命令较为简单,请自行查阅!

5. 查看自己账户信息:finger

6. 设置我的个人信息:chfn

7. 修改自己账户的shell:chsh

8. 查询指定账户的UID/GID:id

9. 新增用户组:groupadd

10. 修改用户组:groupmod

这里写图片描述

你可能感兴趣的:(Linux入门讲解)