前言:
root用户 ——> 整个系统的超级管理员
超级用户可以有权限管理整个系统,包括系统网络、配置、软件…
在Linux中root并非是系统超级管理员;而是UID为0的用户才是超级管理员,只是root的UID刚好为0
在Linux中每个用户都会被分配一个UID(类似人的身份证),将其称为用户的身份标识符。所以人根据用户名来确定用户,而系统根据UID来确定用户
根据用户与UID的分配关系,我们将用户分为两类:
一类是系统用户: 0 – 999
二类是普通用户: 1000 – 60000
根据系统的使用用途来分,也将其分为两类:
一类普通用户: 通常指的是这一类用户由使用者来进行创建
一类服务用户: 通常由系统进行定义,或者服务来负责创建
1.用户存在的意义
在Linux系统中为什么要有用户???
因为不同的服务使用不同的用户来管理更加安全;并且使用多用户,能够让系统的运行效率更高;并且有利于系统的权限分配和管理
2.用户存储的位置
/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 表示该用户可以正常登录系统,且与系统交互;如果shell是/sbin/nologin 则表示该用户不能登录操作系统,也无法与系统交互;如果用户不能登录操作系统,不代表用户不能使用;该用户可以用作服务的运行用户,专门用来运行和管理服务
3.组的信息
在Linux系统中,每一个用户都必须要有一个组
组的出现是为了更好的管理用户,因此可以将组看成是用户的集合;如果对一个组分配权限,则组内的所有用户都会继承这个权限;通过用户组可以简化对用户的管理在系统中,组被分成两类:
一类是私有(属)组: 在用户创建的时候,一并指定的组称为私有组;每个用户都必须要有一个私有组;且只能有一个私有组
一类是公共(附加)组: 将用户加入到其他组,则其他组成为该用户附加组,用户可以没有附加组
4.GID与组名的映射关系
/etc/group中记录GID和组的映射关系
root:x:0:zhangsan
root: 表示组的名称
x: 表示组的密码占位符(组也是可以设置密码,且可以登录的)
0: 表示组的ID也就是GID
zhangsan:表示组内的用户
-
为什么在组内找不到用户???
因为系统在创建用户时,如果没有指定用户的私有组;则创建用户时系统会以用户的名字作为组名创建一个组,并且将该用户加入到组内,让该组成为用户的私有组,如果一个组是用户的私有组,则组内不会出现该用户
5.创建用户
useradd 创建用户
-u 指定用户的UID
-g 指定用户的私有组
-c 指定用户的描述信息
-G 指定用户的附加组
-d 指定用户的家目录(这个目录最好不要事先创建)
-s 指定用户的shell程序 可以通过su - zhangsan –s /bin/bash 临时给用户指定一个shell进行登录
-
问题:
a.如果两个相同的用户名使用不同的UID能否正常使用?
两个相同的用户名,可以使用两个不同的UID,但是没有意义;是因为用户的条目会发生覆盖
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全部被保留,无论是否使用
3.修改用户和删除用户
useradd 创建用户
usermod 修改用户
userdel 删除用户
usermod用法:
usermod -l ituser00 ituser7 修改用户名
usermod -u 2060 ituser00 修改用户的UID
usermod -g zhaoliu ituser00 修改用户私有组
usermod -G user1 ituser00 修改的用户的附加组
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 干净的删除用户,也就是连同用户的邮箱和家目录一起删除(也就会将家目录下用户的文件也将被删除)
4.用户组管理
创建组: groupadd
groupadd –g 1010 cloud 在创建组时一并指定组的GID
修改组: groupmod
groupmod –n rhce cloud 修改组的名称
groupmod -g 1020 rhce 修改组的GID
删除组: groupdel
如果删除的组是某个用户的私有组,则该组不能被删除
如果删除的组是某个用户的附加组,则该组可以删除
给组设置密码: 使用gpasswd 给组设置密码,通过newgrp 切换到组
e.g. gpasswd it / newgrp it
组还可以设置管理员:
gpasswd -A 用户名 组名
如果一个用户是这个组的管理员用户,那么该用户可以不在这个组内,依然可以管理这个组
gpasswd –a 用户名 组名 向组内添加用户
gpasswd –d 用户名 组名 从组中移除用户
root用户对组的管理:
groupmems root用户对组的管理工具
groupmems –g 组名 -a 用户名 向组内添加用户
groupmems –g 组名 -d 用户名 删除组内的用户
groupmems –g 组名 -p 清空组内的所有用户,如果该组是某个用户的私有组,则该用户不会从组内移除
5.用户和组的密码文件
组的密码文件:/etc/gshadow
it:$6$Bsv6hiAI8IOa8BB2$rCHkqC4mwhLylHSmUedNPZqihBOIujA0SGnhSck6CLMT8YsXTe4MsJmASqZdGlnJZHOQHzGFzNkwYWz.0rg/M/:zhangsan:lisi,wangwu
it: 表示的组的名称
$6$: 表示的是组的密码(是使用hash512 加密算法生成的密文)
zhangsan: 表示的是组的管理员
lisi: 表示的是组内的成员
用户的密码文件: /etc/shadow root:$6$i168d5rQIz7MRkM7$Dsr2uCExXK/9jaqAkTV2q6YOklsALbhBWzOJlCXu.7B62gn5afGrL5SBlOL5tKYOJoeonV3rddU6/YzDVcXNv/:19609:0:99999:7:2: 20090:
root: 表示用户名
$6$: 表示用户的密码(其中$6$两个$之间的数字代表的是加密的类型)
$6 表示使用hash512加密
$1 表示使用md5加密
$5 表示使用hash256加密
!! 表示该用户从来没有设置过密码
Linux锁定用户,就是利用密码锁定用户
19609: 表示上一次修改密码的时间(指的是从1970-01-01 经过了19609天是那一年那一月那一日) date +%F -d "1970-01-01 19609days"
0: 表示的是 密码的最短有效期,也就是密码最少可以用几天 (如果为0则没有限制)
99999: 表示的是 密码的最长有效期 (如果为99999 则一直有效)
7: 表示的是 密码到期前的警告天数 也就是在密码即将到期的前七天向用户发送告警信息
2:表示的是 账号的锁定天数,如果密码到期后两天内没有改就会被锁定
20090:表示的是 账号的失效时间,也就是到这一天,账号不可用 这一天是从1970-01-01经过了20090天数后的一个具体的日期
用户的策略文件:
/etc/login.defs 文件中定义用户的默认值
6.案例: 手工创建用户的文件,并且正常使用进行测试
要求: 整个创建用户的过程,不使用与用户相关的命令
用户名:rhce09
密码:helloUID:1090
GID: 1099
私有组的名称:redhat
登录的shell:/bin/bash
openssl passwd -6 redhat 生成 redhat的hash512的密文
-6 hash512 -5 hash256 -1 md5 加密类型