Cisco开发并建立了AAA认证体系:

Authentication:认证,核实使用者身份;

Authorization:授权,对已经核实身份的使用者进行资源分配;

Accounting:审计,监管资源被使用的情况;

其发起者;每个进程上都会标记上其所有者的身份信息;


当进程试图访问资源的时候,安全上下文会比对进程的所有者和资源的所有者之间的关系:

首先,查看进程的所有者是否和资源的所有者为同一用户,如果是,就按照所有者拥有的权限来使用资源;


如果不是,则判断进程的所有者是否属于该资源所属组的成员;如果是,按照所属组的权限来使用资源;


如果不是,就按照最为普通的其他用户的权限来使用资源;


用户账户:实现操作者和计算机交互式操作的基础,是操作者的身份在满足了验证条件之后的计算机系统中的映射;


用户账户分类:

超级用户(管理员):root

普通用户:

系统用户(非登录用户):

为了保证安全,往往会让某些进程或服务必须以非管理员的用户身份运行;这类非管理员用户,称为系统用户;此类用户一般不允许登录到系统的;

登录用户

能够通过登录行为验证用户身份进而获得资源访问权限并可以对资源进行操作的用户,可以称为登录用户;


用户账户的标识方式:

用户登录名称:

为操作者提供的简单易记的字符串标识;

用户的数字ID(UID):

为计算机操作系统提供的标准的数字标识符号,0~2^32-1


超级用户:

用户名:root


UID:0


普通用户:

系统用户:

CentOS 6-:1~499

CentOS 7+:1~999

登录用户

CentOS 6-:500+

CentOS 7+:1000+

注意:60000+的UID通常需要用户自定义标识;


名称解析:

用户名 <--> UID


用户名解析库:/etc/passwd

操作系统中的认证组件通过解析库实现认证机制,即验证登录用户是否为已经存在的用户;


用户的认证库:/etc/shadow

通过此前的解析库认定用户是存在的,再经过认证库的认证,来证明登录用户就是其声明的用户;


默认的认证机制:密码认证;


密码复杂性要求:

1.尽量避免使用有规律的或者来源于字典中的字符串作为密码;

2.密码要足够长,一般不得少于6个字符;

3.密码要足够复杂,其中应该至少包括大写字母,小写字母,数字及其他符号中的三类;

4.不定期更换,每隔一段时间进行密码更换;


在Linux中,保存到认证库的密码是经过单向加密算法处理过的;

能够加密密码的算法:

MD:

MD5,Message Digest Version 5,消息摘要算法第5版;

128位定长输出;

SHA:Secure Hash Algorithm,安全的哈希算法;

sha1:160加密输出

sha224:

sha256:

sha384:

sha512:默认的加密算法;


salt:通过随机算法计算得到的随机数;


随机数的生成装置:

/dev/random:

仅仅从熵池中返回随机数;如果熵池中随机数耗尽,进程会被阻塞;

/dev/urandom:

首先试图从熵池中返回随机数,如果熵池中随机数耗尽,则利用伪随机数生成器生成伪随机数;


在认证库中的密码的最终形态:算法+salt+加密字符串;

算法:$1~$6

salt:$随机字符串

加密字符串:$单向加密的结果


组账户:将具有某些相同或相似属性的用户联系在一起以便可以集中授权的容器;

组的分类:

超级用户组

普通用户组:

系统用户组

登录用户组


组账户的标识方法:

组账户名称:

组账户ID(GID):

超级用户组:0

系统用户组:

CentOS 6-:1~499

CentOS 7+:1~999

登录用户组:

CentOS 6-:500+

CentOS 7+:1000+


组名解析:

解析库:/etc/group

认证库:/etc/gshadow


组也需要使用密码加密保护;


用户账户和组账户之间的关系:

在Linux中,每个用户必须至少属于一个组;

用户账户的GID标识被称为用户的主要组(基本组),Primary Group;每个用户必须要有主要组,而且只能有一个;


在主要组的基础之上,用户可以与其他的组账户存在逻辑关系,此类组称为用户的附加组(附属组,额外组),Addtion Group;对于用户来说,此类组可以没有,也可以有多个;


用户和组的管理命令:

组账户的管理命令:

groupadd、groupdel、groupmod

用户账户的管理命令:

useradd、userdel、usermod

认证相关的命令:

passwd、gpasswd

其他的相关命令:

chage,chsh,finger,su,id


与用户和组相关的命令:

1.groupadd

groupadd - 创建一个新组

格式:groupadd [Options...] group

常用选项:

-g GID:指定要创建的组的GID;

-r:将组创建为系统组,此时应该保证GID在系统组范围内;

[root@localhost ~]# tail -1 /etc/group
wtt:x:1699:

2.groupdel

groupdel - 删除一个组

格式:groupdel [Options...] group

[root@localhost ~]# groupdel wtt
[root@localhost ~]# tail -10 /etc/group
groupw:x:1001:
centos:x:1111:qhdlink,fedora
varnish:x:1112:qhdlink
qhdlink:x:1113:
distro:x:1114:fedora
peguin:x:1115:fedora
fedora:x:5001:
mydisk:x:808:
wcdmw:x:1369:
group5:x:5002:

注意:如果某个组是某个用户的主要组,则该组不能删除;

[root@localhost ~]# groupadd group5
[root@localhost ~]# useradd -g group5 user123
[root@localhost ~]# groupdel group5
groupdel:不能移除用户“user123”的主组

3.groupmod

groupmod - modify a group definition on the system

格式: groupmod [Options...] group

常用选项:

-g GID:修改指定组的GID;

-n GROUP_NAME:修改指定组的组帐户名称;

[root@localhost ~]# tail -1 /etc/group
group5:x:5002:
[root@localhost ~]# groupmod -g 1399 group5
[root@localhost ~]# tail -1 /etc/group
group5:x:1399:

[root@localhost ~]# groupmod -n ggg group5
[root@localhost ~]# tail -1 /etc/group
ggg:x:1399:

4.useradd

useradd - 创建一个新用户或更新默认新用户信息

格式:useradd [选项] username

useradd -D [选项]

常用选项:

-c, --commentCOMMENT:为用户添加注释信息;

-d, --homeHOME_DIR:为用户指定家目录的路径;此目录不能事先存在;

-e, --expiredateEXPIRE_DATE:用户密码的过期的绝对时间;

-f, --inactiveINACTIVE:为用户指定密码使用达到最大时间之后的宽限期;

-g, --gidGROUP:为用户指明GID;如果不写此选项,系统会创建一个与用户名相同的组并且将之设置为诶此用户的主要组;

-G, --groupsGROUP1[,GROUP2,...[,GROUPN]]]:为用户添加附加组;

-m, --create-home:必须为用户创建家目录;

-M:不为用户创建家目录;在创建系统用户时常用此选项;

-r, --system:创建系统用户;

-s, --shellSHELL:为用户指定默认的shell;

-u, --uidUID:为用户指定UID;

[root@localhost ~]# groupadd wc1
[root@localhost ~]# groupadd wc2
[root@localhost ~]# groupadd wc3

[root@localhost ~]# useradd wcca -c "自定义组" -d /wchome -g wc1 -G wc2,wc3 -s /bin/bash
[root@localhost ~]# tail -1 /etc/passwd
wcca:x:5005:5005:自定义组:/wchome:/bin/bash
[root@localhost ~]# tail -1 /etc/shadow
wcca:!!:17478:0:99999:7:::
[root@localhost ~]# tail -3 /etc/group
wc1:x:5005:
wc2:x:5006:wcca
wc3:x:5007:wcca

5.userdel

userdel - 删除用户账户和相关文件

格式:userdel [选项] username

常用选项:

-r, --remove:删除用户的同时删除用户的家目录及用户邮箱文件;


6.usermod

usermod - 修改一个用户账户

格式:usermod [选项] username

常用选项:

-c, --commentCOMMENT:修改用户的注释信息;

-d, --homeHOME_DIR:修改用户的家目录;(一般不修改)

-e, --expiredateEXPIRE_DATE:修改用户密码过期的绝对日期;

-f, --inactiveINACTIVE:修改用户密码过期之后的宽限期;

-g, --gidGROUP:修改用户的主要组(GID);

-G, --groupsGROUP1[,GROUP2,...[,GROUPN]]]:修改用户的附加组为此列表中的组,如果同时使用了-a选项,则保留原有的附加组,将此列表中的组追加至用户的附加组列表;

-l, --loginNEW_LOGIN:修改用户的登录名;

-s, --shellSHELL:修改用户的登录shell;

-u, --uidUID:修改用户的UID;

-L, --lock:锁定用户;

-U, --unlock:解锁被usermod -L锁定的用户;

[root@localhost ~]# usermod -L wcca
[root@localhost ~]# tail -1 /etc/shadow
wcca:!$6$Sbizxdhy$t2GFCHMC5fLLplDphqDaitLbFNy/wOFLVqAWhTaFBS3Y6b73h5Y3WHcEMCiuTcD8FVCyVyIiwdGwkixFqri5O0:17478:0:99999:7:::
[root@localhost ~]# usermod -U wcca
[root@localhost ~]# tail -1 /etc/shadow
wcca:$6$Sbizxdhy$t2GFCHMC5fLLplDphqDaitLbFNy/wOFLVqAWhTaFBS3Y6b73h5Y3WHcEMCiuTcD8FVCyVyIiwdGwkixFqri5O0:17478:0:99999:7:::

可见 usermod命令锁定和解锁用户,是在shadow密码位前面添加一个"!",使得密码失效

7.passwd

passwd - update user's authentication tokens更新用户的认证令牌

格式:passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]

常用选项:

-l, --lock:锁定用户;

-u, --unlock:解锁用户;

--stdin:通过标准输入接受密码,可以用于管道;

-d, --delete:删除用户的密码,也可以用于解除用户锁定;

-e, --expire:直接设置用户密码过期;

-n, --minimum DAYS:用户密码的最短使用时长;默认值为0;

-x, --maximum DAYS:用户密码的最长使用时长;默认值为99999;

-w, --warning DAYS:用户密码过期之前多少天开始发送警告信息;

-i, --inactive DAYS:用户密码过期之后的宽限期;

-S, --status:查看用户密码的状态信息;

注意:如果不在passwd后面加任何参数则修改当前用户的密码,修改密码只能通过根用户修改

[root@localhost ~]# echo 147|passwd --stdin wcca
更改用户 wcca 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[wcca@localhost ~]$ passwd
更改用户 wcca 的密码 。
为 wcca 更改 STRESS 密码。
(当前)UNIX 密码:
12313passwd: 鉴定令牌操作错误
[root@localhost ~]# passwd -l wcca
锁定用户 wcca 的密码 。
passwd: 操作成功
[root@localhost ~]# tail -1 /etc/shadow
wcca:!!$6$Sbizxdhy$t2GFCHMC5fLLplDphqDaitLbFNy/wOFLVqAWhTaFBS3Y6b73h5Y3WHcEMCiuTcD8FVCyVyIiwdGwkixFqri5O0:17478:0:99999:7:::
[root@localhost ~]# passwd -u wcca
解锁用户 wcca 的密码。
passwd: 操作成功
[root@localhost ~]# tail -1 /etc/shadow
wcca:$6$Sbizxdhy$t2GFCHMC5fLLplDphqDaitLbFNy/wOFLVqAWhTaFBS3Y6b73h5Y3WHcEMCiuTcD8FVCyVyIiwdGwkixFqri5O0:17478:0:99999:7:::

passwd与usermod的锁定相似,在shadow密码位前加"!!"
8.chage

chage - 更改用户密码过期信息

格式:chage [选项] username

常用选项:

  -d, --lastday 最近日期        将最近一次密码设置时间设为“最近日期”

  -E, --expiredate 过期日期     将帐户过期时间设为“过期日期”

  -h, --help                    显示此帮助信息并推出

  -I, --inactive INACITVE       过期 INACTIVE 天数后,设定密码为失效状态

  -l, --list                    显示帐户年龄信息

  -m, --mindays 最小天数        将两次改变密码之间相距的最小天数设为“最小天数”

  -M, --maxdays 最大天数        将两次改变密码之间相距的最大天数设为“最大天数”

  -R, --root CHROOT_DIR         chroot 到的目录

  -W, --warndays 警告天数       将过期警告天数设为“警告天数”


9.chsh :登录shell

chsh - change your login shell == usermod -s 

格式:chsh [-s shell] [-l] [-u] [-v] [username]

[root@localhost ~]# chsh -l
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh

[root@localhost ~]# chsh -s/bin/bash
Changing shell for root.
Shell changed.

10.finger 用户信息的查看程序

finger — user information lookup program

格式:finger [-lmsp] [user ...] [user@host ...]


11.id

id - print real and effective user and group IDs

格式:id [OPTION]... [USER].0

常用选项:

-u:显示用户的有效UID;

-g:显示用户的有效GID;

-n:显示名称;

uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@localhost ~]# id -u
0
[root@localhost ~]# id -g
0

12.su

su - run a command with substitute user and group ID

格式:su [options...] [-] [user [args...]]

常用选项:

-, -l, --login:以后面的用户身份登录到系统;

-c "COMMAND":以前面指定的用户身份运行COMMAND;不进行身份登录切换