root 用户才是 ——> 整个系统的超级管理员
超级用户可以有权限管理整个系统,包括网络、配置、软件
在 Linux 中 root 并非是系统超级管理员;而是 UID 为 0 的用户才是超级管理员,只是 root 的 UID 刚好为 0
在 Linux 中每个用户都会被分配一个 UID(类似人的身份证),将其称为用户的身份标识符,所以人根据用户名来确定用户,而系统根据 UID 来确定用户
根据用户与 UID 的分配关系,我们将用户分为两类:
一类是系统用户:0 - 999
二类是普通用户:1000 - 60000
可以通过修改 /etc/login.defs 文件,修改 UID 的上限
根据系统的使用用途来分,也将其分为两类:
一类普通用户:通常指的是这一类用户由使用者来进行创建
二类服务用户:通常由系统进行定义,或者服务来负责创建
在 Linux 系统中为什么要有用户???
因为不同的服务使用不同的用户来管理更加安全;并且使用多用户,能够让系统的运行效率更高;并且有利于系统的权限分配和管理
/etc/passwd 的文件中,在该文件中记录了 UID 和用户名的映射关系
root:x:0:0:root:/root:/bin/bash
root:用户名
x:密码占位符;如果有 x 则用户登录时需要验证密码,如果没有 x 则不需要验证(x 不是真正的密码,仅仅只是验证密码)
第三位 0:指的是用户的 UID
第四位0:指的是用户的 GID(GID 指的是组的 ID)
第五位 root:用户的描述信息
第六位 /root:指的是用户的家目录(也就是用户登录系统后所在的位置)
第七位 /bin/bash:指的是用户的登录 shell(指的是用户登录操作系统后运行的第一个程序,称为 shell 程序),如果 shell 是 /bin/bash 表示该用户不能登录操作系统,也无法与系统交互;如果不用不能登录操作系统,不代表用户不能使用;该用户可以用作服务的运行用户,专门用来运行和管理服务
在 Linux 系统中,每一个用户都必须要有一个组
组的出现是为了更好的管理用户,因此可以将组看成是用户的集合;如果对一个组分配权限,则组内的所有用户都会继承这个权限;通过用户组可以简化对用户的管理
在系统中,组被分成两类:
一类是私有(属)组:在用户创建的时候,一并指定的组称为私有组;每个用户都必须要有一个私有组;且只能有一个私有组
一类是公共(附加组):将用户加入到其他组,则其他组成为该用户附加组,用户可以没有附加组
如果 A 加入 IT 组
A 是 IT 组的成员
IT 是 A 的附加组
/etc/group 中记录 GID 和组的映射关系
root:x:0:zhangsan
root:表示组的名称
x:表示组的密码占位符(组也是可以设置密码,且可以登录的)
0:表示组的 ID 也就是 GID
zhangsan:表示组内的用户
为什么在组内找不到用户???
因为系统在创建用户时,如果没有指定用户的私有组;则创建用户时系统会以用户的名字作为组名创建一个组,并且将该用户加入到组内,让该组成为用户的私有组,如果一个组是用户的私有组,则组内不会出现该用户
useradd 创建用户
-u 指定用户的 UID
-g 指定用户的私有组
-c 指定用户的描述信息(开机登录时的用户名)
-G 指定用户的附加组
-d 指定用户的家目录
-s 指定用户的 shell 程序
可以通过 su - zhangsan -s /bin/bash 临时给用户指定一个 shell 进行登录
问题:
a. 如果两个相同的用户名使用不同的 UID 能否正常使用 ???
两个相同的用户名,可以使用两个不同的 UID,但是没有意义;是因为用户的条目会发生覆盖,系统读取 /etc/passwd 文件时,从下往上读,相同的用户会被覆盖掉
b. 张三和李四能否使用同一个 UID ???
张三和李四可以使用同一个 UID,相当于系统中一个用户有两个别名,实际上两者是同一个用户,人根据用户名来区别用户,系统则根据 UID 来识别用户,如果两个用户的 UID 一致,则系统将两个用户作为同一个用户
c. /etc/passwd 中 UID 的产生时将 passwd 文件中最大的 UID+1,来生成新的 UID,UID 不能随意的分配 ——> 涉及到权限
因此系统中服务的保留 UID,是不会被分配出去的;在分配 UID 时,使用 passwd 文件最大的 UID+1 来进行分配,因此在创建用户指定 UID 时,要考虑 UID 的大小;因为所指定的 UID 前面的范围将会被系统保留;举例:创建一个用户 zhangsan,将其 UID 设置为 3000,则默认创建用户从 3001 开始分配 UID,导致 3000 以前的 UID 全部被保留 !!!无论是否使用
useradd 创建用户
usermod 修改用户
userdel 删除用户
usermod 用法:
usermod -l ituser00 ituser7 修改用户名
usermod -u 2026 ituser00 修改用户的 UID
usermod -g zhaoliu ituser00 修改用户私有组
usermod -G user1 ituser00 修改用户的附加组
注意:在添加附加组时使用 -aG,单用 -G 会发生覆盖
usermod -c "test user" ituser00 修改用户的描述信息
usermod -md /wuhan ituser00 -m 移动家目录 -d 指定路径 修改用户的家目录
usermod -s /bin/bash ituser00 修改用户的登录 shell
删除用户要理解用户在系统中生成了哪些文件
userdel 用户名 仅仅只是在 /etc/passwd 和 /etc/group 中删除了 UID 和 GID 映射关系,没有删除用户的文件(该用户的文件指的是用户创建时生成的文件,而并非用户在系统创建的数据文件)
创建用户时一并被创建出来的文件有哪些 ???
a. 创建用户时 UID 和用户名的映射关系写入到 /etc/passwd 文件中
b. 创建用户时 GID 和组名的映射关系写入到 /etc/group 文件中
c. 创建用户时,用户的密码写入 /etc/shadow 文件中
d. 创建用户时,用户组的密码写入 /etc/gshadow 文件中
e. 创建用户时,用户的家目录默认保存在 /home 目录下,且使用用户名作为目录名
f. 创建用户时,用户的邮箱将被创建在 /var/spool/mail 目录下以用户名作为文件名
当使用 userdel 用户名 删除用户时 ,仅仅删除了 a - d 生成的内容,并没有删除用户的家目录和用户的邮箱文件
userdel -r 干净的删除用户,也就是连同用户的邮箱和家目录一下删除(也就会将家目录下用户的文件也将被删除)
创建组
groupadd
groupadd -g 1010 cloud 在创建时一并指定组的 GID
修改组
groupmod
groupmod -n redhat cloud 修改组的名称
groupmod -g 1030 redhat 修改组的 GID
删除组
如果删除的组,是某个用户的私有组,则该组不能被删除
如果删除的组,是某个用户的附加组,则该组可以删除
给组设置密码:使用 gpasswd 给组设置密码,通过 newgrp 切换到组
例:gpasswd it / newgrp it
组还可以设置管理员
gpasswd -A 用户名 组名
如果一个用户是这个组的管理员用户,那么该用户可以不在这个组内,依然可以管理这个组
gpasswd -a 用户名 组名 向组内添加用户
gpasswd -d 用户名 组名 从组中移除用户
root 用户对组的管理:
groupmems root 用户对组的管理工具
groupmems -g 组名 -a 用户名 向组内添加用户
groupmems -g 组名 -d 用户名 删除组内的用户
groupmems -g 组名 -p 清空组内的所有用户,如果该组是某个用户的私有组,则该用户不会被组内移除
组的密码文件:/etc/gshadow
it:$6$luFKlmh1cBzRxhR6$ySXC3frhNJ.sq8hqxV2bpiPBjOs3n.G4JxJIr444g5p8kW8kc/G3zpyHvfswrokTxr2NiWFGD.QHHBxmObLQv1:zhangsan:lisi,wangwu
it:表示组的名称
$6$:表示的是组的密码(是使用 hash512 加密算法生成的密文)
zhangsan:表示的是组的管理员
lisi:表示的组内的成员
用户的密码文件:/etc/shadow
root:$6$xGDekMTJvPHugfAe$nuWWDpjULZFE3IPYuUN04v5.54yCC5K5lEJoPrgb7tqjJCN859sShM2G9Hey.80F3AbBc5kzXKDEdpAONtuVE.:19694:0:99999:7:2:20090:
root:表示用户名
$6$:表示用户的密码(其中 $6$ 两个 $ 之间的数字代表的是加密的类型)
$6$:表示使用 hash512 加密
$5$:表示使用 hash256 加密
$1$:表示使用 md5 加密
!!:表示该用户从来没有设置过密码
Linux 锁定用户,就是利用密码锁定用户
19694:表示上一次修改密码的时间(指的是从 1970-01-01 经过了 19694 天 date +%F -d "1970-01-01 19609days"
0:表示的是密码的最短有效期,也就是密码最少可以用几天(如果为 0 则没有限制)
99999:表示的是密码的最长有效期(如果为 99999 则一直有效)
7:表示的是密码到期前的警告天数,也就是在密码即将到期的前七天向用户发送告警信息
2:表示的是账号的锁定天数,如果密码到期后两天内没有改就锁定
20094:表示的是账号的失效时间,也就是这一天,账号不可用,这一天是从 1970-01-01 经过了 20090 天数后的一个具体日期
用户的策略文件:
/etc/login.defs 文件中定义用户的默认值