用户组管理
Linux安全模型
安全3A:
认证:Authentication: 用户名和密码
授权:Authorization: 用户的访问权限控制
审计:Accouting|Audition: 用户的动作记录,监督权限的使用Linux 安全上下文
运行中的程序:进程 (process)
以进程发起者的身份运行:
root: /bin/cat
lpx: /bin/cat
进程所能够访问资源的权限取决于进程的运行者的身份
- 用户验证:
令牌token,identity 登录成功后才会发一个令牌,访问资源时匹配令牌,按令牌审核资格
linux用户:Username/UID linux只认id不认用户名
管理员:root,UID:0
普通用户:UID:1-65535
系统用户:1-499(centos6),1-999(centos7)
普通用户:500-60000(CentOS6), 1000-60000(CentOS7)
名称解析:名称转换
Username <--> UID
根据名称解析库进行:/etc/passwd
- linux分组group
Linux 组:Groupname/GID
管理员组:root, 0
普通组:
系统组:1-499(CentOS6), 1-999(CentOS7)
普通组:500+, 1000+ (CENTOS7)
Linux 组的类别
组类别1:
管理员组
普通用户组
系统组
登录组
组标识:GroupID, GID
管理员组:0
普通用户组:1-65635
系统用户组:1-499(CentOS6), 1-999(CentOS7)
登录用户组:500-60000(CentOS6), 1000-60000(CentOS7)
名称解析:groupname <--> gid
解析库:/etc/group
组类别2:
用户的基本组
用户的附加组
组类别3:
私有组:组名同用户名,且只包含一个用户;
公共组:组内包含了多个用户;
- 认证信息
通过比对事先存储的,与登录时提供的信息是否一致;
password:
/etc/shadow
/etc/gshadow
密码的使用策略:
1、使用随机密码;
2、最短长度不要低于8位;
3、应该使用大写字母、小写字母、数字和标点符号四类字符中至少三类;
4、定期更换;
加密算法:
对称加密:加密和解密使用同一个密码;
非对称加密:加密和解密使用的一对儿密钥;
密钥对儿:
公钥:public key
私钥: private key
单向加密:只能加密,不能解密;提取数据特征码;
定长输出
雪崩效应
算法:
md5: message digest, 128bits
sha:secure hash algorithm, 160bits
sha224
sha256
sha384
sha512
在计算之时加salt,添加的随机数;
- Linux 用户和组的主要配置文件:
/etc/passwd:用户的信息库
name:password:UID:GID:GECOS:directory:shell
name: 用户名
password:可以是加密的密码,也可是占位符x;
UID:
GID:用户所属的主组的ID号;
GECOS:注释信息
directory:用户的家目录;
shell:用户的默认shell,登录时默认shell程序;
/etc/shadow:用户密码
用户名:加密的密码:最近一次修改密码的时间:最短使用期限:最长使用期限:警告期段:过期期限:保留字段
用户名: 登录用名
加密的密码: 用户密码, 一般用sha512 加密
最近一次修改密码的时间: 从1970 年1 月1 日起到密码最近一次被更改的时间
最短使用期限: 密码再过几天可以被变更(0 表示随时可被变更)
最长使用期限: 密码再过几天必须被变更(99999 表示永不过期)
警告期段: 密码过期前几天系统提醒用户(默认为一周)
过期期限: 密码过期几天后帐号会被锁定
保留字段: 从1970 年1 月1日算起,多少天后账号失效
/etc/group:组的信息库
group_name:password:GID:user_list
group_name: 就是组名称
password: 通常不需要设定,密码是被记录在
GID: 组的ID名
user_list:以当前组为附加组的用户列表(以分隔符为逗号)
linux管理用户组命令
- useradd:创建用户
语法:useradd 选项 参数
选项:
-c<备注>:加上备注文字。备注文字会保存在passwd的备注栏位中;
-d<登入目录>:指定用户登入时的启始目录;
-D:变更预设值;
-e<有效期限>:指定帐号的有效期限;
-f<缓冲天数>:指定在密码过期后多少天即关闭该帐号;
-g<群组>:指定用户所属的群组;
-G<群组>:指定用户所属的附加群组;
-m:自动建立用户的登入目录;
-M:不要自动建立用户的登入目录;
-n:取消建立以用户名称为名的群组;
-r:建立系统帐号;
-s<shell>:指定用户登入后所使用的shell;
-u<uid>:指定用户id。
参数:用户名:要创建的用户名
实例:
# useradd lpx #添加用户
# useradd -r lpx #添加系统用户
# useradd -d /home/lpx lpx #添加用户,并且指定,home目录
# useradd -g mytest -d /home/lpx root #添加用户,指定组,并且设定home目录
# useradd -e 04/05/13 lpx #添加用户,并给用户设置有效期
- userdel:删除用户
语法:userdel 选项 参数
选项:
-f:强制删除用户,即使用户当前已登录;
-r:删除用户的同时,删除与用户相关的所有文件。
参数:用户名:要删除的用户名。
实例:
# userdel lpx //删除用户lpx,但不删除其家目录及文件;
# userdel -r lpx //删除用户lpx,其家目录及文件一并删除;
- usermod:修改用户信息
语法:usermod 选项 参数
选项:
-c<备注>:修改用户帐号的备注文字;
-d<登入目录>:修改用户登入时的目录;
-e<有效期限>:修改帐号的有效期限;
-f<缓冲天数>:修改在密码过期后多少天即关闭该帐号;
-g<群组>:修改用户所属的群组;
-G<群组>;修改用户所属的附加群组;
-l<帐号名称>:修改用户帐号名称;
-L:锁定用户密码,使密码无效;
-s<shell>:修改用户登入后所使用的shell;
-u<uid>:修改用户ID;
-U:解除密码锁定。
参数:登录名:指定要修改信息的用户登录名
实例:
# usermod -G root lpx # 将lpx用户添加到root组中
# usermod -l lpx lpx1 #修改lpx用户名为lpx1:
# usermod -L lpx #锁定账号lpx:
# usermod -U lpx #解除对lpx的锁定:
- passwd 修改用户的认证信息,包括用户密码、密码过期时间等
语法:passwd 选项 参数
选项:
-d:删除密码,仅有系统管理者才能使用;
-f:强制执行;
-k:设置只有在密码过期失效后,方能更新;
-l:锁住密码;
-s:列出密码的相关信息,仅有系统管理者才能使用;
-u:解开已上锁的帐号。
参数:用户名:需要设置密码的用户名。
实例:
[root@localhost ~]# passwd lpx //更改或创建lpx用户的密码;
Changing password for user lpx.
New UNIX password: //请输入新密码;
Retype new UNIX password: //再输入一次;
passwd: all authentication tokens updated successfully. //成功;
[root@localhost ~]# passwd -l lpx //锁定用户lpx不能更改密码;
Locking password for user lpx.
passwd: Success //锁定成功;
[lpx@localhost ~]# su lpx //通过su切换到linuxde用户;
[lpx@localhost ~]$ passwd //linuxde来更改密码;
Changing password for user lpx.
Changing password for lpx
(current) UNIX password: //输入lpx的当前密码;
passwd: Authentication token manipulation error //失败,不能更改密码;
[root@localhost ~]# passwd -d lpx//清除lpx用户密码;
Removing password for user lpx.
passwd: Success //清除成功;
[root@localhost ~]# passwd -S lpx //查询lpx用户密码状态;
Empty password. //空密码,也就是没有密码;
- groupadd:创建一个新的工作组
语法:groupadd 选项 参数
选项:
-g:指定新建工作组的id;
-r:创建系统工作组,系统工作组的组ID小于500;
-K:覆盖配置文件“/ect/login.defs”;
-o:允许添加组ID号不唯一的工作组。
参数:组名:指定新建工作组的组名。
实例:
# groupadd -g 344 lpx 建立一个新组,并设置组ID加入系统
此时在/etc/passwd文件中产生一个组ID(GID)是344的项目。
- groupdel:删除指定工作组
语法:groupdel 选项 参数
选项: 无
参数:组:要删除的工作组名。
实例:
groupadd lv //创建lv工作组
groupdel lv //lv这个工作组
- groupmod:修改工作组信息
语法:groupmod 选项 参数
选项:
-g<群组识别码>:设置欲使用的群组识别码;
-o:重复使用群组识别码;
-n<新群组名称>:设置欲使用的群组名称。
参数:组名:指定要修改的工作的组名。
实例:
# groupmod test -n test2 #将test组名换成test2
# groupmod -g 1111 test2 #将test2的gid换成1111
- gpasswd:管理工作组
语法:gpasswd 选项 参数
选项:
-a:添加用户到组;
-d:从组删除用户;
-A:指定管理员;
-M:指定组成员和-A的用途差不多;
-r:删除密码;
-R:限制用户登入组,只有组中的成员才可以用newgrp加入该组。
参数: 指定要管理的工作组。
实例:
# gpasswd -A peter test2 #将peter设为test2组管理员
# gpasswd -a peter test2 #将用户peter加入到test2组
# gpasswd -d peter test2 #将用户peter从test2组中移出
- chage:修改用户和密码的有效期限
语法:chage 选项 参数
选项:
-m:密码可更改的最小天数。为零时代表任何时候都可以更改密码。
-M:密码保持有效的最大天数。
-w:用户密码到期前,提前收到警告信息的天数。
-E:帐号到期的日期。过了这天,此帐号将不可用。
-d:上一次更改的日期。
-i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
-l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。
参数:指定修改的用户
实例:
可以编辑/etc/login.defs来设定几个参数,以后设置口令默认就按照参数设定为准:
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
当然在/etc/default/useradd可以找到如下2个参数进行设置:
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
通过修改配置文件,能对之后新建用户起作用,而目前系统已经存在的用户,则直接用chage来配置。
我的服务器root帐户密码策略信息如下:
[root@centos7 ~]# chage -l root
最近一次密码修改时间 : 3月 12, 2013
密码过期时间 :从不
密码失效时间 :从不
帐户过期时间 :从不
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :99999
在密码过期之前警告的天数 :7
我可以通过如下命令修改我的密码过期时间:
[root@centos7 ~]# chage -M 60 root
[root@centos7 ~]# chage -l root
最近一次密码修改时间 : 3月 12, 2013
密码过期时间 : 5月 11, 2013
密码失效时间 :从不
帐户过期时间 :从不
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :60
在密码过期之前警告的天数 :9
然后通过如下命令设置密码失效时间:
[root@centos7 ~]# chage -I 5 root
[root@centos7 ~]# chage -l root
最近一次密码修改时间 : 3月 12, 2017
密码过期时间 : 5月 11, 2019
密码失效时间 : 5月 16, 2019
帐户过期时间 :从不
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :60
在密码过期之前警告的天数 :9
- chsh:更换登录系统是使用的shell
语法:chsh 选项 参数
选项:
-s, --shell # 指定 用户的 登录 shell.
-l, --list-shells # 显示 /etc/shells 中的 shell 列表, 然后退出.
参数:用户名:要改变默认shell的用户。
实例:
# chsh -l #查看系统安装shell
# echo #SHELL #查看当前使用shell
# chsh -s /bin/zsh #把当前shell改为zsh
- id:显示指定用户的用户和组信息
语法:id 选项 参数
选项:
-g或--group 显示用户所属群组的ID。
-G或--groups 显示用户所属附加群组的ID。
-n或--name 显示用户,所属群组或附加群组的名称。
-r或--real 显示实际ID。
-u或--user 显示用户ID。
参数:指定用户名
实例:
id #显示当前用户的信息
id lpx #显示lpx的信息
- su:切换当前用户,需输入账号密码
语法:su 选项 参数
选项:
-c<指令:执行完指定的指令后,即恢复原来的身份;
-f:适用于csh与tsch,使shell不用去读取启动文件;
-l:改变身份时,也同时变更工作目录,以及HOME,SHELL,USER,logname。此外,也会变更PATH变量;
-m,-p:变更身份时,不要变更环境变量;
-s<shell>:指定要执行的shell;
参数:用户:需要切换身份的目标用户
实例:
# su lpx #切换用户,原用户环境变量
# su - lpx #切换用户,新用户环境变量
su -c ls root #切换用户执行命令,执行后返回原用户