用户系统
概述
为什么 Linux 需要提供用户管理机制?
- 核心:[用户管理机制是用于 文件的安全防护措施]{.red}
- 描述:普通用户只有具备权限才可以进行操作;系统管理员拥有最大的权限从而可以进行 [任何操作]{.green}
Linux 用户管理机制分为几个级别?
- 定义:① 用户 ② 用户组 ② 其他用户组

用户管理
概述
定义:文件的拥有者
分类:
- 普通账号:可以被正常登陆使用的账号
- 系统账号:[系统正常运行所必须的用户:不可以被登陆使用的账号]{.red}
用户标识符( UID ):
- 定义:每个用户都具有的唯一标识符
- 系统管理员( UID=0 ):[可以拥有多个系统管理员:多个用户标识符为
0
的用户]{.red} - 系统账号( 1<UID<999 ):1<UID<200:系统自行建立的账号,201<UID<999:用户自行建立的系统账号
- 普通账号( 1000<UID<60000 ):最新版本的内核已经支持普通账号数量达到 2^32 - 1 个
- 细节:[采用普通的方式建立用户时标识符必须不同,但是可以修改文件使得两个账号标识符相同]{.red}
用户家目录:
- 定义:每个 [普通用户]{.red} 登陆后默认进入的目录 / 每个 [普通用户]{.red} 被创建后默认拥有的目录
- 细节:
- [系统账号默认不具有家目录]{.red} (/etc/passwd 会记录系统账号的家目录但是并不会生成)
- [用户家目录默认只有自己可以访问,用户家目录名默认和用户账号名相同]{.red}
- 用户家目录默认创建在 /home 目录下并且内容为空(参考 /etc/default/useradd 文件就知道为什么了)
配置文件
/etc/passwd:[记录用户各种信息的配置文件:任何用户都具有权限操作]{.red}
用户名 : 密码 : 用户标识符 : 组标识符 : 描述性内容 : 家目录 : 使用的 Shell
注:[任何用户都具有权限操作所以密码不可以记录在该配置文件中]{.red}
# 普通用户账号的记录
# 原本的密码确实记录在 passwd 文件中,但是由于不安全所以后续就放入了 shadow 文件中,这里的密码字段就采用 x 代替
fuyusakaiori:x:1000:1000::/home/fuyusakaiori:/bin/bash
# 系统用户账号的记录:注意这里系统账号虽然被记录具有家目录,但是这个家目录是没有被创建的
system:x:991:986::/home/system:/bin/bash/etc/shadow:[记录用户密码的配置文件:仅有系统管理员具有权限操作]{.red}
用户名 : 加密密码 : 最近修改时间 : 下次修改密码最少间隔时间 : 下次修改密码最大间隔时间 : 密码即将过期时提前警告的时间 : 密码过期后经过多少天失效 : 账号失效时间 : 保留
(1) CentOS 加密方式采用 SHA512
(2) [加密密码前添加 !或者 * 会导致密码失效]{.red}(锁定密码的原理也是这个)
(3) 密码失效 后该账号就无法登陆了,密码过期 后仍然可以登陆账号,只是系统会提示修改密码
# 用户的密码记录
fuyusakaiori:$6$gio2YePg$/yShZXZO9OhGGivMslwpSNBkwsUXoCmaq/N/qhmQY168uqcQ5ifDLTktvidGXy6SDhAqP/bhErzaJrB2Mf9aw.:18838:0:99999:7:::
# 查询加密方式
authconfig --test | grep hashing
登陆流程
- 系统查找 /etc/passwd 文件看是否存在输入的账号:如果存在就将记录读取出来并且进行下一步;如果不存在显然无法登陆
- 系统查找 /etc/shadow 文件看账号密码是否正确:如果正确就能够正常登陆;如果不正确显然也无法登陆
管理
前提:[新增、删除、修改用户仅有系统管理员可以使用;用户功能则是普通用户都可以使用的]{.red}
新增用户
命令:[useradd [-u uid] [-g 初始用户组] [-G 次要用户组] [-d 家目录绝对路径] 新增用户名]{.green}
[useradd 新增用户名]{.green}:创建用户时使用默认设置(只要没有指定的内容都默认参考配置文件 /etc/default/useradd 进行设置)
[root@localhost ~]:useradd username
[useradd -u uid 新增用户名]{.green}:创建用户时指定用户标识符
# 普通用户指定用户标识符:(1) 不能够指定已经存在的用户标识符 (2) 可以使用系统账号范围中的标识符,但是不会被视为系统账号,最好不要这样做
[root@localhost ~]:useradd -u 2200 username
# 系统用户指定用户标识符:必须添加 -r 选项才可以真正创建系统账户
[root@localhost ~]:useradd -r -u 450 username[useradd -g 初始用户组 -G 次要用户组]{.green}
(1) [每个用户可以加入多个不同的用户组]{.green}:设置的时候仅可以设置一个,如果需要更多则需要使用其他命令进行追加
(2) 每个用户默认的初始用户组是自身:不指定初始用户组时会自行创建一个和用户名称相同的用户组,并将用户添加进该用户组
# 指定的用户组必须是存在的
[root@localhost ~]:useradd -g initgroup -G othergroup username[useradd -d 家目录绝对路径]{.green}
(1) [可以自定义家目录的名称,即可以不和账户名相同]{.red}
(2) 每个用户默认家目录名称和用户名称相同,并且默认创建家目录,系统账号除外
# 家目录路径建议使用绝对路径
[root@localhost ~]:useradd -d pathname username[passwd [-u] [-l] [-S]用户名]{.green}:
(1) 账号完成创建之后通常没有密码,需要设置密码才可以登录该账号
(2) 如果不填写用户名,那么修改的就是系统管理员的账号密码
(3) [系统管理员无论设置何种样式的密码都是可以被接受的,普通用户必须严格按照规范设置密码,否则不予通过]{.red}( PAM 模块检验 )
# 密码的形式是严格限制的
# 1. 密码不能够和账号相同 # 5. 密码不要使用简单的关系式
# 2. 密码尽量不要选择用字典里面会出现的字符串 # 6. 密码尽量使用大小写字符、数字、特殊字符的组合
# 3. 密码需要超过 8 个字符
# 4. 密码不要使用个人信息
[root@localhost ~]:passwd username
# 锁定密码:即使密码失效,账号无法登陆
[root@localhost ~]:passwd -l username
# 解锁密码:让密码重新生效
[root@localhost ~]:passwd -u username
# 列出密码相关的详细信息:即 /etc/shadow 中的记录
[root@localhost ~]:passwd -S username配置文件:/etc/default/useradd:创建用户时默认值的配置文件
GROUP:配置用户默认进入的用户组(CentOS、RHEL、Fedora 发行版没有采用该默认值、SUSE 采用该默认值(用户组机制))
# 默认每个用户都添加进入标识符为 100 的用户组(user 组)
GROUP=100HOME:配置用户家目录默认位置([系统管理员的家目录并不在该目录下]{.red)
# 默认每个用户的家目录都存放在 /home 目录下
HOME=/homeINACTIVE:配置密码过期是否失效(-1 :密码即使过期也永不失效;0 :密码过期后立刻失效;其他数字:经过多少天后失效)
# 默认密码永不过期:
INACTIVE=-1EXPIRE:配置账号是否失效(可以在会员付费的系统中使用该属性)
# 默认永不失效
EXPIRE=SHELL:配置用户登陆使用的命令行程序
# 默认使用 bash
SHELL=/bin/bashSKEL:配置家目录创建参考的基准目录(该目录下有什么,家目录创建时也会具有相应的内容)
# 该目录下默认为空
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
删除用户
命令:[userdel [-r] 用户名]{.green}
[userdel 用户名]{.green}:[删除用户但是保留用户的家目录下的所有文件]{.red}
# 该用户被删除后尽管保留了家目录但是依然不可以登陆了
[root@localhost ~]:userdel username[userdel -r 用户名]{.green}:[删除用户并且不保留家目录]{.red}
[root@localhost ~]:userdel -r username
修改用户
命令:[usermod [-g 初始用户组] [-G 次要用户组] [-d 家目录路径] [-a 增加的用户组] [-l 新的用户名] [-u 新的uid] 用户名]{.green}
[usermod [-g 初始用户组] [-G 次要用户组] [-d 家目录路径]]{.green}:更新用户所属的初始用户组,次要用户组,家目录路径
[usermod -aG 增加的用户组 用户名]{.green}:
(1) [每次仅可以追加一个次要用户组,不可以追加多个]{.red}
(2) 必须配合 -G 选项使用
# 可以使用用户功能中提供的 groups 命令查看当前用户到底属于哪些组
[root@localhost ~]:usermod -aG firstgroup username
[root@localhost ~]:usermod -aG secondgroup username[usermod -l 新的用户名 -u 新的uid 用户名]{.green}
# uid 尽量在创建之后不要乱改,容易出问题
[root@localhost ~]:usermod -l newusername -u uid username
用户功能
命令:
[id 用户名]{.green}:查看用户的相关信息
[root@localhost ~]:id username
用户组管理
概述
定义:多个相互协作的用户组成的集合
用户组标识符( GID ):每个用户组都具有的唯一的标识符
注:[用户组也分为系统用户组和普通用户组,用户组标识符遵循的规范和用户标识符是一致的]{.red}
用户组机制
私有用户组机制:[每个用户建立时,系统会建立一个相应的用户组,并将该新用户放入新用户组中]{.red}
注:CentOS、RHEL、Fedora 采用私有用户组机制
公有用户组机制:每个用户建立时,系统直接将其放入用户组默认值中( users 组)
注:SUSE 采用公有用户组机制
分类:
- 有效用户组:[每个文件所属的用户组都是该用户的有效用户组]{.red}
- 次要用户组:用户存在于组内,但是对于文件来说是其他用户组
配置文件
/etc/group:记录用户组相关的所有信息的配置文件
用户组名 : 用户组密码 : 用户组标识符 : 用户组支持的账号名称
(1) 用户组密码:每个组都可以设置 用户组管理员,用户组密码提供给用户组管理员使用,用户组管理员可以自行进行用户相关操作(用户组管理员现在实际已经被 sudo 命令代替)
(2) [系统默认建立的用户组是不会将该组中的用户添加进去的]{.red},所以看到的可能是空白
# 用户自行建立组:密码依然为 x 保存在 gshadow 文件中
anime:x:1001:shinobu
# 新增用户时系统默认建立的用户组
fuyusakaiori:x:1000:/etc/gshadow:记录用户组密码相关的所有信息配置文件([用户组通常禁止使用密码]{.red})
anime:!::shinobu
管理
前提:[新增、删除、切换用户组的命令只能够由系统管理员使用]{.red}(包括用户组管理员)
新增用户组:[groupadd [-g gid] [-r] 用户组名称]{.green}
[groupadd -g gid 用户组名称]{.green}
# 建立普通的用户组
[root@localhost ~]:groupadd -g 1145 groupname
# 建立系统用户组
[root@localhost ~]:groupadd -r -g 450 groupname删除用户组:[groupdel 用户组名称]{.green}
[删除的用户组必须是没有用户作为初始用户组]{.red}:如果有用户在创建时就制定了该用户组,那么只要这个用户存在,那么这个用户组就不能够删除
[非空的用户组都是可以删除的,除了初始用户组]{.red}
[root@localhost ~]:groupdel groupname
查看用户所属用户组:[groups 用户名]{.green}:查看当前用户所属的用户组([命令输出的第一个用户组为有效用户组]{.red})
# 如果不添加用户名的话就是查看当前用户所属的用户组
[root@localhost ~]:groups username切换有效用户组:[newgrp 用户组名]{.green}
# 切换的有效用户组必须是该用户支持的用户组
[root@localhost ~]:newgrps groupname
运行级别
- 级别 0:关机
- 级别 1:单用户(++找回密码++)
- 级别 2:多用户状态没有网络
- 级别 3:++多用户状态有网络服务++
- 级别 4:系统未使用保留给用户
- 级别 5:图形用户界面
- 级别 6:系统重启
# 切换运行级别 |