登录Linux时我们都需要输入账号和密码,但Linux只会识别账号所对应用ID号,这个ID号就称为UID。

    同理每个用户组也都拥有相对应的组ID号,即GID。

    Linux根据/etc/passwd文件的内容来查找当前登录用户是否为合法用户。

1.png

    上图中标注的即为root用户所对应的UID和GID。

一、用户账号信息

    1、/etc/passwd文件

        此文件件中每一行为一个用户的信息,以“:”分隔,共七个字段,各字段含义如下:

        1)账号名称

            就是我们用来登录系统的账号名。

        2)密码

            由于/etc/passwd文件任何程序都可以读取,出于安全考虑Linux已经把密码存放在/etc/shadow文件中了,此处只用"x"来占位表示。

        3)UID    

            用户ID;Linux将用户划分为以下几类:

id用户类型用户特性
0管理员可以对系统做任何操作,没人能阻止
1-499系统账号专门用来运行程序的用户,此类用户不可以登录系统

500以上

普通用户可以登录系统的有限权限的用户

        4)GID

            组ID与用户ID的规定相类似,只不过它是用来定义用户组的,与其相关的文件有/etc/group。

        5)信息说明列

            用于描述账号的用途,没有实际作用。

        6)用户家目录

            用于指定用户的家目录的位置。

        7)shell

            指定用户登录系统后使用的默认shell程序,由于系统用户为不可登录用户,其shell为/sbin/nologin;另外,如果指定的shell在/etc/shells文件中不存在,则此用户将无法登录系统。

    2、/etc/shadow文件

        前文提到此文件保存了所有登录用户的密码信息,下面来详细了解一下这个文件的内容:

2.png

        1)账号名称

            与/etc/passwd文件中的账号名称相对应。

        2)密码

            密码以加密的形式存放,sha512加密(centos6),centos5中使用MD5。

        3)最近更改密码的日期

            此字段中的数字表示,从1970年1月1日开始到最后一次修改密码所经过的天数。

        4)密码最少使用天数

            此字段定义了用户在最后一次修改密码后,密码必须使用的天数;0表示随时可以修改。

        5)密码最多使用天数

            此字段定义如果在此时间内没有更改密码的话,密码将会过期,用户登录系统时会被强制要求修改密码。

        6)警告天数

            密码需要修改前的警告天数,在第5个字段到期前,系统根据此字段的设置提醒用户密码所能使用的天数。

        7)密码过期后的宽限时间

            这个字段表示密码过期后的多少天内,如果还没有修改密码,密码将会失效,此用户将无法登录系统了。

        8)账号失效日期

            在指定的日期之后,账号将无法登录系统;日期的指定方法与第3个字段相同。

        9)保留字段

二、组账号信息

    1、/etc/group文件

3.png

        此文件每一行代表一个用户组,以“:”作为字段分隔符,共四列,其含义如下:

        1)用户组名称

        2)用户组密码

            不常用,密码信息被保存在/etc/gshadow文件中。

        3)GID

            与/etc/passwd文件中的第四段对应。

        4)组成员

            此组中所包含的用户。不过从上图可以看到root组中此字段为空,本来root是属于root组的,可是在这里为什么没有显示呢?因为此字段只显示以此组做为附加组的用户列表。

    2、/etc/gshadow

4.png        此文件内容格式与/etc/group相似,各字段含义如下:

        1)用户组名称

        2)用户组密码

        3)用户组管理列表

        4)将此组作为附加组的用户列表

三、账号管理

    1、用户管理

        1)useradd命令

            命令格式:useradd [options] 用户账号名

                -u UID:为用户指定UID;

                -g GID:所属的基本组;

                -G GID:所属的附加组;

                -c ‘COMMENT’:注释信息;

                -d /path/to/somewhere:为用户创建家目录,如果目录存在会警告;

                -s SHELL:指定用户的默认Shell;

                -m:强制给用户创建家目录;

                -M:不给用户创建家目录;

                -r:创建系统用户;

                -e:后跟日期,格式为“YYYY-MM-DD”,指对账号失效日期,对应shadow文件的第八个字段。

            命令演示:

1.png2.png

    从上面的两个例子可以看出,创建用户后其家目录都保存在了/home目录下,我们可以在创建用户时修改家目录的位置。

3.png

    我们来可以指定用户登录时使用的默认shell。

3.png

    下面我们再来看一下useradd的默认值:

[root@localhost ~]# useradd -D

GROUP=100             默认的用户组;

HOME=/home            默认的家目录;

INACTIVE=-1           密码失效时间,对应shadow文件中的第7列;

EXPIRE=               密码过期时间,对应shadow文件中的第8列;

SHELL=/bin/bash       默认登录shell;

SKEL=/etc/skel        默认家目录中的数据源目录;

CREATE_MAIL_SPOOL=yes 是否为用户创建邮箱。

    GROUP=100:

      此设置表示新建的用户其默认的用户组ID为100,但实际情况并不是这样的,我们创建用户时默认的用户组ID与用户ID是相同的。而且GID对应的用户组是users,我们也从来没有见到过此且户组。其实在Linux中用户组有两种机制:私有用户组和公有用户组。

      公有用户组是以GID=100做为新建用户的默认用户组,新建用户都处于同一组中,也就是users组,组中用户可以共享家目录中的数据。

      而CentOS采用的是私有用户组的机制,所以GROUP=100不生效。

    SKEL=/etc/skel:

      我们在创建好用户后,可以在其家目录中发现已经存在一些默认的隐藏目录与文件,如下图所示:

1.png

      这些文件用于定义用户的环境变量,而这些文件就是从/etc/skel目录中复制过来的。

    CREATE_MAIL_SPOOL=yes:

      用户创建后都会自动生成一个与用户对应的邮箱,就是靠此设置控制的。

1.png

      那么如何修改这些默认设置呢?可以通过修改/etc/default/useradd来修改默认值。

4.png

1.png

      上图中将默认的用户家目录改到了/tmp目录中,下面再来创建个新用户:

2.png

        2)passwd命令

            命令格式:passwd  [-k]  [-l] [-u] [-d] [-e] [-n mindays] [-x maxdays] [-w warn-days] [-i inactivedays] [-S] [–stdin] [username]

                不带任何选项:修改当前用户的密码;

                -k:修改密码时要求输入账号现在使用的密码;

                -l:锁定用户;

                -u:解锁用户;

                -d:删除用户密码;

                -e:设置用户密码为过期密码,用户登录时必须修改密码;

                -n:密码最小使用天数,与shadow第4个字段对应;

                -x:密码最大使用天数,与shadow第5个字段对应;

                -w:密码过期前的警告天数,与shadow第6个字段对应;

                -i:密码失效日期,与shadow的第7个字段对应;

                -S:列出与密码有关的相关参数;

                –stdin:可以通过管道进行密码设置。

            命令演示:

            (1)使用默认选项修改用户密码

1.png2.png

            上面两个实例中,root用户修改密码时要求直接输入新的密码即可,如果我们想在修改密码前先输入用户的当前密码,再输入新密码,可以使用-k选项。

            (2)要求root用户修改密码时提供被修改用户的当前密码

3.png

            上图中要求先输入当前的密码,认证不通过的话是修改不了密码的,在普通用户中-k是默认选项。

            (3)查看密码的相关信息:

1.png

            上图中的命令结果是以空格分隔的7个字段,各字段含义如下:

                第一个字段:用户账号名;

                第二个字段:账号的状态;

                第三个字段:密码新建的时间;

                第四个字段:密码最小使用天数;

                第五个字段:密码最长使用天数;

                第六个字段:警告天数;

                第七个字段:密码是否有效;

            (4)锁定账号密码

            如果我们想让某个用户暂时无法使用账号来登录系统,可以将密码锁定,如下所示:

3.png            与之对应的在/etc/shadow文件中test1的密码也发生变化,如下所示:

4.png            (5)解锁账号密码

            使用-u选项即可为用户解锁:

5.png

            (6)清空账号密码

6.png

            (7)设置密码过期

7.png

8.png

            设置密码过期后,用户再次登录系统时会要求修改密码。

            (8)设置密码的使用时限

1.png

2.png

            (9)不使用交互方式为账号设置密码

1.png

        3)chage命令

            命令格式:chage [options] 用户账号名

               -l:显示账号密码的详细信息;

                -d:后接日期,最近更改密码的日期,格式YYYY-MM-DD,对应shadow文件第三字段;

                -m:后接天数,密码最少使用天数,对应shadow文件第四字段;

                -M:后接天数,密码最多使用天数,对应shadow文件第五字段;

                -w:后接天数,密码过期前的警告日期,对应shadow文件第六字段;

                -I:后接天数,密码失效前的宽限期限,对应shadow文件第七字段;

                -E:后接日期,账号失效日期,格式YYYY-MM-DD,对应shadow文件第八字段。

1.png

            4)usermod命令

                用于修改用户的的属性。

                命令格式:usermod [options] 用户账号名

                    -a:以追加的方式将用户添加到附加组,与-G连用;

                    -c:添加账号说明;

                    -d:修改家目录,与-m连用可以保证家目录一定会被创建;

                    -e:后接日期,账号过期日期,格式:YYYY-MM-DD,shadow文件第八字段;

                    -f:密码失效前的宽限期限,shadow文件第七字段;

                    -g:修改用户所在的用户基本组;

                    -G:修改用户所在的用户附加组;

                    -l:修改账号名称;

                    -L:锁定账号;

                    -U:解锁账号;

                    -m:移动家目录中的内容到新的位置,与-d一起使用;

                    -s shell:修改用户的默认shell;

                    -u UID:修改用户的UID;

                命令演示:

                (1)将用户加入一个附加组中;

1.png

                (2)修改用户家目录的位置

1.png2.png3.png

            5)userdel命令

                命令作用:删除用户

                命令格式:userdel [options] 用户账号名

                    -f:强制删除用户,即使用户处于登录状态;

                    -r:同时删除用户家目    二

录;

1.png

    2、组管理

        1)groupadd命令:

            命令格式:groupadd [options] 组名

                -g GID:指定GID;

                -r:创建系统组;

1.png        2)groupmod命令:

            命令格式:groupmod [options] 组名

                -g:修改GID;

                -n:修改组名;

            (1)修改GID

1.png2.png

            (2)修改组名  

1.png

        3)groupdel命令

            命令格式:groupdel group

1.png

三、账号查询与控制

    1、查看用户信息

        1)id命令

            命令格式:id [OPTION]… [USERNAME]         

                -g:显示基本组ID;

                -G:显示所有组ID;

                -u:显示用户ID;

                -n:以名称代替ID显示;            

1.png

        2)whoami命令 1.png    2、查看当前登录系统的用户

        1)w命令           1.png

        2)who命令

2.png

    2、用户信息控制

        1)chfn命令

            命令格式:chfn [option] 用户名

1.png

        2)chsh命令

            命令作用:更改用户默认登录shell。

            命令格式:chsh [-s shell][username]

2.png

四、用户切换

    通常出于安全的考虑,建议使用普通用户来登录系统,在有需要时再切换为管理员进行操作,用户之间的切换有以下几种方法:

    1、使用Ctrl+Alt+F[2-6]键,打开新的终端登录;

    2、使用ssh远程登录时,可以使用不同的用户登录系统;

    3、如果想在同一窗口中进行用户切换,可以使用su命令来实现;

        命令格式:su [OPTION] [USERNAME]

            -,-l:使用登录shell的方式切换用户;

            -c 'COMMAND':使用指定的用户来执行命令;

            -m:使用非登录shell的方式来切换用户;

            -s SHELL:切换用户时指定shell,此shell必须是中/etc/shells中存在的;

        1)使用非登录shell的方式来切换用户。

1.png

        2)使用登录shell来切换用户

1.png        3)使用普通用户查看/etc/shadow文件内容

1.png