写在前面


作为一个运维工程师来讲,系统下的账号管理是工作中很重要的一个环节,所以了解系统的账号管理还是非常有必要的。

首先,我们要知道对于Linux系统而言,它并不知道你是谁,它仅识别用户的ID号,而用户想要登录Linux系统,必须取得两个ID号(uid,gid),用户的名称与uid的映射关系就保存在/etc/passwd。用户想要登录Linux系统,需要两种id,UID和GID(组id),在登录界面,用户输入登录名后一系统首先会判断passwd文件中是否有该用户,没有就跳出,如果有的话就会取出用户的uid,gid等信息,其中最重要的取出用户的shell,判断该shell是否要登录,若可登录再去匹配用户密码,相匹配成功才会登录成功。一个简单登录操作背后有着很繁杂的过程。在用户管理主要有四个配置文件/etc/passwd,/etc/shadow,/etc/group,/etc/gshadow。详细了解这四个文件的配置以及各字段的含义是深入了解Linux账号管理的前提条件。下面笔者写下自己的了解,也许笔者了解的并不完善,可使用 man 5 [config_file]命令查看文档。

/etc/passwd 文件详解

passwd配置文件每行为一个账号记录使用“:”作为分隔符分为七个字段,每个一字段含义分别为【account:password:UID:GID:GECOS:directory:shell】

  1. account 账户名称。

  2. 密码,在Linux系统发展初期,密码放在该字段,由于该文件每个用户都可读,出于安全方面的考虑,把加密后的密码存在shadow中。在该使用X作为密码占位符。(可以使用pwunconv/pwconv两个命令在两种密码存储方式之间进行切换,做完实验后恢复到当前状态)。

  3. 用户在系统下的标识符,在Linux系统下用户可分为三种:管理员,系统用户,一般用户.

    通过uid判断,uid=0时为管理员:

    CentOS6和以前版本,uid在1-500之间,为系统用户;CentOS7版本中,uid在1-1000之间,为系统用户。                                             CentOS6和以前版本,uid大于等于500,为一般用户;CentOS7版本中,uid大于等于1000,为一般用户。

    由于系统根据uid识别用户类型,所以不要轻易改变passwd文件,尤其是管理员用户。

  4. 用户组id,该ID号用户和/etc/group文件相关,对应于组名和gid。

  5. 用户的描述信息。

  6. 用户家目录。

  7. 用户使用的shell类型,当用户shell为/sbin/nologin时,用户不能登录。

/etc/shadow 文件详解

在Linux系统早期设计中并没有shadow文件,账号密码存于passwd的第二个字段,因为很多程序运行需要读取passwd文件,每个用户都必须对该文件用有读权限,虽然密码已经经过加密,但仍然被暴力破解。所以把密码通过加密后存于shadow文件中,这样不仅安全,也方便了用户口令的管理。下面看看shadow文件的文件结构。

shadow文件与passwd相同,使用“:”进行分割各个字段,shadow文件有9个字段,各字段分别代表【账号名称:口令:最近更改口令的日期:口令不可变更的时间:口令需要重新更改的时间:警告更改口令的时间:口令过期后的宽限时间:账号失效时间:无意义(保留)】

1,账号名称。

2,用户的加密口令,用户可以使用authconfig--passalgo=[sha256] -- update命令更改口令加密方式。

3,用户口令最后更改的时间。本时间是从1970年1月1日到更改密码的天数,1970年1月1日是Linux元年(Linux历史小知识)。

4,口令不可更改的时间(以第三字段为基准),如果是0表示口令随时可被更改,若是n,表示在更改口令后n天内不能更改口令。

5,口令需要更改的时间(以第三字段为基准),该字段表示在用户更改口令后n天后需要重新更改口令,否则口令将失效。

6,警告更改口令的时间(以第5字段为基准),这个字段表示在用户需要更改口令的时间之前的n天开始提示警告用户更改口令。

7,口令过期后的宽限时间(以第5字段为基准),在口令过期后,用户在这个时间内可以登录系统,但是必须更改口令才能登录成功。

8,账号失效日期,与第三字段相同,从1970开始计算天数,到期后,账户将失效,该字段优先级大于口令过期日期,到期后,账户不可使用。

9,保留。

/etc/group /etc/gshadow 文件简述

在了解完passwd和shadow配置文件之后,我想对于理解group和gshadow文件已经是什么难事。这里就简述一下两个文件的文件结构含义。

group配置文件也是每行表示一条记录,以“:”作为分隔符,各个字段的含义为:【group_name:passwd:GID:user_list】

gshadow文件各字段含义如下【group_name:passwd:group_adminster:members】

这里有两个值得注意的地方:1,group的用户列表中默认只保存以该组为附加组的成员;2,gshadow文件的members字段必须与group的user_list一致。

只有简单的了解了上面的四个配置文件,才能更好的了解Linux系统的账号管理的功能,下面就来讲讲Linux系统的账号管理,我把该功能分为三个部分来讲,分别为用户管理,口令管理和用户组管理。

用户管理


用户的管理可分为用户的新增,更改,删除。

新增用户

 useradd命令添加少量用户

useradd(adduser)每次只能添加一个用户,用于添加少量用户。在参数未指定时,采取默认方式添加添加用户,默认创建的用户参数信息保存于/etc/default/useradd文件中,下面简单介绍该命令的常用参数。

-b   #指定用户的base_dir ,也就是家目录的上一级目录

-u   #指定用户uid

-o   #不检查uid的唯一性,使用该参数一般都指定已存在的uid,对于系统而言依旧是一个用户,只是登录名不同

-d   #指定用户家目录

-s   #指定用户的默认shell类型

-c  #用户描述信息

-r   #创建系统账号

-g  #指定用户的主组或者gid(每个用户必须要有一个主组,在下文会谈到)

-G   #指定用户的附加组

-D  后面不加参数,输出创建用户的默认参数

-D   [options]  修改创建用户的默认参数

 批量添加用户

在系统中批量添加用户有两种方式:使用newusers命令,脚本批量添加

在使用newusers命令时,后从文件中读取添加信息,批量添加。文件的格式必须与passwd文件的格式完全相同,冒号分隔,冒号为英文半角状态下的符号。

脚本批量依据不同生产环境而言,这里不再详陈。

在默认创建用户参数中有一个/etc/skel的目录文件,在新增用户的家目录下会默认生成该目录下的所有文件,所以管理员可以把一些所有用户需要的文件放置在目录下。

用户信息修改

修改用户信息最常用的命令时usermod,该命令的参数与useradd命令参数含义很多都相同,这里只列出一些常用的与之不同的选项。

-a   #和-G选项配合,增加附加组

-L   #锁定用户,不允许用户直接登录(可以使用su登录),执行该命令后,shadow文件的密码字段前会增加一个“!”,当然,可以修改shadow文件中的该字段,删除!或者密码实现无密码登录(不安全)。

-U   #解除用户锁定,与-L选项相对

-d   #修改用户家目录,但不创建用户家目录

-m   #创建用户家目录,可配合-d实现用户家目录的更改

-l   #更改用户的登录名

-e   #指定用户过期时间,时间格式为yyyy-mm-dd

-f  #指定用户非活动期限

除了使用usermod之外还有一些可以修改用户某些信息的命令,比如可以使用chfn或者finger命令来更改用户描述,使用chsh来更改用户的默认shell等。

删除用户

用户的删除很简单,userdel命令。

-f   #强制删除用户,即使用户在登录状态,也能强制的删除

-r   #删除用户的家目录和邮件目录

在使用userdel命令就像使用rm命令一样危险,要考虑该用户是不是有一些文件后期还要用或者正在使用,所以一般使用默认删除,暂时保留家目录。

口令管理


用户的新增,修改,删除的操作体现在passwd文件的更改,而口令的管理作用的对象就是shadow配置文件。口令的添加也可以逐条添加或者批量添加。

常用命令有passwd命令:

-l  #锁定用户,与usermod -L 功能类似

-u  #解锁用户  与usermod -U类似

-e  #强制用户下次登录修改口令

-n  #指定口令的不可变更时间

-x  #指定口令的需要更改的时间

-w  #指定警告用户修改口令的时间

-i  #指定非活动期限

--stdin   #从标准输入接收用户口令

eq:  echo   "linuxpasswd"|passwd --stdin root

除了passwd之外还有一个chage命令与之类似,想深入了解可使用man chage查看。笔者认为在使用同等功能的命令时,只要熟悉掌握其中一种就好,到深入了解之后可以根据具体环境来判断哪个命令实现更符合自己需求。

除了使用上述两个命令之外,口令还可以批量添加,使用chapasswd 命令,从账号和口令文件读取。该文件有固定格式,每行一个用户,以login_name:passwd格式保存。

用户组管理


上面曾提到一个主组和附加组的概念,这里阐述一下

用户组可分为主要组合附加组两种,对于用户来讲,有且只有一个主要组,也就是说用户必须属于一个主要组也只能属于一个主要组,在用户默认创建过程中会创建一个与用户同名的组,且只包含该用户一个成员,这时这个主要组也称为私有组。对于用户来讲,它可以属于任意多个附加组。属于某个组的成员,自然继承了该组的权限。若属于多个组,对于文件来讲,用户权限是该文件的组权限的累加。

用户组的管理也可分为组的新建,更改和删除和口令管理。常用groupadd,groupmod,groupdel命令管理组。

groupadd   #添加组

-g    #指定gid

-r    #创建系统组    CentOS6    gid<500

CentOS7      gid<1000

groupmod   #修改组信息

-n    #新名字

-g    #新的gid

groupdel   #删除组

#在删除组的过程中若有用户以该组为主要组会删除失败

用户组的口令管理使用gpasswd命令

gpasswd

-a user   #添加某用户到到指定组中

-d user   #从指定组中删除指定用户

-A user1,user2..  #添加管理员列表以逗号分隔

除了上述几个组管理命令外groupmems也可对用户组进行管理,这里不再详述,读者可自行查阅相关文档

在用户组的管理中有时需要临时切换主组,这时会使用newgrp命令,如果用户不在该组中则主要密码,该命令只是临时生效,所有也叫当前有效组的切换。不写入配置文件。在切换后做的操作会永久作用于当前有效组。

杂项

在用户账号管理中有一些经常使用的命令,比如id和su命令

id

-u   #显示uid

-g   #显示gid

-G   #所有组的gid

-n   #显示名称,配合上述三个选项

su   [-] user

-    # 完全切换,等同于用户登录

#不加“-”号,不完全切换,不改变当前工作目录,不读取用户配置文件信息。

vipw     #  ==vim /etc/passwd

vigr     #  ==vim /etc/groups

pwck     # 检查passwd,

grpck    # 检查grpck   这两个命令可以在批量用户是否有格式错误

转载于:https://blog.51cto.com/yangzhiheng/1966474

Linux系统的账号管理相关推荐

  1. linux 修改用户组_linux小白到大神的成长之路:linux系统用户组的管理!

    linux小白到大神的成长之路:linux系统用户组的管理! 本经验由宗龙龙原创,全文共500多字,阅读需要14分钟,如果文中存在错误,还请大家多多指点,我会积极改进的! 上一篇文章为大家详细介绍有关 ...

  2. Linux系统用户账号的管理技巧

    用户账号的管理工作主要涉及到用户账号的添加.修改和删除. 添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户号.用户组.主目录和登录Shell等资源.刚添加的账号是被锁定的,无法使用. 1. ...

  3. 详解Linux系统的用户管理——添加用户、删除用户、查询用户信息、切换用户、用户组

    Linux系统的用户管理 用户管理的规则 添加用户 基本语法 实际案例 细节说明 给用户指定或者修改密码 基本语法 应用案例 删除用户 基本语法 应用案例 删除用户注意事项 查询用户信息 基本语法 应 ...

  4. Linux中的账号管理,用户组管理

    文章目录 Linux中的账号管理,用户组管理 Linux中的账号管理 账号管理的定义 添加用户 删除用户 修改用户 Linux窗口中的前缀代表的意思 切换用户 用户密码设置 用普通用户连接云服务器 r ...

  5. Linux系统之时间管理

    Linux系统之时间管理 一.date命令介绍 1.date帮助 2.查询系统时间 ①查询电脑硬件时间 ②查询UTC时间 ③查询系统时间 ④特定时间格式输出系统时间 ⑤查询电脑所有时间信息 三.修改系 ...

  6. Linux系统的磁盘管理

    Linux系统的磁盘管理 一.环境介绍 1.Linux系统版本 2.系统磁盘情况 二.磁盘介绍 1.磁盘分区理解 2.MBR分区方案 2.GPT分区分区方案 三.分区工具fidsk使用 1.查看磁盘和 ...

  7. Linux系统的进程管理

    Linux系统的进程管理 一.系统进程介绍 1.进程概念 2.进程特点 3.进程类型 二.查看系统进程 1.PS命令 2.查看系统进程 3.ps aux结果说明 4.top命令 ①top命令使用方法 ...

  8. Linux系统的日志管理

    Linux系统的日志管理 一.systemd-journald服务 1.systemd-journald介绍 2.系统日志默认保存路径 3.systemd-journald的配置文件修改 ①配置文件目 ...

  9. Linux系统软件包的管理   3月30日课程

    Linux系统软件包的管理 一. rpm工具 rpm Redhat Package Manager, 设计理念是开放的,不仅仅是在RedHat平台上,在SUSE上也是可以使用的. rpm包名字构成由- ...

最新文章

  1. linux驱动之i2c子系统mpu6050设备驱动
  2. spring amqp rabbitmq fanout配置
  3. 人脸识别技术商用再加速 安企步履坚定
  4. Spring MVC 基础
  5. 【攻防世界002】EasyRE
  6. 那年大一在图书馆作死的大学高数笔记 | 函数和极限
  7. SAP Spartacus运行时错误 - The pipe cxUrl could not be found!
  8. 将Fiddler的服务器证书导入到Java的cacerts证书库里
  9. 多线程锁--怎么理解Condition
  10. 盐城有哪些中专计算机学校,盐城有什么中专学校
  11. 【测试】软件测试分类体系系统学习
  12. select系统调用
  13. linux每天定时开关机,如何实现ubuntu每天定时关机
  14. 关于matlab影像处理imhist直方图均衡化问题
  15. VMware Workstation 12 Pro的安装
  16. 提示java不是内部命令_Win7命令窗口提示“javac不是内部或外部命令”怎么解决?...
  17. 手机计算机快速切换功能,群控系统快速切换多部手机
  18. 河南理工计算机课程表,河南理工大学张威的课程表.doc
  19. 美团(2) - 实战准备
  20. 获取自己所上传资源的下载量

热门文章

  1. 中upload依赖包_upload-labs writeup
  2. python 进位_蓝桥杯-Python-高精度加法
  3. asscess 一条记录更新数据_一条MySQL更新语句是怎么执行的?
  4. 匈牙利命名法为何被淘汰_被称为手表中“蓝血贵族”的百达翡丽,为何会受到如此的追捧?...
  5. login.html错误,创建好login.html文件后,在git bash执行webpack出现错误
  6. macos mysql8_macOS + MySql8 问题
  7. 9个元素换6次达到排序序列_全面讲解十大经典排序算法(Python实现)
  8. php ci controller,Codeigniter – CI_Controller与控制器
  9. QQ for Linux启动闪退问题
  10. WINDOWS系统自动登录设置