天天看点

cat命令详解_Linux | 账号管理及命令使用详解引言归属账号管理账号命令

cat命令详解_Linux | 账号管理及命令使用详解引言归属账号管理账号命令

引言

  在Linux系统中,我们常常会看到目录或文件的所属关系:

  其中

root root

就是文件拥有者和群组,root是超管账号,接下来我们来详细学习这些账号相关的概念以及相关命令使用。

归属

文件拥有者

  User:Linux是一个多用户多任务的系统,一个物理机或者虚拟机往往会有很多人同时使用,每个用户在各自的家目录进行操作(如部署自己的应用、存储文件等),这个时候就需要将这些用户进行隔离,权限分开。用户A无权读写用户B的相关目录,用户B无权读写用户A的目录,保证每个人各自的隐私。

群组

  Group:多个使用者需要共享相同的东西,归属于同一个群组,举例来说,一个开发团队,在代码仓库中会属于同一个仓库地址下,这样一个团队的成员可以共享这个仓库地址下的代码进行读写,而其他开发团队的成员无权读写这个团队的代码仓库。

其他人

  Others:其他人这个概念比较好理解,相对于本群组而言,跟其无关的都是其他人。

关系

cat命令详解_Linux | 账号管理及命令使用详解引言归属账号管理账号命令

三种属性关系

  1. 管家相当于root用户,所有幢都可以访问;
  2. 1幢101、1幢201、1幢301都是User,是用户,都有各自单独的家(家目录);
  3. 1幢和2幢都是Group,里面的1幢101、1幢201、1幢301等相当于用户,在一幢可以共享电梯的使用;
  4. 对于1幢而言,2幢就是Others,用不了1幢的电梯;

账号管理

账号识别码

  对于计算机而言,计算机不会认识账号昵称之类的别名,只会识别二进制(0和1),在Linux中也是同样的,主机对于账号只是识别ID。

  登录账号一般有两个ID,一个是

使用者ID

(UDI, User ID),存放在

/etc/passwd

中;一个是

群组ID

(GID, Group ID) ,存放在

/etc/group

中。我们可以通过

id user_name

的方式来查看UID和GID。

  文件或者目录查看属性时,首先会根据

/etc/passwd和/etc/group

的内容,利用UID和GID显示对应账号和群组名称,从而判断自己的拥有者和群组。

使用者账号

账号登录流程

  1. 在Linux系统中输入主机ip,账号和密码;
  2. 系统从

    /etc/passwd

    中寻找输入的账号,若没有找到,则退出;否则,从

    /etc/passwd

    以及

    /etc/group

    将该账号对应的UID与GID读取出来,同时也会读取用户家目录及shell设置;
  3. 系统进入

    /etc/shadow

    中找到对应账号与UID,核对输入密码;
  4. 若账号和密码都核对无误,则进入shell。

/etc/passwd详解

  /etc/passwd是系统用户配置文件,这个文件中存储了系统中所有用户的基本信息。

  该文件是对所有用户都可读的:

  文件结构详解如下:

一共7个字段,每一行中的字段由

:

隔开。第一个一般都是

root

系统管理员账户信息。

  1. 账号名称:登录账号的名称,与UID对应。
  2. 密码:早期Unix系统密码放置在改字段中,后因安全问题,放置密码数据被窃取,改放到

    /etc/shadow

    中,所以这边显示为

    x

  3. UID:账号的使用者识别码。
id范围 id对应使用者的特性
0 (系统管理员) UID=0时,表示该账号为root权限(系统管理员),普通账户的UID改为0即拥有root权限,但不建议修改。
1~999(系统账号) UID=1~999时,即为系统保留的系统账号,用于更小的权限去操作系统中的服务。
1000~60000(可登陆账号) UID=1000~60000时,表示一般使用者的账号。
  1. GID:该信息与

    /etc/group

    相关联,下面会阐述该目录内容的结构。
  2. 使用者信息说明栏:解释说明作用,一般配合

    finger

    使用。
  3. 主文件夹:用户家目录,一般

    useradd userA

    后,会自动为

    userA

    用户创建

    /home/userA

    用户家目录,rott的用户家目录在/root下。
  4. shell:用户登录系统后会取得一个shell与系统核心联系,从而在系统上进行操作。

/etc/shadow文件结构

  /etc/shadow是用于存储 Linux 系统中所有用户对应的密码信息,我们也称为“影子文件”。

  除了root用户,其他用户没有权限访问该文件。

  文件结构详解如下:

  1. 账号名称:与

    /etc/passwd

    对应,账号名称。
  2. 密码:存放加密的密码。
  3. 最近更改密码的累积天数:该字段记录的是变更密码的那天日期,从1970年1月1日作为1开始累积,这个累积的天数可以通过代码进行计算。

  其中,

86400

是一天的秒数,

+1

是为了补齐1970年1月1日那天。

  1. 密码不可被更改的天数:该字段限制了密码从最后一次变更后,需要经过多少天才可以进行变更。若为 ,则表示无限制,可以随时更改密码。
  2. 密码需要重新更改的天数:该字段限制了密码从最后一次变更后,需要经过多少天就应该再次变更。若为

    99999

    ,表示273年,也就是无限制。
  3. 密码需要更改前警告提示的天数:账号密码有效期快到的时候,会提前进行提示警告。
  4. 密码失效时间:密码更新时间(第3字段)+重新变更时间(第5字段)为有效期,过期后,还没有更新密码,密码就会过期。
  5. 账号失效日期:类似于第三个字段进行累计失效日期计算,过期后,账号无法使用。
  6. 保留:保留字段。

群组

  我们在上述的

/etc/passwd

账号配置文件中发现有GID字段, 而这个字段是在

/etc/group

相关联。

/etc/group文件结构

  /etc/group文件存储群组相关配置信息。

  1. 群组名称:群组的名称,与GID对应。
  2. 群组密码:群组的密码,通常给群组管理员使用,一般不设置,密码不会在此显示,会在

    /etc/gshadow

    中显示,在此只会显示

    x

  3. GID:群组的ID,也就是

    /etc/passwd

    第四个字段的GID。
  4. 群组支持的其他账号名称:一个账号可以加入多个群组,当其他账户加入该群组后,会填入到该字段中,逗号隔开。

/etc/gshadow

  /etc/gshadow是存放群组的密码等信息;

  1. 群组名称:对应账户的群组名称;
  2. 群组密码:群组的密码;若开头为

    !

    则表示无合法密码,无群组管理员;
  3. 群组管理员账号:群组管理员的账号名称
  4. 有加入该群组支持的所属账号:群组下所支持的账号,与

    /etc/group

    中的保持一致。
    cat命令详解_Linux | 账号管理及命令使用详解引言归属账号管理账号命令

三文件的关系:/etc/passwd、/etc/shadow、/etc/group

cat命令详解_Linux | 账号管理及命令使用详解引言归属账号管理账号命令

群组分类

  群组分为

初始群组

有效群组

,初始群组就是

/etc/passwd

中的第四个字段中GID对应的群组;有效群组就是某个用户userA可以加入到其他群组userB中,这个群组userB对于这个用户userA来说就是有效群组。

  举例:假设通过

useadd

命令创建了t1和t2用户,然后通过

usermod

命令将t1用户加入到t2群组内。

其中

-G

是指定有效群组。

  1. 我们可以在

    /etc/group

    中看到t1用户已加入到t2群组的第四个字段中。
  1. 我们也可以登录t1账号后,通过

    groups

    命令查看所支持的群组

第一个t1是有效群组,查看到新建的文件的使用者是t1,所属群组也是t1。

  1. 我们可以通过

    newgrp

    来切换有效群组

我们可以看到文件使用者是t1,所属群组是t2。

账号命令

useradd

概述

  

useradd

命令是新建账号命令。

语法格式

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

参数详解

默认配置

  1. GROUP=100

    :新建账号的初始群组使用GID为100(群组为

    users

    );但是CentOS是

    私有群组机制

    ,所以系统会创建一个与账号一样的群组给用户作为初始群组,该系统不会参考100数值。只有遵守

    公有群组机制

    的系统才会参考该数值。
  2. HOME=/home

    :用户主文件夹的基准目录(basedir,用户家目录),用户的主文件夹通常就是与账号同名的目录,目录将会拼接在该设置值的目录后,所以一般用户家目录为

    /home/user_name

    格式。
  3. INACTIVE=-1

    :密码过期后是否会失效,

    -1

    代表密码永远不会失效,若为其他数值

    n

    ,则表示过期

    n

    天后失效。该值对应在

    /etc/shadow

    中的第7个字段。
  4. EXPIRE=

    :账号失效日期,对应

    /etc/shadow

    中的第8个字段,可以设置账号在某个日期后是失效,而不管密码是否失效。默认不设置。
  5. SHELL=/bin/bash

    :默认使用的

    shell程序文件名

  6. SKEL=/etc/skel

    :用户主文件夹参考基准目录,一个新建的账号对应的用户家目录,如

    /home/userA

    这个目录的各个数据都是从

    /etc/skel

    中复制过去,如果在该目录下创建了

    /etc/skel/test

    ,则后续新增用户时,主文件夹中会包含test文件。如下示例:
  1. CREATE_MAIL_SPOOL=yes

    :创建使用者的mailbox,查看路径等信息,可以通过

    cat /etc/login.defs

    查看路径。如下示例查看:

示例

示例1

无参创建:

说明:

  1. /etc/passwd

    中创建一行与账号相关的数据,包含了UID、GID、用户家目录等信息;
  2. /etc/shadow

    中创建一行与账号密码相关的数据,如果没有指定密码,则无密码填入;若需要指定密码,则需要使用

    passwd user_name

    命令来指定密码;
  3. /etc/group

    中创建一行与账号群组相关的数据,加入一个与账号名称一样的群组名称;
  4. /etc/gshadow

    中创建一行与账号群组密码相关的数据,包含群组名称、群组管理密码等信息;
  5. /home

    下创建一个与账号名称相同的用户家目录,用于使用者主文件夹,且权限为

    700(drwx------)

示例2

加参创建:

说明:

  1. -u

    是指定了账号的UID,我们可以看到

    /etc/passwd

    中的第3栏的UID是我们指定的1009;
  2. -g

    是指定了初始群组,我们可以看到

    /etc/passwd

    中的第4栏的GID是群组

    users

    对应的100;因为指定了初始群组,

    /etc/group

    中就不会主动创建与账号同名的群组,所以在

    /etc/group

    /etc/gshadow

    中没有查看到u2相关的数据。

示例3

系统账号:

说明:

  1. -r

    参数代表创建一个系统账号;
  2. /etc/passwd

    中的第3栏看到数字为996,符合规定,1000及以后的号为一般账号,1000之前的号为系统账号;
  3. 由于系统账号主要用于进行运行系统所需服务的权限设置,所以系统账号默认没有创建用户家目录。

useradd命令总结

  useradd命令执行后,会涉及到以下文件或目录的变动:

  1. 用户账号和密码相关文件:

    /etc/passwd,/etc/shadow

  2. 用户群组和密码相关文件:

    /etc/group,/etc/gshadow

  3. 用户的主文件夹(用户家目录):

    /home/账号名称

passwd命令

概述

  

passwd

命令是修改账号密码的命令。

语法格式

  1. root或者账号自己使用:

    passwd [--stdin] [账号名称]

  2. root账号使用:

    passwd [-l] [-u] [--stdin] [-S] [-n 天数] [-x 天数] [-w 天数] [-i 日期] 账号

参数详解

密码一般要求

  1. 密码不能和账号同名;
  2. 密码尽量不要选字典中的字符;
  3. 密码需要超过8个字符;
  4. 密码不要使用个人信息(身份证、手机号、生日等);
  5. 密码不要使用简单的关系式,如1+2=3;
  6. 密码计量使用

    大小写字符

    数字

    、特殊字符(

    $

    ,

    _

    ,

    -

    等)组合。

示例

示例1

无参更改

我们可以看到,不管是过短、还是过于简单都会有提示,一直更改到符合密码规范才会生效。在

/etc/login.defs

中我们可以看到对于密码的一些要求。

cat命令详解_Linux | 账号管理及命令使用详解引言归属账号管理账号命令

示例2

有参更改,通过

--stdin

参数,从标准输入读取令牌(只有根用户才能进行此操作)。

示例3

查询密码状态,通过

-S

参数,报告已命名帐号的密码状态(只有根用户才能进行此操作)

示例4

加解锁密码,通过

-l

锁定,加锁时,查看状态,会出现

LK

状态,查看

/etc/shadow

中的第2个密码栏会发现多了

!!

两个字符;

-u

解锁,解锁后恢复

PS

状态,且

/etc/shadow

中的第2个密码栏会去掉

!!

chage命令

概念

  

chage

命令用于展示更详细的密码参数信息。

语法格式

chage [-ldEImMW] 账号名称

参数详解

示例

说明:

-l

参数可以展示出账号密码相关的时间信息。

usermod命令

概念

  

usermod

命令用于修改账号相关配置。

语法格式

usermod [-cdegGlsuLU] 账号名称

参数详解

示例

说明:通过

-c

参数添加说明信息后,我们可以看到

/etc/passwd

中更新说明生效。

userdel命令

概念

  

userdel

命令用于删除用户账号相关数据。主要涉及如下方面:

  1. 使用者账号/密码相关数据:

    /etc/passwd

    ,

    /etc/shadow

  2. 使用者群组相关数据:

    /etc/group

    ,

    /etc/gshadow

  3. 使用者个人文件数据:

    /home/user_name

    ,

    /var/spool/mail/user_name

    等。

该命令要慎用,真的确认要删除账号及所有数据的时候才使用该命令,否则可以去

/etc/shadow

账号中的

第8个字段

进行设置为

,就可以使账号失效,但数据还在。

语法格式

userdel [-r] 账号名称

参数详解

示例

示例1

不删除用户家目录

示例2

删除用户家目录,使用

-r

参数

groupadd命令

概念

  

groupadd

命令用于添加群组。

语法格式

groupadd [-g GID] [-r] 群组名称

参数详解

示例

说明:要注意的是,不带

-g

时,群组的GID会从1000以上

最大的GID+1

来创建。

groupmod命令

概念

  

groupmod

命令类似于

usermod

命令,用于修改群组group的相关配置参数。

语法格式

groupmod [-g 新GID] [-n 新群组名称] 旧群组名称

参数详解

示例

说明:我们可以看到

/etc/group

/etc/group

中已经不存在g1了。

groupdel命令

概念

  

groupdel

命令用于删除群组。需要注意的是,在

/etc/passwd

中被使用为

有效群组

的群组不能被删除。如:

语法格式

groupdel [groupname]

参数详解

示例

参考

《鸟哥的Linux私房菜》

[每篇微语]

有些人活了一天是一天,有些人活了一天是一瞬间。时间不在于你拥有多少,只在于你怎样使用。

继续阅读