Linux 管理员在工作中,相当重要的一环就是“帐号管理”。因为整个系统都是你在管理,并且所有一般用户的帐号申请都必须通过你的协助才行!所以就必须要了解一下如何管理好一个服务器主机的用户与用户组。在管理Linux主机的帐号时,我们必须先来了解一下Linux到底是如何辨别每一个用户的。

       虽然我们登录Linux主机的时候,输入的是我们的帐号,但是其实Linux主机并不会直接认识你的“用户名称”的,它仅认识ID(ID就是一组号码)。由于计算机仅认识 0和1,所以主机对于数字比较有概念的;至于帐号只是为了让人们容易记忆而已。而你的ID与帐号的对应关系就在/etc/passwd当中。

一、Linux帐户、组管理相关的文件
用户的属性信息文件     /etc/passwd;
影子口令、密码文 件     /etc/shadow;          
用户组的属性信息文件     /etc/group;
用户组的密码文件     /etc/gshadow;
新用户的配置文件    /etc/skel;

解释帐户相关文件的组成及各段内容的含义:
1、用户属性信息文件的组成
以root用户为例:
[root@vm04 ~]# cat /etc/passwd | grep root
root:x:0:0:root:/root:/bin/bash        # 用户的属性信息文件共分为七段组成,每段之间用“:”号隔开,下面我们介绍一下每段内容的含义:
account:password:UID:GID:GECOS:directory:shell

用户名:就是登录系统的帐号,用户名用来对应UID。
密码占位符:就是登录帐号的密码,这个文件所有程序都可以读取,很容易造成密码数据被窃取,因此将这个字段的密码放到了/etc/shadow文件中,所以会看到是一个"x"。
UID:用户ID
GID:组ID
注释信息:用户的描述信息
家目录:用户的主目录
shell:用户默认使用的shell

2、影子口令、密码文件的组成
以root用户为例:
[root@vm04 ~]# cat /etc/shadow | grep root
root:$1$ChrNrker$s.W4jjFr.lxVt9Fb7FStf1:15879:0:99999:7:::        # 影子口令、密码文 共分为九段组成, 同样以“:”号分隔,下面我们介绍下每段内容的含义:
login name : encrypted passwd : date of last password change : minimum password age : maximum password age : password warning period : password inactivity period : account expiration date : reserved field

登录名:由于密码也需要与帐号对应,因些,shadow文件的第一栏,即是我们的登录帐号。
密码:这个字段内的数据才是真正的密码,而且是经过编译的密码(加密)。  此文件的默认权限一般为[-rw-------]或[-r--------],只有root帐号才可以查看此文件,说了这些,你应该知道这个文件的重要性了吧。
最近一次修改密码的时间:这个字段记录了[更改密码的日期]时间。
密码最短使用期限:这个字段记录了,帐号密码在最近一次被修改后经过多长时间(几天)后可以再次修改密码操作。如果为0,表示随时可以对密码进行修改。
密码最长使用期限:这个字段记录了,指定最近一次修改密码后,在多少天之后必须再次修改密码才行,否则此帐号密码将会[变为过期特性]。
密码到期警告天数:当帐号密码有效期快要到期的时候,系统会根据这个字段的设置,发出[警告]信息,提示用户尽快修改密码。
帐号的非活动天数:当密码有效期,过期后用户仍然没有修改密码,那该密码就算过期了,虽然过期了,但该帐号还可以用来进行其它工作,如:bash等。
帐号过期期限:这个字段表示,这个帐号在此字段规定的日期之后,将无法再使用。
预留段:最后一个字段为保留字段,如以后有新增功能将会使用此字段。    

3、用户组的属性信息文件组成
以root用户为例:
[root@vm04 ~]# cat /etc/group | grep root
root:x:0:root        # 用户组的属性信息文件共分为四段级成, 同样以“:”号分隔,下面我们介绍下每段内容的含义:
group_name:passwd:GID:user_list

组名:组名就不需要多解释了,就是组的名称。
密码占位符:群组的密码,通常不需要设定,同样,密码已经被移到到/etc/gshadow文件中,因此,这个字段存在一个“x”。
GID:组ID
用户列表:以此组为额外组的用户列表,用户间用逗号分隔

4、用户组的密码文件组成
以root用户为例:
[root@vm04 ~]# cat /etc/gshadow | grep root
root:::root        # 用户组的密码文件共分为四段组成, 同样以“:”号分隔,下面我们介绍下每段内容的含义:
group name:encrypted passord:administrators:members

组名:不需要在做解释了,呵呵,你懂的。
密码占位符:组的密码,开头为“!”表示无合法密码。
群组管理员帐号:就是让群组具有一个管理员,管理员可以管理那些帐号可以加入/移出该群组。
该群组的所属帐号:组成员,如果有多个成员,用“,”(逗号)分割。

5、新用户的配置文件
创建新用户的时候,是将/etc/skel文件夹中文件拷贝新建用户家目中的。

二、Linux 帐户、组管理的相关命令

用户管理的相关命令:useradd、passwd、usermod、userdel、chage
组管理的相关命令:groupadd、groupmod、groupdel、gpasswd
下面我们分别介绍每个命令的基本用法:

1、useradd 命令:

格式:useradd [-u UID] [-g 初始群组] [-G 次要群组] [-mM] [-c 说明栏] [-d 家目录绝对路径] [-s shell] 使用者账号名

【选项与参数】
-u :后面接的是 UID ,是一组数字。直接指定一个特定的 UID 给这个账号
-g :后面接的那个组名,就是该群组的 GID 会被放置到 /etc/passwd 的第四个字段内
-G :后面接的组名则是这个账号还可以加入的群组。 这个选项不参数会修改 /etc/group 内的相关资料
-M :强制,不要建立用户家目录!(系统账号默认值);
-m :强制,要建立用户家目录!(一般账号默认值)
-c :这个就是 /etc/passwd 的第五栏的说明内容,可以随便我们设置描述信息;
-d :指定某个目录成为家目录,而不要使用默认值。务必使用绝对路径;
-r :建立一个系统的账号,这个账号的 UID 会有限制 (参考 /etc/login.defs)
-s :后面接一个shell ,若没有指定则默认是 /bin/bash
-e :后面接一个日期,格式为『YYYY-MM-DD』此项目可写入 shadow 第八字段, 亦即账号失效日的帐号设定;
-f :后面接 shadow 的第七字段项目,指定密码是否会失效。0为立刻失效, -1 为永远不失效(密码只会过期而强制于登入时重新指定而已)

例:创建susu帐号,并指定家目录为:/testdir/susu
# mkdir /testdir
# useradd -d /testdir/susu susu

2、passwd 命令:
格式:passwd [-l] [-u] [--sdtin] [-S] [-n 日数] [-x 日数] [-w 日数] [-i 日期] 账号 <==root 功能

【选项与参数】
--stdin:可以通过来自前一个管道的数据,作为口令输入,此参数对shell script有很大帮助
-l:是Lock的意思,会将/etc/shadow第二栏最前面加上叹号“!”使密码失效
-u:与-l相对,是Unlock的意思
-n:后面接天数,shadow的第4字段,密码最短使用天数,指定天数内不可修改密码;
-x:后面接天数, shadow的第5字段, 最长使用天数,指定天数内必须修改密码;
-w: 后面接天数, shadow的第6字段, 密码过期前 警告天数;
-i:后面接日期, shadow的第7字段,密码失效的日志, 非活动时长;

例:给test_user用户设置密码:
# echo "password-string" | passwd --stdin susu

3、usermod 命令:
格式:usermod [-cdegGlsuLU] username

【选项与参数】
-u UID:后面接UID数字,即/etc/passwd文件中第3段的内容
-g GID:后面接GID数字, 即/etc/passwd文件中第4段的内容
-a -G GID: -G修改额外组时会覆盖原有的额外组,同时使用-a选项则能保留原有的额外组;(append,追加)
-c COMMENT:后面接帐号的说明, 即/etc/passwd文件中第5段的内容,可以加入一些帐号的描述信息
-s /PATH/TO/SHELL:后面接shell的实际文件,例如:/bin/bash或/bin/csh
-l NEW_NAME: 后面接帐号的名称,改用户的登录名称, 即/etc/passwd文件中第1段的内容
-m -d /path/to/somewhere:-d只修改家目录指向,同时使用-m选项则可实现将原来家目录移动为新的家目录;
-L:暂时将用户的口令冻结,让他无法登录,其实仅改/etc/shadow的密码栏
-U:将/etc/shadow密码樯的(叹号)“!”取消,解冻

例:将susu用户加wheel、redha额外组,然后在将此用户加入centos额外组
# usermod -a -G wheel susu ; usermod -a -G redhat susu ; usermod -a -G centos susu

4、userdel 命令:
格式:userdel [ -r ] username
【选项与参数】
-r:连同用户的家目录一起删除

例:删除test_user用户,删除用户的同时一并将家目录也删除
# userdel -r susu

5、chage 命令:
格式:chage [-ldEImMW] username

【选项与参数】
-l:列出该帐号的详细密码参数
-d :后面接日期,修改 shadow 第三字段(最近一次更改密码的日期),格式 YYYY-MM-DD
-E :后面接日期,修改 shadow 第八字段(账号失效日),格式 YYYY-MM-DD
-I :后面接天数,修改 shadow 第七字段(密码失效日期)
-m :后面接天数,修改 shadow 第四字段(密码最短保留天数)
-M :后面接天数,修改 shadow 第五字段(密码多久需要进行变更)
-W :后面接天数,修改 shadow 第六字段(密码过期前警告日期)

例:将susu用户密码警告日期修改为5天
# chage -W 5 susu

6、groupadd 命令:
格式:groupadd [-g gid] [-r] 组名

【选项与参数】
-g :后面接某个特定的 GID,用来直接给予某个 GID
-r :建立系统群组,与 /etc/login.defs 内的GID_MIN有关

例:创建testgrp组,并将组ID指定为1000
# groupadd -g 1000 testgrp

7、groupmod 命令:
格式:groupmod [-g gid] [-n group_name] 群组名
注意:不要随便更改GID,容易造成系统资源错乱。
【选项与参数】
-g :修改既有的 GID 数字;
-n :修改既有的组名

例:将testgrp组的GID修改为1050,然后再将组名改为testgrp1
# groupmod -g 1050 testgrp
# groupmod -n testgrp1 testgrp

8、groupdel 命令:
格式:groupdel [groupname]

例:删除testgrp1组
# groupdel testgrp1

9、gpasswd 命令:
格式:gpasswd [option] group

【选项与参数】
-A :将 groupname 的主控权交由后面的使用者管理(该群组的管理员)
-M :将某些账号加入这个群组当中
-r :将 groupname 的密码删除
-R :让 groupname 的密码栏失效
-a :将某位使用者加入到 groupname 这个群组当中
-d :将某位使用者移除出 groupname 这个群组当中

例:将testuser1用户加入到testgrp1额外组
# gpasswd -a testuser1 testgrp1

Linux用户与组管理相关的文件说明及常用的命令就简单介绍到这里了,如果想了解更多的用法,请man来帮忙吧。希望能对大家有所帮助!