用户管理
用户管理
请叫我贪财的文字搬运工。终于下心补了一篇博客。最后唠叨一句,博客园的排版太难用了。参考链接:http://c.biancheng.net/view/3059.html
一、基础概念
linux是一个多任务多用户的操作系统。所谓的Multi_tasks和Multi-Users
认证(Authentication):资源是有限的,通过某种识别技术,将其于系统上某个账户关联起来的过程,就是认证过程。
授权(Authorization):给通过认证后的账号分配权限的过程。
审计(Audition):对账户使用权限记录的过程。
用户名:用户的登录凭证。计算机容易识别的是数字,人容易识别的字符,所以需要一种数据库来进行数字凭证和字符凭证的转化。
用户组:用户的一种容器。可以把组看成一种角色。以方便对批量用户管理、授权的一种方式。
用户类别:Linux中每个用户是通过User Id (UID)来唯一标识的
管理员: 管理员的UID为0
普通用户:
系统用户: 系统用户的UID为 1-499(CENTOS6) 1-999(CENTOS7\8)
登录用户: 登录用户的UID为 500-60000(CENTOS6) 1000-60000(CENTOS7\8)
用户组类别1:Linux中可以将一个或多个用户加入用户组中,用户组是通过Group ID(GID) 来唯一标识的。
管理员组: 管理员的GID为0
普通用户组:
系统组: 系统组的GID为 1-499(CENTOS6) 1-999(CENTOS7\8)
登录组: 登录组的GID为 500-60000(CENTOS6) 1000-60000(CENTOS7\8)
用户组类别2:
基本组:
附加组:
用户组类别3:
私有组:组名同用户名,且只包含了一个用户
公共组:组内可以包含多个用户
密码的复杂性原则:
1、使用随机密码
2、最短长度不要低于8位
3、应该使用大写字符、小写字符、数字、标点符号四类字符中至少三类
4、定期更换
加密算法
对称加密:加密解密都使用同一种密钥。
非对称加密:加密解密使用的一对密钥
公钥: 使用公钥加密只能使用与之配对的私钥进行解密。 公钥加密;私钥解密
私钥: 使用私钥加密只能使用与之配对的公钥进行解密。 私钥加密;公钥解密
单项加密:只能加密,不能解密,主要用于提取数据特征码。
单向加密算法的特征:
1、定长输出
2、雪崩效应
单向加密算法:
md5 定长输出128位
sha1 安全的hash算法,定长输出160位
sha224
sha256
sha384
sha512
二、与用户相关的配置文件
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
/etc/default/useradd
/etc/login.defs
/etc/skel/*
/etc/passwd简介:
root:x:0:0:root:/root:/bin/bash
以冒号位分隔符,分隔成7个自然段
1> 用户名
2> 密码占位符或者密码
3> UID
4> GID
5> 用户注释信息
6> 用户家目录位置
7> 用户的默认登录SHELL
/etc/shadow简介:
root:$6$b4tMixbfyTY1Ck2J$bpdKlcQs5YF643oeeLqIbNPrehMn.gb8hfdVhLFVw5xy06j7H.5Jkt2PyJUDPO5odjVvnZCETMU50upFTW/::0:99999:7:::
以冒号位分隔符,分隔成9个自然段
1> 用户名
2> 加密的密码串
以$为分隔符
第一段为加密算法
1表示为md5
2表示为sha1
3表示为sha224
4表示为sha256
5表示为sha384
6表示为sha512
第二段为加密的杂质
第三段为真正的加密串
3> 最近一次密码的修改时间
这个时间段的计算法是从1970-01-01开始到现在多少天
0表示用户下次登陆时必须更改密码
空表示禁用此功能
4> 密码最短使用期限
5> 密码最长时使期限
6> 密码到期前的提醒(警告)时间
7> 密码到期后的宽限时间
8> 此账户的失效期。这个时间段的计算法是从1970-01-01开始到现在多少天
9> 保留字段
/etc/group简介:
root:x:0:
以冒号位分隔符,分隔成4个自然段
1> 用户组名
2> 组密码的占位符
3> GID
4> 附加组用户列表
/etc/gshadow简介:
netadmin:$6$XLxGGrM9LBWIQTg$nbfw1qWuxVJVZaM6BKNOCrD75Cnd9FkxGcBAkVR6P02LgYcbKPev.SQ3H./u8VuNofDWhaFOtK7.PhQAV2I/::gentoo
以冒号位分隔符,分隔成4个自然段
s
1> 用户组名,同/etc/group文件中的组名相对应
2> 组密码,对于大多数用户来说,通常不设组密码,一般为空或者!,表示改用户组没有设置用户组密码,也没有设置组管理员。
3> 组管理员。设置组管理员来替root用户完成一部分组管理工作。现在一般都使用sudo类命令代替了,所以组管理员已经很少设置使用了。
4> 附加组用户列表,同/etc/group文件最后字段保持一致。
/etc/default/useradd简介:
此文件定义了使用useradd创建用户使用的默认配置
GROUP=100 #定义了创建新用户属于哪个公共组ID。但现在都是使用了私有组机制,所以此项定义已不再生效。默认创建新用户的私有组与用户名同名,GID默认为当前最大GID数值加1
HOME=/home #定义了创建新用户的家目录存放位置为/home目录下,与用户名同名的目录
INACTIVE=-1 #定义了新用户的默认密码到期的宽限天数(shadow文件第7个字段),这里默认值是 -1,代表所有新建立的用户密码永远不会失效
EXPIRE= #定义了新用户的账户失效时间(shadow文件第8个字段),这里默认为空,表示新用户没有过期时间
SHELL=/bin/bash #定义了新用户的默认登录shell
SKEL=/etc/skel #定义了新用户家目录有哪些配置文件。
CREATE_MAIL_SPOOL=yes #定义了新用户是否启用邮箱,默认是创建.也就是说,对于所有的新建用户,系统都会新建一个邮箱,放在 /var/spool/mail/ 目录下,和用户名相同.
/etc/login.defs简介
此文件定义了创建新用户,对用户的一些基本属性做出默认设置。如:GID UID 密码最大长度等
MAIL_DIR /var/spool/mail #创建用户时,系统会在目录 /var/spool/mail 中创建一个用户邮箱,比如 lamp 用户的邮箱是 /var/spool/mail/lamp。
PASS_MAX_DAYS 99999 #密码有效期,99999 是自 1970 年 1 月 1 日起密码有效的天数,相当于 273 年,可理解为密码始终有效。
PASS_MIN_DAYS 0 #表示自上次修改密码以来,最少隔多少天后用户才能再次修改密码,默认值是 0。
PASS_MIN_LEN 5 #指定密码的最小长度,默认不小于 5 位,但是现在用户登录时验证已经被 PAM 模块取代,所以这个选项并不生效。
PASS_WARN_AGE 7 #指定在密码到期前多少天,系统就开始通过用户密码即将到期,默认为 7 天。
UID_MIN 500 #指定最小 UID 为 500,也就是说,添加用户时,默认 UID 从 500 开始(centos7是从1000开始)。注意,如果手工指定了一个用户的 UID 是 550,那么下一个创建的用户的 UID 就会从 551 开始,哪怕 500~549 之间的 UID 没有使用。
UID_MAX 60000 #指定用户最大的 UID 为 60000。
GID_MIN 500 #指定最小 GID 为 500,也就是在添加组时,组的 GID 从 500 开始。
GID_MAX 60000 #用户 GID 最大为 60000。
CREATE_HOME yes #指定在创建用户时,是否同时创建用户主目录,yes 表示创建,no 则不创建,默认是 yes。
UMASK 077 #指定用户主目录的权限,这里默认设置为 077的是遮罩码,所以用户家目录的实际权限是700
USERGROUPS_ENAB yes #指定删除用户的时候是否同时删除用户组,准备地说,这里指的是删除用户的初始组,此项的默认值为 yes。
ENCRYPT_METHOD SHA512 #指定用户密码采用的加密规则,默认采用 SHA512,这是新的密码加密模式,原先的 Linux 只能用 DES 或 MD5 加密。
/etc/skel/*目录简介
此目录中定义了新用户家目录下有哪些配置文件。大多数为隐藏文件
.bash_logout #用户登出配置脚本文件
.bash_profile #用户私有环境配置文件
.bashrc #用户私有别名配置文件
三、用户管理命令:
groupadd命令 [OPTIONS] GROUP_NAME 创建用户组
选项:
-r 创建系统系统组,系统组的GID小于500或1000
-g ### 创建GID为指定###的用户组。系统默认为最大GID+1
groupmod命令
groupmod [option] GROUP_NAME
选项:
-g ### 修改组GID,再不加-o选项时不能与其它组的GID相同
-n NEW_GROUP_NAME 修改组名
-o 常与-g一起使用,修改组的GID和别的组的GID相同
groupdel命令
groupdel GROUP_NAME 删除组
-f 强制删除
gpasswd命令
gpasswd [OPTION] GROUP
gpasswd GROUP 设置GROUP组密码
-a USERNAME 向GROUP组中添加用户USERNAME,也就是让USERNAME以GROUP为附加组
-d USERNAME 从GROUP组中移除用户USERNAME
-A user1,user2,... 设置有管理权限的用户列表
useradd命令
useradd [OPTION] USER_NAME
-u ### 指定新用户的UID为###,如果不指定会默认以其中最大UID+1.同时如果没有指定GID时一般GID和指定的UID相同。
-g ### 指定新用户的基本组GID为###,同时指定的基本组必须存在。
-G GROUP1,GOURP2... 指定新用户的附加组,多个附加组需要用英文逗号分开,同时指定的附加组必须存在。
-c "String" 指定用户的注释信息
-d /PAHT/TO/SOMEDIR 指定新用户的家目录坐在位置。默认是/home/下与用户同名的目录。其中家目录下的文件是复制/etc/skel目录下的所有文件。
-s SHELL 指定新用户的SHELL,同时,此SHELL必须是/etc/shells文件内记录的shell类型才行。部分发行版会指定为/bin/false效果等同于/sbin/nologin
-r 或--system 创建系统用户
-m 强制创建家目录
-M 强制不创建家目录,即使指定了家目录的位置
-f # 表示指定用户的宽限期,即用户密码到期后宽限的那几天.-1表示禁用此功能
-D 显示或设置创建新用户默认配置属性信息,读取的是/etc/default/useradd文件内的信息
-D -s SHELL 设定创建用户SHELL类型的默认值,此更改同时会修改/etc/default/useradd文件内的信息,所以为永久有效更改
-D -e # 设定创建用户账户过期时间的默认值。此更改同时会修改/etc/default/useradd文件内的信息,所以为永久有效更改
-D -f # 设定创建用户宽限期时间的默认值。此更改同时会修改/etc/default/useradd文件内的信息,所以为永久有效更改
-D -b /PATH/ 设定创建用户家目录存放位置的默认值。此更改同时会修改/etc/default/useradd文件内的信息,所以为永久有效更改
usermod命令
usermod [OPTION] USER_NAME
-u ### 修改UID
-g ###/GROUP_NAME 修改GID,修改的GID必须得存在
-G GROUP1,GOURP2... 指定新用户的附加组,多个附加组需要用英文逗号分开,同时指定的附加组必须存在。还有,现在指定的附加组会覆盖原来的附加组信息,如果想要追加需要加上-a选项
-a 只能和-G选项一起使用。追加附加组
-c "STRING" 修改注释信息
-d /PATH/TO/SOMEDIR 修改家目录,用户原来家目录内有文件是不会被转移到新目录内。如果想要连同目录内文件一块转移需要使用-m选项
-m 只能和-d选项一起使用,用来移动原来家目录内的文件到新家目录内
-l NEW_NAME 修改用户名
-s SHELL 修改SHELL
-L 锁定用户的密码。即禁止用户登录,小技巧也就是再用户密码前加上!
-U 解锁用户的密码,即允许用户登录,移除密码前的!
-e YYYY-MM-DD: 修改用户账号的过期日期
-f INACTIVE: 修改用户账户的非活动期限,即宽限期
userdel命令
username [OPTION] USER_NAME
-r 默认情况下删除用户账户时是不会删除用户的家目录和邮箱的,加上-r选项就会连同邮箱和家目录一并删除
-f, --force 强制
passwd命令
passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
passwd 修改自己的密码
passwd USERNAME 仅root使用,强制修改USERNAME的密码
-l 锁定用户的密码。即禁止用户登录,小技巧也就是再用户密码前加上
-u 解锁用户的密码,即允许用户登录,移除密码前的!
-d 清楚用户的密码
-n 指定密码的最短使用时间
-x 指定密码的最长使用时间
-w 指定密码的警告期
-i ### 指定密码的宽限期
-e YYYY-MM-DD 指定用户账户的过期时间
--stdin 从标准输入接受用户密码,然后更改,Ubuntu没有此选项
chage命令
-d LAST_DAY 更改密码的时间
-m MIN_DAYS 修改密码最短使用时间
-M MAX_DAYS 修改密码最长时间时间
-W WARN_DAYS 修改密码到期前的警告时间
-I INACTIVE 密码过期后的宽限期
-E EXPIRE_DATE 用户的有效期
-l 显示密码策略
id命令
用来显示用户的实际和有效的用户信息
id 什么也不跟,表示显示当前登录用户的用户信息
id USERNAME 显示USERNAME的用户信息
-u 仅显示有效的UID
-g 仅显示基本组ID
-G 仅显示用户所属组的所有组的ID
-n 显示组名,而不是ID。但是需要配合-u -g -G一起使用
-r 显示真实ID
newgrp命令
newgrp [-] GROUP 临时切换用户的基本组。如果用户要切换的组为用户的附加组则不用输入密码,如果不属于则需要输入密码
备注:切换用户相当于进入子shell,可以使用exit退出
如果加上- 相当于完全切换,可以初始化用户环境。不加相当于不完全切换。
su命令
su [options...] [-] [user [args...]]
-l 登录式切换。相当于 su - UserName。会读取目标用户的配置文件,同时切换家目录,属于完全切换
-c <COMMAND> 不会切换登录,只是利用对方身份执行一次COMMADN命令
-s SHELL 指定切换登录的shell类型。
su USERNAME 非完全切换(非登录式切换),切换用户时不会读取对方的配置文件进行初始化,也不会切换家目录。
su - USERNAME 完全切换(登录式切换),切换用户时会去读对方的配置文件进行初始化,也会切换家目录。
完全切换和非完全切换都时以子shell的身份进行的。退出需要使用exit
root 切换切换普通用户时是不需要知道对方的登录密码的。
chsh命令
仅管理员使用,更改指定用户的SHELL类型
chsh USERNAME
chsh -s /bin/bash gentoo
whoami命令
查询当前登录用户是谁
pwch命令、grpck命令
用来检查用户的配置文件是不是有问题。主要用于手工批量创建账户的检查
groupmems命令
可以管理附加组的成员关系
groupmems [options] [action]
-g, --group groupname #更改为指定组 (只有root)
-a, --add username #指定用户加入组
-d, --delete username #从组中删除用户
-p, --purge #从组中清除所有成员
-l, --list #显示组成员列表
groups命令
可查看用户组关系
groups [OPTION].[USERNAME]...