用户、组和权限管理
Multi-tasks,Multi-Users
每个使用者:
用户标识、密码【一种认证手段】;
Authentication(认证)
Authorization(授权)
Audition(审计)
3A
组:用户组,用户的容器【便于实现权限分配,有些系统称为角色,类似角色但不完全相同】
用户类别:
管理用户;
普通用户:
系统用户
登录用户
用户标识:UserID(简称UID)
16bits二进制数字表示:0-65535
管理员是0
普通用户是1-65535【基本上是到60000】
系统用户是1-999(centos7)
登录用户是1000-60000(centos7)
名称解析:名称转换
Username <-->UID
根据名称解析库进行:/etc/passwd [passwd为解析库文件] (LDAP轻量级目录访问协议,通常用户用户及目录访问的)
组
组类别1:
管理员组
普通用户组
系统组
登陆组
组标识:GroupID(简称GID)
16bits二进制数字表示:0-65535
管理员组是0
普通用户组是1-65535【基本上是到60000】
系统用户是1-999(centos7)
登录用户是1000-60000(centos7)
名称解析:名称转换
groupname <-->GID
解析库:/etc/group
组类别2:
用户的基本组
用户的附加组
组类别3:
私有组:组名同用户名,且只包含一个用户;
公共组:组内包含了多个用户。
认证信息:
通过对比事先存储的,与登录时提供的信息是否一致;
password存放位置【加密存储】:
/etc/shadow 用户密码
/etc/gshadow 组密码
密码使用策略:
1、使用随机密码;
2、最短长度不要低于8位;
3、大小写字母、数字、特殊符号;
4、定期更换。
加密算法:
对称加密:加密和解密使用同一个密码;
非对称加密:加密和解密使用的一对密钥:
公钥:public key
私钥:private key
单向加密:只能加密,不能解密【提取数据特征码,Linux用户密码是用此方法,即单向加密】;
定长输出【sha512sum,md5sum】
雪崩效应(初始条件微小改变引起结果巨大变化)
算法:
md5:message digest 5是版本号,定长输出128 bits
sha:secure hash algorithm,定长输出160bits
sha224/256/384/512
在计算之时加salt:随机数【使用场景,不同用户相同密码加密值依然不一样】
/etc/passwd:用户的信息库
name:password:UID:GID:GECOS:directory:shell
name:用户名
password:可以是加密的密码,也可以是x(占位符)
GID:用户所属的主组ID
GECOS:用户的注释信息
directory:用户的家目录
shell:用户默认的shell,登陆时默认的shell
如果passwd文件中的密码是占位符x,那么真正的密码存储于/etc/shadow文件中
shadow文件中:
用户名:$加密算法$salt$密码:最近修改日期:最短使用期限:最长使用期限:警告期限:过期期限:保留字段
第一个$与第二个$指的是加密算法,1是md5,2-6指的是上面的sha算法
第二个$与第三个$中间是salt
第三个$到冒号之间是加密后的密码
后面的是最后一次更改密码的日期,1970之后的天数,空表示此功能被禁用
后面是密码最短使用期限
后面是密码最长使用期限
密码警告时间段
密码禁用期
账号过期日期,从1970年1.1开始的天数
/etc/group:组的信息库
group_name:password:GID:user_list
这里的user_list值得之该组的用户成员,即以此组为附加组的用户的用户列表。
相关命令:useradd,userdel,usermod,passwd,groupadd,groupdel,groupmod,gpasswd,chage,chsh,id,su
Linux用户和组管理
安全上下文:
进程以其发起者的身份运行;进程对文件的访问权限,取决于发起此进程的用户据权限。
系统用户:为了能够让那些后台进程或服务类进程以非管理员的身份运行,通常需要为此创建多个普通用户,此类用户从不用登录系统,例如mysql、squid等。
groupadd:添加组
groupadd [options] group
-g :GID,指定GID,默认是上一个组的GID+1
-r:创建系统组
groupmod:修改组属性
groupmod [options] GROUP
-g 修改GID
-n 修改组名 -n 新组名 旧组名
groupdel:删除组
groupdel [options] GROUP
useradd:创建用户
如果没有指定用户组的话,系统会自动创建一个与用户名同名的私有组
-u 指定UID
-f 0或-1设置过了期限之后能否继续使用
-g 指定基本组GID或组名称,此组得事先存在
-c 指明注释信息
-G 指定用户所属的附加组,多个组之间用逗号分隔GROUP1[,GROUP2,...[,GROUPN]]]
-d 以指定的路径为用户的家目录,通过复制/etc/skel此目录并重命名实现,指定的家目录路径存在,则不会为用户复制环境配置文件
-s 指定用户的默认shell,可用的所有shell列别存储在/etc/shells文件中
-r 创建系统用户
-M 不为用户创建主目录
注意:创建用户时的诸多默认设定配置文件在/etc/login.defs中
useradd -D 显示许多用户创建时的基本默认信息,修改的结果保存于/etc/default/useradd
可以通过useradd -D 后面添加选项做一些操作,也可以直接改文件信息。
usermod:修改用户属性
usermod [options] LOGIN
-u 修改uid,新id
-g 修改用户所属基本组
-G 修改附加组,原来的附加组会被覆盖
-a append 与-G 一同使用,用于为用户追加新的附加组;
-c comment 修改注释信息
-d 修改家目录,原有文件不会转移
-m 与-d一同使用,将原来的家目录文件移动到新目录
-l 修改用户名
-s 修改用户的默认shell
-L 锁定用户密码lock,即在原来的密码字符串之前添加一个!;
-U unlock解锁用户的密码。
userdel : 删除用户
userdel option login
-r 删除用户时一并删除家目录【因为默认情况下删除用户,此用户家目录文件不会被删除】;
passwd:修改密码
不带任何选项是指修改当前用户密码;
passwd username 修改指定用户密码,仅root用户有次权限
-l 锁定
-u 解锁
-d 清除用户密码
-e expire 过期期限,日期;
-i 非活动期限 days;
-n 密码的最短使用期限
-x 最长使用期限;
-w 警告期限
--stdin 重定向至标准输入 例如echo "password" | passwd --stdin docker 即能够将password这个字符串设置为docker这个用户的密码
gpasswd:给组定义密码
给组添加密码的意义:避免用户乱切换组,导致创建的文件的 属组错乱,如果一个用户有多个组,那么在这些组中使用,newgrp 对应的组名称 即可无需密码切换基本组。
组密码文件:/etc/gshadow
gpasswd option group
-a USERNAME : 向组中添加用户
-d USERNAME:从组中删除用户
newgrp 临时切换基本组
可以是直接连接group名称,也可以是newgrp - groupname,-会模拟 用户重新登陆以实现重新初始化其工作环境。
chage 更改用户密码过期信息
chage option login
id 显示用户真实和有效的id信息
id option user
-u 仅显示有效的uid;
-g 仅显示用户的基本组ID;
-G 显示用户所属的所有组ID;
-n 显示名称而不是ID;
su 切换用户switch user
登录式切换
会通过读取目标用户的配置文件来重新初始化
su - username
非登录式切换
不会读取目标用户的配置文件来初始化
su username
su USERNAME -c command以目标用户执行命令
管理员可无密码切换其他任意用户,其他用户切换不同用户均需要目标用户密码。
其他命令:chsh修改shell,finger查询用户信息,chfn修改finger里的基本信息,whoami当前用户是谁,grpck组检查,pwck用户信息检查。