Linux基础知识 ·

Linux用户与组管理

[隐藏]

linux用户与用户组管理的基本理念和命令

用户分为普通用户、系统用户、系统管理员(root)。

而用户组则与用户所对应,也分为普通用户组、系统用户组、和系统管理员组。

在Linux中,系统并非直接通过我们的账户名称进行识别。由于计算机只能识别二进制的0和1,所以对于计算机而言数字才是其识别的最佳方式。而账户名称不过是为了方便使用者记忆,其实每个账户都有其对应的ID(数字串)号码,换而言之无论是用户名称还是用户组名称,都有其对应的一组ID。用户ID简写为GID,用户组ID简写为GID。

理解了上述概念,再让我们来看看Linux为我们预设的一些ID划分。

用户与用户组基本划分

系统分配了0-65535之间的数字作为用户与用户组ID,Centos6与Centos7有些许细微差别,随后将会其列出。

用户分类Centos6 UIDCentos7 UIDCentos6 GIDCentos7 GID
Root0000
系统用户1-4991-9991-4991-999
普通用户500+1000+500+1000+

上述分配是系统默认划分,可手动指定划分ID范围,但是为了方便管理与识别,不建议打乱划分范围,或做有规则的划分(避免新建用户UID与GID无法成对等干扰识别效率的分配)。

用户与用户组配置文件

当用户登录时,系统会首先寻找/etc/passed里面是否有其输入的账号,若没有则跳出,若匹配到则读取(/etc/group)所对应UID与GID,加载其主文件夹与shell设置。

然后读取/etc/shadow寻找对应账户与UID,核对输入的密码,核对成功进入shell控管阶段。

从上述流程中可看出,用户想要登录系统etc/passed;/etc/group;/etc/shadow;三个文件非常重要,那么我们来看看这三个文件中都有什么信息呢?

/etc/passwd 文件结构

我们用cat命令查看一下/etc/passwd文件的内容:

此文件中没一行都代表了一个账号,有几行就有几个账号,不过里面很多账号本来就是系统正常运行所必须的菂,我们简称为系统账号,如:bin,daemon,adm,nobody等等,这些账号不要随意删掉。

我们以root这一行为例,一行中以“:”作为分隔,隔成了7个字段,而这7个字段分别代表了:

1.账户名称:登录所需账户名。

2.密码:早期密码存放的地方,因安全考虑改存/etc/shadow,但为兼容问题,此处用x代替。

3.UID:用户账号锁对应ID号码。

4.GID:用户基本组(为什么会是基本组呢?我们下面解释!)ID号码。

5.用户全名或说明,可以为空,方便识别与管理而已。

6.用户主目录路径。

7.用户所用shell。

/etc/group 文件结构

首先,我们还是cat一下,来看看此文件中都有什么。

可以看出,这个文件同/etc/passwd事一样的格式,不过其只有四个分段,那么我来解释一下每个分段代表的含义:

1.用户组名称(每一行记录一个用户组)。

2.用户组密码:同/etc/passwd一样原因,密码被移至/etc/gpasswd,此处用x代替。当用户切换没有添加自己的用户组时需要输入用户组密码,管理员可以设置用户组管理员对当前组进行管理。

3.GID,我们/etc/passwd第4字段的GID号码对应的组名称就是从此处而来的啦。

4.该用户组成员,多个成员“,”隔开。

/etc/shadow 文件结构

还是先来看看这个文件的内容:

是的,没错,同样的一行代表一个账户,以“:”隔开成段。那么我们来看看这个文件每段代表的含义:

1.账户名称。

2.密码:加密后的字符串,如果有密码位有“!”则表示账户被锁定禁止登录,如果是*则代表是系统用户无法登录。

3.最近一次修改密码的时间,1970年1月1日至此时间天数。

4.最小密码修改间隔(相对上次修改密码的天数)。

5.最大密码修改间隔(相对上次修改密码的天数)。

6.密码过期前警告日期(相对密码有效天数截止时间)。

7.密码失效日期(相对密码有效天数截止时间)。

8.账户失效日期,自1970年1月1日算起。

9.保留字段,留待以后添加功能。

/etc/gshadow 文件结构

既然用户配置文件/etc/passwd有对应的/etc/shadow文件来记录管理密码信息,那么用户组配置文件有没有对应的密码记录与管理文件呢?当然是有的,它就是/etc/gshadow,我们也来看看他的文件结构吧!

可以发现这四个文件的结构都是一样的,一行记录一个以“:”分隔。此文件分了4个段落,其含义为下:

1.用户组名。

2.密码列,留空为无密码,开头为“!”为锁定状态。

3.用户组管理员账号。

4.用户组成员(与/etc/group成员相同)。

用户管理

介绍完了配置文件,可是我们增删查改用户与用户组总不能去一点一点修改配置文件吧!下面我们看看如何用命令来管理用户与用户组。

useradd新增用户

 我们可以通过useradd命令快捷的添加用户。

useradd

-u 创建时指定用户UID。

-g 创建时指定用户GID(初始用户组或叫做基本组)。

-G 创建时直接添加其附加组。

-m 强制创建用户主目录(一般账号默认值)。

-M 强制不创建用户主目录(系统账号默认值)。

-c 账号说明,/etc/passwd第5段内容。

-d 指定某个目录为用户主目录,而不使用默认值。

-r 创建一个系统账户 UID会依据/etc/login.defs -s 指定用户shell。

-e 指定账户失效日期 YYYY-MM-DD,/etc/shadow第8字段。

-f 密码失效日期 0为立即失效 -1为永不失效,/etc/shadow第7字段。

useradd创建账号默认属性

useradd 直接创建账号时,系统默认已经为我们配置好了很多的默认值,这些配置存放在/etc/default/useradd

useradd -D可以调用出其默认值

/etc/default/useradd

这个文件是useradd创建用户时的基本账户设置默认参数配置文件。

group=100

新建账户的初始用户组使用的GID为100者。

系统上GID为100的组为users这个用户组,此设置让新建用户默认初始使用组为users这个组,但是在Centos上面我们创建用户,其默认的初始用户组并非users这个用户组,而是与用户名同名的用户组,这是因为针对用户组有两种不同的机制。

私有用户组机制

系统会创建一个与账户同名的用户组作为用户初始用户组,且默认主文件夹权限通常为700,这种机制会比较有保密性,使用这种机制将不会参考GROUP=100这个设置值。代表性发行版有RHEL、Fedora、Centos等等

公有用户组机制

就是以GROUP=100这个设置值为新用户初始用户组,因此每个账户都属于users这个用户组,且默认主文件夹权限通常为755,这种机制便于用户互相分享文件。代表发行版有SuSE等等。

home=/home

用户主目录的基准目录,新建账户的默认主目录将会创建在此目录下。

inactive=-1

/etc/shadow第7字段,若为0,则代表立即失效,若为-1,则代表永不失效,如30,则代表30天后失效。

expire=

/etc/shadow第8字段,账号失效日期。

shell=/bin/bash

新建用户默认使用的shell,若是改为/sbin/nologin则新建用户默认无法登陆系统。

skel=/etc/skel

用户主目录配置文件参考基准目录,新建用户的配置将会复制此文件夹的数据。

create_mail_spool=yes

创建用户的mailbox,/var/spool/mail/xxxx。

 

/etc/login.defs

useradd创建用户密码参数默认配置文件。

其文件中已经详细的说明了各个参数的含义,在这里我在大略的概括一下。

mail_dir /var/spool/mail

用户默认邮箱目录基准目录。

pass_max_days 99999

/etc/shadow 第5段落,最大更改密码间隔。

pass_min_days 0

/etc/shadow 第4段落,最小更改密码间隔。

pass_min_len 5

密码最短字符长度,已被pam模块替代,失去效用。

pass_warn_age 7

/etc/shadow 第6段落,密码过期前警告天数。

 

uid_min 1000

普通用户最小ID 小于1000的GID默认为系统用户保留

uid_max 60000

普通用户最大ID,用户能使用的最大GID。

gid_min 1000

普通用户组最小ID,小于1000的GID默认为系统用户组保留。

gid_max 60000

普通用户组最大ID,用户组能使用的最大GID。

sys_uid_min 201

系统用户最小ID 。

sys_uid_max 999

系统用户组最大ID,大于999的ID默认为普通用户使用ID

 

sys_gid_min 201

系统用户组最小ID 。

sys_gid_max 999

系统用户组最大ID,大于999的ID默认为普通用户使用ID。

create_home yes

在不加-m 或 -M 时是否主动创建用户主文件夹。

umask 077

用户主文件夹创建的umask ,因此权限会是700。

usergroups_enab yes

使用userdel 删除用户时是否删除其初始用户组。

encrypt_method sha512

密码默认加密使用SHA512

总结:useradd创建用户时参考了/etc/default、/etc/login.defs、/etc/skel/*,并修改了/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow.

passwd 修改账户密码和属性

使用useradd创建账户后,在默认情况下,该账号是暂时被锁定,无法登录系统的,此时就需要passwd来进行管理了。

passwd

--stdin:可接受前一个管道传来的数据,作为密码输入。

-l:锁定账户,在/etc/shadow 第2字段前面加上“!”使密码失效。

-u:解锁账号,与-l相对应。

-S:列出密码相关参数,即/etc/shadow文件内大部分内容。

-n:天数 shadow第4字段,修改密码间隔天数。

-x:天数 shadow第5字段,距离上次修改密码最大间隔。

-w:天数 shadow第6字段,密码过期前警告天数。

-i:天数 shadow第7字段,密码过期时间。

chage 修改账户密码属性

chage

-l:列出该账户详细密码参数。

-d:日期 shadow第3字段,最近一次修改密码日期(YYYY-MM-DD)。

-m:天数 shadow第4字段,最小修改密码间隔。

-M:天数 shadow第5字段,最大修改密码间隔。

-W:天数 shadow第6字段,密码过期前警告天数。

-I:天数 shadow第7字段,密码失效天数。

-E:日期 shadow第8字段,账户失效日期(YYYY-MM-DD)。

usermod 修改账户密码属性

usermod

-l:passwd第1字段,修改账户名称。

-u:passwd第3字段,修改UID。

-g:passwd第4字段,修改GID。

-G:group第4字段,修改用户组。

-a:配合-G,追加而非覆盖。

-c:passwd第5字段,账户说明信息。

-d:passwd第6字段,修改用户主文件夹。

-s:passwd第7字段,修改用户默认shell。

-f:shadow第7字段,密码失效天数。

-e:shadow第8字段,账户失效日期。

-L:锁定账户(加“!”)。

-U:解锁账户(去“!”)。

userdel 删除账户

userdel

不加参数仅仅删除账户。

-r 同时删除主文件夹和email(/var/spool/mail/xxx)。

用户附加信息查询与修改

finger 查阅用户属性

chfn 修改用户附加信息

chsh 修改默认shell

chsh

-l :列出当前系统可用shell。

-s:修改自己的shell。

id 查询uid和gid

用户组管理

了解了用户的增删查改后,我们再来看看用户组的管理命令。

groupadd 新建用户组

groupadd

-g GID :后面接指定的GID,用来直接给予某个GID。

-r :新建系统用户组,与/etc/login.defs内的GID_MIN有关。

groupmod 修改用户组相关参数

groupmod

-g :修改用户组GID。

-n :修改用户组名。

groupdel 删除用户组

groupdel 接上用户组名即可删除用户组,但是组内有成员便无法删除。

gpasswd 用户组管理员功能

gpasswd

不添加参数时,则表示给组设置组密码。

-A:添加组管理员。

-M:批量添加组成员,多个成员以“,”隔开。

-R:让组密码失效。

-r:删除组密码。

-a:添加某位用户到用户组。

-d:从用户组中删除某位用户。

 

参与评论