本文旨在复习Linux中用户管理、权限管理,基本原理,基本命令。
知识储备
- 用户是系统资源分配的基本单位[请注意不是最小单位,最小单位应该是进程]
- 一个用户在登录计算机,并取得资源执行A进程整个过程,步骤如下:
- 和用户相关的文件/etc/passwd、/etc/shadow
- 和组相关的文件/etc/group、/etc/gshadow
- 本文以这4个文件为核心来讲解用户管理和权限管理
用户基本概念
- “用户”,对人而言使用username描述标识的;对Linux,是用UID来描述和标识的;
- Linux把输入的username ----> 解析成对应的 UID,在CentOS上用32bits存储UID,但实际上只用16bits,这意味着通常用户的UID范围是0-65535
- 用户分类 UID
- 管理员:0
- 普通用户:0-60000 [请注意 60000-65535 通常不分配,后文讲到创建用户的默认配置文件时会解释]
- 系统用户:CentOS 6.x为 1-499 CentOS7.x为1-999
- 登录用户:CentOS 6.x为 500+ CentOS7.x为1000+
- 创建用户的步骤
- 当我们创建一个普通用户没有指定家目录、默认shell为何能成功呢?因为在使用useradd命令时候会读取创建用户的默认配置文件/etc/default/useradd和/etc/login.defs填写相关参数;
- 创建好的用户相关信息会同步修改到/etc/passwd、etc/shdow、/etc/group等文件中
用户相关文件/etc/passwd
- /etc/passwd存储着用户相关信息,每行一个用户,以:分隔,共7个字段
密码相关文件/etc/shadow
- /etc/shadow存储着真正的密码,以及和密码相关的比如最长期限、警告期、非活动期等等;
- 同样以:分隔,一共有9个字段,字段内容如下,另外一个用户占一行哦。
- 很多人都关注密码文件,从/etc/passwd只能看到x密码占位符,他们不死心,找到/etc/shadow后觉得“有机可循”,真的是这样吗?
- /etc/shadow中第二个字段是密码串,其实是三个子密码串以$连接而成
-
- $6$第一个字串,表示加密类型,加密类型支持md5,sha1【160位】,sha224,sha256,sha384,sha512等等,在CentOS 6.x和7.x上,默认使用的是sha512加密,我们得出6是sha512加密 对吗?
- $NzG0v5Vyxmdu2n$第二个字串,sort,加盐。在对用户密码单向加密的时候,其实是生成一个随机的sort+用户密码,对这个整体单向加密,这样即便用户密码相同,由于sort不同,在shadow也不同
- $PxariU7Ag 第三个字串,这里就是整体单向加密后的加密串了
- 单向加密的2个特色:雪崩效应、定长输出
用户管理命令
常用的用户管理命令Useradd、usermod、passwd、userdel
Useradd 创建用户、可以通过附加参数来指定相关信息
Usage:useradd [OPTIONS]... LOGIN
常用参数
-r 创建系统用户 1-499 或者 1-999-u UID 指定UID 默认创建应该是500+或者1000+-g GID 指定用户所属的基本组,如果不指会默认创建一个同名的组,如果指定,那么该组必须存在;-c ‘XXX’ 注释信息,引号,全名信息-d /Path 指定用户组目录路径,不能实现存在,否则其用户配置文件不会被复制过去-s Shell 设定用户的默认shell-G GID1.. 指定所属的附加组 可多个-D 修改默认选项的,-M 不创建家目录,请注意如果默认创建系统用户那么是不会给家目录的Cat /etc/shells
Usermod 修改用户相关信息,想修改什么就附加一个参数+指定参数的值
passwd 修改用户密码、也可以修改密码最短、最长使用期限、非活动区间、锁定、解锁等等
Usage:passwd [OPTIONS]... <acountName> root可以直接修改别用户密码
普通用户只能修改自己的密码, 普通用户使用该命令无法附加参数,请参考《SUID》
补充密码复杂性策略:
-
- 使用数字、小写字母、大写字母、特殊字符四类中至少三类;
- 足够长;
- 使用随机密码;
- 定期更换;
userdel 删除用户,请注意默认删除用户不会删除用户家目录、/var/spool/mail也不会删除
-r 参数可以同时删除该用户的家目录
组基本概念
- 组是一个容器,一端他容纳着各个用户,一端连接这权限,将用户和权限关联起来;
- 组分类 GID
- 管理员组0
- 普通组:
- 系统组:CentOS 6.x为 1-499 CentOS7.x为1-999
- 用户组:CentOS 6.x为 1-499 CentOS7.x为1-999
- 还有一种分类方式
- 基本组:用户有且只有一个基本组,请注意私有组是附加组但只有一个成员
- 附加组:一个用户可以同时属于多个附加组,继承多个权限
- 组相关的文件主要有/etc/group、/etc/gshadow
组信息相关文件/etc/group
- /etc/group存储着组相关信息,以:分隔,共4个字段;
组密码相关文件/etc/gshadow
- /etc/gshadow存储着组密码和其他相关信息,以:分隔,共4个字段;
看到这里也许你很迷糊,用户密码理解起来很容易,那么组密码究竟干嘛的?
---> 实现组切换的作用
默认创建一个文件,属主是用户自身,属主是创建用户的基本组
Newgrp:切换其他组为自己的基本组
-
- 本来就是自己的附加组,切换无需密码
- 如果不是自己的附加组,要密码
组管理命令
常用的组管理命令Groupadd、groupmod、gpasswd、groupdel
Groupadd 创建组、可以通过附加参数来指定相关信息
Usage:groupadd [OPTIONS]... Name
常用参数
-g GID 指明组ID:如果不指定的话,GID会是组账号文件中最近添加组ID[最后一个组ID]加1-r 创建系统组-p 创建组并指定组密码哦-f 如果组已经存在,那么使用force可以强制覆盖并创建组
Groupmod 修改组相关属性,同usermod,参数同groupadd
gpasswd 修改组密码,用法同passwd
groupdel 删除组
其他用户、组管理相关的小命令
Chage | 修改用户账号及密码的属性,常用选项-d -E -m -M -W |
chsh | 修改用户shell,同步到/etc/passwd,常用选项-s shell 或 --list-shells可查看shells |
chfn | 补全注释,同步到/etc/passwd,如果有多个comment会以,隔开,常用选项-f -o -p -h |
finger | 通过finger 用户名来查看具体的comment信息 |
whoami | 显示当前有效账号 |
who | 显示登陆信息包含每一个通过某终端登陆进来的会话,常用选项-r -u |
w | 显示谁登陆了,以及当前正在做啥子哟 |
id | 显示当前用户的UID、GID、Groups |
pwck | 验证密码文件的完整性,比如用户指定的家目录不存在会提示是否删除 |
grpck | 验证组文件的完整性 |
Newgrp | 切换其他组为自己的基本组 |
Su | switch user,切换用户以其他用户的身份执行命令 |
Su USERNAME |
非完全切换;保留当前用户所有属性,临时切换,非登陆式切换 |
Su - USERNAME |
或者su -l User Name:完全切换,登陆式切换 |
Root切换到别的任意 不需要输密码 普通用户不管切换到谁 都需要目标的密码 仅以指定用户的身份执行指定的命令 格式:su - username COMMAND [Option ]... [ARGES].... |