一、linux用户和组管理

1.用户、组和权限管理

每个使用者:用户

每个使用者:

用户标识、密码

认证Authentication:身份识别

授权Authority:对应相应的权限

审计Account/Audition:是否符合条例

3A

Linux授权比较薄弱:还有级{管理员和普通用户}

日志主要用于审计,可以借助于其他软件实现审计功能

组:用户组//用户的容器,把多个用户合并在一起,成为一个逻辑组件

用于实现集体授权等。

用户类别:

管理员:0

普通用户:1-65535

系统用户:1-4999(centos6),1-9999(centos7)

登录用户:500-60000(Centos6),1000-60000(Centos7)

默认是到60000

用户标识:UserID,UID //使用

16bits二进制数字:0-65535

名称解析:

登录时的用户名到UID//计算机更容易识别数字

Username 《---》 UID

根据名称解析库进行:/etc/passwd

2.组类别

管理员组

普通用户组

系统组

登录组

组标识:GroupID,GID

管理员组:0

普通用户组:1-65535

系统用户组:1-499(Centos6),1-999(Centos7)

等咯用户组:500-60000(Centos6),1000-60000(Centos7)

名称解析:groupname 《--》 gid

解析库:/etc/gpasswd

组类别2:

一个用户可以有多个组

主组:primary group

附加组:attached group

组类别3:

私有组:组名通用户名相同,且只包含一个用户

公共组:组内可以包含多个用户

3.认证信息:

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

passwd

/etc/shadow

/etc/gshadow

密码的使用策略:

1.使用随机密码

2.最短长度不要低于8位

3.应该使用大写字母,小写字母,数字和标点符号四类字符至少三类

4.定期更换密码

注意:

密码不能明文存放

最好是加密的

加密机制最好是不可逆的

加密算法:

对称加密:加密和解密使用同一个密码

非对称加密:加密和解密使用的一对儿密钥

密钥对儿:

公钥:public key

私钥:private key

单项加密:只能加密,不能解密;提取数据特征码

从人获取指纹,但是不能用指纹还原人

定长输出:

雪崩效应:echo “how are you” | md5sum

算法:

1:md5:message digest ,128bits

2:sha:secure hash algorithm,160bits

3:sha224:

4:sha256:

5:sha384:

6:sha512:


4.添加随机数salt

在计算之时加salt,添加随机数 //不需要用户输入

xiao123456

在用户登录的时候输入xiao,会自动添加salt 123456


5.passwd和shadow文件

/etc/passwd :用户的信息库

whatis passwd

man 5 passwd //查看passwd文件的说明

name:

password :可以是加密的密码,也可以是

UID

GID 用户所属的主组的ID号

GECOS 用户的注释信息

directory 用户的家目录

shell 用户的默认shell,登录时默认打开的shell

/etc/shadow

man 5 shadow,

登录名

加密了的密码 //三段落,使用分隔符分割

6是sha512算法

salt

加密后的密码

最后一次更改密码的日期 //从1970年1.1日开始的天数

0 标识用户下次登录系统时更改密码

空字符表示密码年龄功能被禁用

密码的最小年龄//最短使用多长时间

空字段或者0,不做限制

最大密码年龄

密码警告时间 //快到期了

密码禁用期 //到了之后,还可以为你保留多长时间,到了最长之后

账户过期日期 //账户禁用

保留字段   //

警告时间:提示修改密码,但是可以不修改

失效时间:登录就会强制修改密码

name:secret:latest:min:max:war:inactive:out:reserve

用户名:加密的密码:最近一次修改密码的时间:最短使用时间:最长使用时间:密码警告日期:密码失效时间:过期时间

1970.1.1 [---------min--------]

|---------------|------|-------------|----------------------|

latest now

                |------------max----------------------------|--inactively--|--out--|

        |--war--|

/etc/group

组名字

组密码

GID

用户列表:该组的用户成员,以此组为附加组的用户的用户列表


示例:创建用户:定义过期时间,和警告时间,以及强制修改密码

附件一:

pwconv:将用户密码转换成影子密码

就是将/etc/passwd里的密码用x代替,并将真实密码(当然是加密后的)转移到/etc/shadow里面。 

pwconv依赖于passwd中的密码区’x’来同步/etc/passwd与/etc/shadow这两个文件;以/etc/passwd为主来控制/etc/shadow中的各项: 

A:若/etc/shadow不存在,则pwconv将用/etc/passwd来建立 

B:若/etc/shadow已存在,则: 

    1.若条目在passwd中已存在,而不在shadow中,则在shadow中添加相关条目 

    2.若条目在shadow中已存在,而不在passwd中,则从shadow中删除相关条目

实验一:使用passwd文件创建用户

vim /etc/passwd

test:x:1002:1002:test:/home/test:/bin/bash

//需要 确保UID:1002没有用户使用

pwconv //同步passwd到shadow

mkdir /home/test

cp /etc/skel/.* /home/test

vim /etc/group

添加组

chmod 700 /home/test -R

chown test:test /home/test -R

ls -dl /home/test

//可以root su到该用户,但是该用户不能直接登录

6.小结

用户管理基础概念:

    用户类别:

管理员类、普通用户(系统用户和登录用户)

    组类别:

        管理员组、普通用户组

基本组和附加组

私有组和公共组

    数据库文件:

        /etc/passwd

    login:passwd:uid:gid:comment:home:shell

/etc/shadow

    login:encrypted_passwd:修改日期:min:max:war:非活动:过期:保留

/etc/group

    name:Gid:passwd:user_list

/etc/gpasswd

    密码存储格式:

    单项加密,并借助于salt完成

    encrypted_passwd:{加密算法:salt:加密后的密码}

加密算法:

1:MD5

2:sha1

3:sha224

4:sha-256

5:SHA-384

6:SHA-512


二、用户和组相关命令

相关命令:

useradd,userdel,usermod,passwd

groupadd,groupdel,groupmod,gpasswd

change,chsh,id,su


用户和组管理命令

1.groupadd 

-g gid 

//默认为上一个GID加1

-r 创建一个系统组

-p 指定组密码

2.groupmod 修改

-g digid

-n 修改组名

3.groupdel 删除组

4.useradd //有一个链接命令adduser

创建一个新用户或者更新用户的默认信息

-u --uid 指定UID

-g --gid 指定基本组ID,此组得实现存在

-c --comment 注释信息

-G --groups GROUOP1[,Group2,...[,Group]]:指明用户的附加组,用,分开

在group文件中,该组会加一个用户名

-d 指定其家目录,创建家目录:

通过复制/etc/skel/.* 并重命名实现

指定的家目录如果存在,就不会为用户复制配置环境配置文件

-s 指定用户的默认SHELL,

/etc/shells 列表内的

-r 创建系统用户

-m 强制创建主目录,

-M 不创建用户家目录,

-f --inactive 

密码过期后,账户被彻底禁用之前的天数,0表示立即禁用,-1表示禁用该功能

如果为指定,使用/etc/default/useradd默认为-1

-D 显示用户创建时的默认信息,

/etc/default/useradd文件的内容

useradd -D -s /bin/csh

//相当于直接修改/etc/default/useradd文件

注意:创建用户时的诸多默认设定的配置文件为/etc/login.defs

5.usermod

大多数选型和useradd类似

-a 添加到附加组,和-G选项一起使用

-c 注释信息

-d 修改用户家目录,用户原有的文件不会被转移到新位置

-m --move-home 只能与-d选项一同使用,用于移动家目录 

-g --gid Groug 修改用户所属的基本组

-G G1,G2,G3,... 修改用户所属的附加组,原来的附加组会被覆盖

-a --append:与-G一同使用,用于为用户追加新的附加组

-l --login-name修改用户名

-s 修改用户的shell,、/etc/shells中的shell

-L/-U  lock/unlock锁定和解锁用户密码,禁止用户登录

锁定 /etc/shadow中,密码字段前加一个!

usermod -G -a test test2

6.userdel

-r 删除用户时一并删除用户家目录

默认不会删除用户家目录

7.passwd

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

passwd 修改用户自己的密码

passwd USERNAME 修改指定用户的密码,仅root有此权限

-d 清除用户密码

-l,-u 锁定和解锁用户

-e:expire 到期时间,几月几号过期

-n:minnum days 最短使用期限

-x:maxnum days 最长

-i:inactive 非活动时间,过期之后可使用的天数

-w:警告时间,之前几天

-S status

--stdin echo "xaiotao" | passwd --stdin docker

8.gpasswd:用户的组管理和添加密码

-a USERNAME 向组中添加用户

-d 删除组中的用户

newgrp命令,临时切换其他组为基本组

9.chage修改passwd的过期信息

passwd  -n 3 -w 2 -x 5 rusky

-n min;-x max;-w war

chage -l rusky //查看

10.id 显示用户的实际和有效的id

-u 仅显示有效的uid

-g 仅显示基本组ID

-G 显示用户所属的所有组的GID

-n 显示名字而非ID

id -n -G tmd

11.switch user切换用户

登录式切换:会重新读取用户的环境配置文件来重新初始化

su - USERNAME

su -l USERNAME

非登录式切换:不会读取目标用户的环境初始文件进行初始化

su USERNAME

注意:管理员可无密码切换至其他任何用户

-c “COMMAND” //只执行一条命令

12.其他命令

finger 查看用户信息

chfn docker 指定用户信息

chsh 修改默认shell

chsh -s /bin/bash tmd

whoami


命令总结:

groupadd,groupdel,groupmod,passwd

useradd,userdel,usermod,gpasswd

newgrp

id,su,chage,finger

pwck 检查用户的密码是否存在问题

grpck 检查组信息


附件一:/etc/login.defs

设置了默认信息,创建用户,的GID,UID,

默认的加密算法,min,max等

/etc/default/useradd //用户的

附件二:

练习1:创建用户gentoo,UID为4001,基本组为gentoo,附加组为distro(GID为5000)和peguin(GID为5001)

useradd gentoo -u 4001 -G distro,peguin

练习2:创建用户fefora,其注释信息为“Fedora core”,shell为/bin/tcsh

练习3:修改gentoo的家目录为/var/tmp/gentoo,保留原有文件

usermod -d /var/tmp/gentoo -m gentoo

练习4:为gentoo新增附加组netadmin

useradd -a -G netadmin gentoo

附件三:

/etc/group-是group的一个备份文件,用于恢复

附件四: newgrp 临时组切换

wolf 有两个组:wolf,mm

su wolf

touch aa  //aa的属组为wolf

newgrp mm //切换到组mm

touch bb  //bb的属组为mm

id 查看基本组已经发生改变

exit退出 基本组将发生变化

tom只有一个组tom

newgrp tom //则需要tom组的密码