一、Linux用户基本概念

1、 3A认证机制

计算机如何区分不同的使用者呢 ? --->  用户标识(用户名、GID)、密码; 

认证信息:通过比对事先存储的,与登录时提供的信息是否一致

  • Authentication: 认证机制,通过某种方案来确认用户是其声称的用户,如密码、生物识别等

  • Authorization: 授权机制, 资源使用级别(Linux只有管理员和普通用户两级分配机制,权限)

  • Audition: 审计机制,监督权限的使用 ,log审计凭据---额外审计功能SELinuse


2、 用户分类

用户标识: UserID, UID,   16bits 二进制数表示,也就是: 0 - 65535

Linux内核(2.6.x)已经可以支持到2^32 - 1 个标识符。

  • root : 0

  • 普通用户: 1 - 65535

    • 系统用户: 1-499(CentOS 6) ;  1-999(CentOS 7)

    • 登录用户: 500 - 60000(CentOS 6) ; 1000 - 60000 (CentOS 7)


3、 用户配置文件

Linux用户和用户组基本概念_第1张图片

(1) 用户信息库: /etc/passwd

格式(七段):accountpasswordUIDGIDGECOSdirectoryshell

account: 用户名

password:占位符x;

UID:用户的ID号

GID:用户所属的主组的ID号;

GECOS:注释信息

directory:用户的家目录;

shell:用户的默认shell,登录时默认shell程序;


(2)密码存储位置: /etc/shadow

格式(九段):用户名:加密的密码最近一次修改密码的时间最短使用期限最长使用期限警告期段过期宽限时间:账号失效日期:保留字段

  • login name用户名

  • encrypted password:经过编码的密码

  • date of last password change:密码最近一次修改密码的时间

  • minimum password age:密码最短使用期限

  • maximum password age:密码最长使用期限:表示两次修改密码的最长间隔。

  • password warning period警告时间:表示在密码快要过期之前的多少天开始警告用户修改密码。

  • password inactivity period:过宽限时间:表示在密码过期以后,还允许用户登录的时间,只不过在这段时间里登录系统以后就必须要修改密码才能使用系统。

  • account expiration date:账号失效日期,该账号被禁用

  • reserved field保留字段

(3)创建新用户默认属性: /etc/default/useradd

# useradd defaults file
GROUP=100                # 创建组
HOME=/home               # 默认家目录
INACTIVE=-1              
EXPIRE=
SHELL=/bin/bash          # 默认shell
SKEL=/etc/skel           # 默认家目录的文件
CREATE_MAIL_SPOOL=yes    # 自动创建mail


用户组

1. 用户组(用户容器)的分类

组标识:GroupID, GID

16bits二进制数字:0-65535

 (1)系统视角:管理员用户组&普通用户组

    管理员组:0

    普通用户组:1-65635

            系统用户组:1-499(CentOS6), 1-999(CentOS7)

            登录用户组:500-60000(CentOS6), 1000-60000(CentOS7)        

(2)用户视角:基本组&附加组

    用户的基本组:用户本身所属组

    用户的附加组:用户额外所支持的组


有效组:

## 查看用户所属的组,第一个为有效用户组
# groups                   

##切换有效组为其他辅组
# newgrp GROUP

其实这个命令导致创建了一个子shell。


三、密码相关策略


1. 加密算法

        (1)对称加密算法:加密和解密使用同一个密码;

Linux用户和用户组基本概念_第2张图片


        (2)非对称加密算法:加密和解密使用的一对儿密钥

Linux用户和用户组基本概念_第3张图片

    密码对:公钥(pubic key)、私钥(private key),一个公钥对应一个私钥。公钥加密,私钥解密。私钥加密,公钥解密。

        (3)单向加密:只能加密、不能解密,提取数据特征码

不可逆算法,常用语数据完整性校验,速度是非对称加密的1000

单向加密的特性:

1、定长输出:生成的加密密码长度是一定的

2、雪崩效应(蝴蝶效应):任何passwdsallt微小改变,加密后结果发生巨大改变

3、不可逆

4、明文一致,加密后密文也一致


【单向加密算法】

MD5(Message Digest)消息摘要, 128bits(2^128种变化,16进制输出)

SHA(Secure Hash Algorithm )安全的哈希算法, 160bits

扩展: sha224sha256sha384sha512


SALT添加的随机数:不同用户密码相同,随机数不同加密结果相差甚远


让我们来看一下 /etc/shadow

wKiom1beDubSuVukAAAXEZppFlE327.png

密码:!! ,表示此用户被禁用、锁定,禁止登陆系统

技巧:如果要临时禁止某个用户登陆,可以在其密码前面加上!!或其他字符。根据单向加密算法的特性,只要密码长度不一致,就无法匹配。


  • 加密后的密码由三部分组成,由$分隔:

第一个$后的部分: 1-6的数字表示加密算法(md5,sha1,sha224,sha256,sha384,sha512),从左到右1-6。

第二个$后的部分: salt,加点盐。加了防止两个用户是一样的密码的情况,这样加密后的字符串也是一样的,一个用户看到另一个用户跟自己的字符串一样,也就知道那个用户的密码了。

密码与salt组合在一起加密所生成的字符串。

第三个$后的部分:就是用户输入的 key


    Linux密码通常采用的是MD5方式加密,根据MD5加密特性(原始数据相同,加密后生成的密文也相同),就会出现以下情况:假设两个用户使用的密码都是123456,当甲发现乙加密的密码和自己的密码一样,那么他就可以知道乙的密码也是123456

 那么,为什么两个不同的用户,使用相同的密码,而/etc/shadow中的密码字段不同呢?

操作系统为用户的密码再加上salt

key is a user's typed password.

salt is a two-character string chosenfrom the set [a-zA-Z0-9./].  This

string  is used to perturb the algorithm in one of4096 different ways.


2.密码使用策略

         (1) 使用随机密码;

         (2) 最短长度不要低于8位;

         (3) 应该使用大写字母、小写字母、数字和符号四类字符中至少三类;

         (4) 定期更换;

          (5) 循环周期足够长

可以 使用 名言、古诗等方式,缩写设定密码


四、密码相关命令

useradd、usermod、userdel、passwd

groupadd、groupmod、groupdel、gpasswd

id:显示用户的信息和有效ID;

suswitch user,切换用户

newgrp:临时切换指定的组为基本组,使用exit退出


手动创建一个用户:                                    

编辑/etc/passwd,编辑/etc/group,编辑/etc/shadow 创建/etc/username目录,

复制/etc/skel /home目录, 然后重命名为username


为什么这么操作呢?因为/etc/skel 目录下,都是隐藏文件,不好操作

# cp –a /etc/skel /home

# mv /home/skel /home/myuser

修改权限及属主信息, 利用passwd命令改变密码。

# chown –R myuser:myuser /home/myuser

# chmod 700 /home/myuser