1.Linux用户管理、用户类型、认证机制、用户相关配置文件

1.1用户和用户组的概念及用户类型 用户:这里的用户是计算机识别个体的专用标识。可以是用户名、密码、或者计算机识别标识的一种机制,而这种机制最终要转换为计算机的唯一使用标志。我们把它称之为用户ID。 用户分为三类:超级用户,普通用户,虚拟用户 超级用户:root uid=0.权利无限大,神一样的存在。 虚拟用户:存在linux中,满足文件或者程序运行的需要,而创 建的。不能登录,不能使用。uid=1-499,1-999(centos7) 。 比如:bin:x:1:1:bin:/bin:/sbin/nologin 普通用户:管理员root创建的用户。uid=500+,1000+(centos7)。 用户组:具有相同特征的用户的集合。一个组可以包含多个用户,每个用户也可以属于不同的组。用户组的目的方便管理员对用户进行集中管理。用户组也分为两类:系统组和普通组。 用户和用户组的关系: 一对一:一个用户存在一个组,也可以是组中唯一成员 一对多:一个用户属于多个组,只有一个主组,其余为附加组 多对一:多个用户存在于一个组 多对多:多个用户可以存在多个组 1.2认证机制 认证(Authentication)通常是通过某种识别技术将其于当前系统上某个用户标识关联起来的过程。认证通过并不意味着结束,我们还需要授权(Authorization),授权是用户身份通过后限制系统上的资源使用操作,包括创建删除等。最后还需要审计(Audition),审计是监督权限来判断用户的授权使用是否合理。故称为3A Authentication认证:识别资源与用户的关系 Authorization授权:创建删除等 Auditon审计:监督权限关系

因此,对操作系统来讲,安装完操作系统后首先要输入用户名和密码登录进来。

  1. 登录后系统能够自动的根据用户名来进行授权,linux的授权机制相对来说还是比较薄弱的,它的层次很简单只有2级分配机制,只有管理员和普通用户两类,管理员能够管理全局权限,普通用户对于系统级的资源只有读取权限和使用权限对于自己的资源有全部权限。

  2. 系统还会对每一个文件附加属主、属组和其它访问权限,从而完成用户到资源映射。属主通常意味着用户是这个资源的拥有者,一般会有完全支配的权限。

  3. 每一个用户对于系统上的资源使用尤其是登录认证后资源使用过程会记录到日志文件上。对于操作系统它没有对用户的每一步操作作审计,如果想做这种审计可以利用第三方机制来实现,比如在系统安装一个全局审计的系统,任何用户的操作都会记录下来,比如SELINUX。系统所有的日志都在 /var/log ** 1.3用户相关配置文件** /etc/passwd 用户及其属性信息 我们可以使用cat命令查看配置文件,下图截取了一部分。

第一列(以冒号为分隔符):用户名 第二列:密码位 第三列:UID号 CentOS6 1-499为系统用户,预留 CentOS7 1-999为系统用户,预留 第四列:**GID号 ** 主组和辅助组 第五列:用户全名或注释 第六列:用户的家目录 第七列:用户默认的shell类型


/etc/group 组及其属性信息

第一列:组名称 第二列:组密码,通常不需要设定 第三列:GID CentOS6 1-499为系统组,预留 CentOS7 1-999为系统组,预留 第四列:以该组为附加组的用户列表


/etc/shadow 用户密码及其相关属性

第一列:用户名 第二列:密码位 $加密方式$salt$password
!!代表账户被锁定 第三列:更改密码时间(天数计算)—距离1970年1月1号时间 第四列:密码最短口令有效期 第五列:口令过期时间,更改口令往后的时间 第六列:口令到期前提前多少天提醒 第七列:口令过期后多少天账户过期 第八列:帐号的有效期


/etc/gshadow 组密码及其相关属性

第一列:组名 第二列:组密码 第三列:管理员列表,可以更改组密码和成员 第四列:将该组作为辅助组的成员列表

2. 用户管理命令useradd,usermod,userdel及解析库文件/etc/passwd

2.1用户创建:useradd useradd -u UID:定义在/etc/login.defs -g GID:指明用户所属基本组,可为组名,也可为GID -c 用户的注释信息 -d 以指定的路径为家目录 -s 指明shell -M 不建家目录 -s 指定用户的默认shell -e 用户过期时间 -G 为用户指明附加组,组须事先存在


2.2修改用户的基本信息:usermod usermod -u UID: 新UID -g GID: 新主组 -G 新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项 -s 新的默认SHELL -c 新的注释信息 -d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项 -l: login_name: 新的名字 -L: 锁定用户密码,使密码无效; -U: 解除密码锁定。


2.3删除给定的用户:userdel userdel -f:强制删除用户,即使用户当前已登录; -r:删除用户的同时,删除与用户相关的所有文件。


2.4.1解析库文件/etc/passwd 3./etc/passwd :用户信息库,名称解析库

name:password:UID:GID:GECOS:directory:shell

~]# man 5 passwd name : 用户名 password : 可是加密密码;占位符x表示密码存在/etc/shadow中;如果是“!”说明此用户不能用密码登录;或者是 * 号; 细节man 5 passwd;man pwconv(密码转换) UID : 就是用户识别码(ID) GID : 用户所属的主组的ID号;与/etc/group文件有关; GECOS : 可选;注释信息 directory : 用户的家目录; shell:用户的默认shell,登录时默认shell程序;

[root@node01 ~]# cat /etc/passwd root:x:0:0:root:/root:/bin/bash


2.4.2解析库文件/etc/shadow:用户密码相关;包括用户期限信息(密码的真正所在地) root:$1$HDHf2v4i$LMo.xGHfxQDOf8e043C.g/:16779:0:99999:7::: * ~]# man 5 shadow 格式(九段):用户名:加密的密码:最近一次修改密码的时间:最短使用期限:最长使用期限:警告期段:过期宽限时间:账号失效日期:保留字段 username:password:last_change:min_change:max_change:warm:failed_expire:expiration:reserved 用户名:加密的密码:最近一次修改密码的时间:最短使用期限:最长使用期限:警告期段:密码禁用期:过期期限:保留字段
* username : 用户名 password : 加密密码;系统用户是不能登录的,密码字段为星号(*);两个感叹号(!!)表示这个用户被锁定了,无法登录;美元符号($)出现在加密格式的密码里,起到分隔作用;由三部分组成的,以$分隔,即:$id$salt$encrypted $数字$随机数$加密后的密码串;第3个 $ 分隔的才是真正的密码串;id表示加密算法,当id为1时,使用md5加密,以此类推,id为6采用SHA512进行加密。 last_change : 最近一次修改密码的时间,相对时间计时法, 1970.01.01;0表示用户下次登录时更改密码;空字段为密码期限禁用; 可以用awk转换,如 echo "17546" | awk '{print strftime("%F")}' min_change : 最短使用期限;密码更完后使用一段时候后才能改密码;0或空表示没有限制; max_change : 最长使用期限;从上次更改密码后,最长使用时间;超过后进入密码警告期段;默认99999天 warm : 警告期段;参考最长使用期限,在最长使用期限前警告时段内天警告 failed_expire : 密码禁用期;参考以上,密码过了宽限期,密码锁定; expiration : 用户过期期限;不同于密码过期;账户过期时,用户将不被允许登录;密码过期时,用户将不被允许使用其密码登录。 reserved : 保留字段

密码存储格式:单向加密,并借助于salt完成 1: md5 sha1 sha224 sha256 sha384 6: sha512

如,查看cetnos用户密码信息 [root@node01 ~]# cat /etc/shadow centos:$6$lLZBCZMe$.AjEoX0iR.kPWZRIms30tjq3KbAr5vn3Is/d6uBe78Lx9lz4vjKTUJxluFow79dBoqmowXYADjR.X8iomGu6B1:17546:0:99999:7:::

[root@node01 ~]# echo "17546" | awk '{print strftime("%F")}' #转换最近一次修改密码时间为易读时间 2018-01-16

3. 用户组管理类命令groupadd,groupmod,groupdel及解析库文件/etc/group

3.1 创建一个新的工作组:groupadd groupadd -g:指定新建工作组的id; -r:创建系统工作组,系统工作组的组ID小于500; -K:覆盖配置文件“/ect/login.defs”; -o:允许添加组ID号不唯一的工作组。 3.2更改群组识别码或名称:groupmod -g<群组识别码>:设置欲使用的群组识别码; -o:重复使用群组识别码; -n<新群组名称>:设置欲使用的群组名称。d 3.3用于删除指定的工作组:groupdel groupdel groupdel 组名 删除组.

4. 用户认证命令passwd、gpasswd及其它相关命令chage、id、su

passwd命令用于设置用户的认证信息 -d:删除密码,仅有系统管理者才能使用; -f:强制执行; -k:设置只有在密码过期失效后,方能更新; -l:锁住密码; -s:列出密码的相关信息,仅有系统管理者才能使用; -u:解开已上锁的帐号。 gpasswd -a:添加用户到组; -d:从组删除用户; -A:指定管理员; -M:指定组成员和-A的用途差不多; -r:删除密码; -R:限制用户登入组,只有组中的成员才可以用newgrp加入该组 例如: [root@centos7 ~]#gpasswd -a ma -g zhu Adding user ma to group zhu #将用户ma添加到组zhu中 [root@centos7 ~]#gpasswd -d ma -g zhu Removing user ma from group zhu #将用户ma从组zhu中删除

groupmems[options] [action] options -g 更改为指定组 actions -a 指定用户加入组 -d 从组中删除用户 -p 从组中清除所有成员 -l 显示组成员列表 案例: [root@centos7 ~]#groupmems -g admins -a ma [root@centos7 ~]#groupmems -g admins -a zhu #将ma和zhu用户添加到admins中 [root@centos7 ~]#groupmems -g admins -l #查看admins中的用户列表 ma zhu [root@centos7 ~]#groupmems -g admins -d ma #将ma从admins中删除 [root@centos7 ~]#groupmems -g admins -l zhu [root@centos7 ~]#groupmems -g admins -p #清空admins中的所有组成员 [root@centos7 ~]#groupmems -g admins -l

groups 查看用户所属组列表 [root@centos7 ~]#groups ma ma : ma root@centos7 ~]#groups zhu zhu : zhu chage命令是用来修改帐号和密码的有效期限

-m:密码可更改的最小天数。为零时代表任何时候都可以更改密码。 -M:密码保持有效的最大天数。 -w:用户密码到期前,提前收到警告信息的天数。 -E:帐号到期的日期。过了这天,此帐号将不可用。 -d:上一次更改的日期。 -i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。 -l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。 id命令可以显示真实有效的用户ID(UID)和组ID(GID) id [-gGnru][--help][--version][用户名称] -g或--group   显示用户所属群组的ID。 -G或--groups 显示用户所属附加群组的ID。 -n或--name   显示用户,所属群组或附加群组的名称。 -r或--real   显示实际ID。 -u或--user   显示用户ID。 -help   显示帮助。 -version   显示版本信息

su命令用于切换当前用户身份到其他用户身份 -c<指令>或--command=<指令>:执行完指定的指令后,即恢复原来的身份; -f或——fast:适用于csh与tsch,使shell不用去读取启动文件; -l或——login:改变身份时,也同时变更工作目录,以及HOME,SHELL,USER,logname。此外,也会变更PATH变量; -m,-p或--preserve-environment:变更身份时,不要变更环境变量; -s<shell>或--shell=<shell>:指定要执行的shell; --help:显示帮助; --version;显示版本信息。