内容:
6.1 用户账号
6.2 用户管理
6.3 Centos 7 紧急模式恢复root密码
6.1 用户账号
用户一般来说是指使用计算机的人,计算机针对使用的每一个人给了一个特定名称,用户就可以使用这些名称来登陆使用计算机,除用户外,一些系统服务也需要还有部分特权的用户账户运行。因此出于安全考虑,用户管理应运而生,用以加以明确限制各个用户账户的权限,root在Linux中拥有最大的权限,一般只作管理用,非特权用户通过su 或 sudo程序来临时获得权限。
GNU/Linux 系统中每一个文件都有属主、属组。另外还有三种类型的访问权限,读(read)、写(write)、执行(execute)。
6.1.1 用户分类
Linux用户三种角色:
超级用户:root 对系统最高的管理权限 UID=0
普通用户:
系统用户:UID:1-999(centos 7),1-499(centos 6)
本地用户:UID:1000+(centos 7),500+(centos 6)
UID:每个用户的身份标识
用户和组的关系
一对一:一个用户存在一个组中
一对多:一个用户存在多个组中
多对一:多个用户存在一个组中
多对多:多个用户可以存在多个组中
6.1.2 用户配置文件
名称 | 路径 | 说明 |
用户配置文件 | /etc/passwd | 记录了每个用户的一些基本属性,并对所有用户可读,每一行对应一个用户,每行记录通过冒号进行分隔 |
用户组文件 | /etc/group | 用户组所有的信息存放地,组名不能重复 |
用户密码信息 | /etc/shadow | 由于passwd文件对所有用户是可读的,为安全起见把密码从passwd中分离出来放入/etc/shadown,该文件只有root用户有读权限,从而保证密码安全性。 |
6.2 用户管理
6.2.1 用户命令
命令:useradd -d -u “UID” -g “初始组” -G “附加组” -s “登陆的shell” 用户
-d:用户主目录路径,可以指定用户家目录
-M:不创建用户主目录
-g:指定用户初始组的GID,该组必须存在。不指定初始组的情况下,默认会用用户名相同的名字创建群组,GID的作用和UID相同。
-G:用户要加入附属组的的列表;使用逗号分隔多个组。如果不设置,默认用户只加入初始组,一个用户只允许有一个主组,可以有多个附属组。
-s:用户默认登陆的shell路径;启动过程结束后,默认启动的登陆shell在此处设定;确保使用的shell已经安装,默认使用的是Bash 。有时需要禁止某些用户执行登陆动作,将shell设置成 /sbin/nologin 即可。
6.2.2 添加登陆用户
添加一个名为zhangsan的用户,并使用bash作为登陆shell
[root@localhost ~]# useradd zhangsan
[root@localhost ~]# tail -1 /etc/passwd
zhangsan:x:1001:1001::/home/zhangsan:/bin/bash
#此命令会自动创建zhangsan组,并成为zhangsan用户的默认主组,同时默认的登陆shell是bash
#用户账户的全部信息被保存在/etc/passwd中,以下面格式保存每个账户的所有信息,字段以 : 分隔
#zhangsan:x:1001:1001::/home/zhangsan:/bin/bash
#用户名:密码占位符:UID:GID:用户描述:用户宿主目录:登陆后使用的shell
#查看系统支持的shell
[root@localhost ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash6.2.3 指定用户UID
# -u UID号
[root@localhost ~]# useradd -u 1100 lisi
[root@localhost ~]# id lisi
uid=1100(lisi) gid=1100(lisi) groups=1100(lisi)
[root@localhost ~]# tail -1 /etc/passwd
lisi:x:1100:1100::/home/lisi:/bin/bash6.2.4 指定用户宿主目录
# -d 指定用户宿主目录
[root@localhost ~]# useradd -d /opt/test1 zhanglong
[root@localhost ~]# tail -1 /etc/passwd
zhanglong:x:1101:1101::/opt/test1:/bin/bash6.2.5 指定用户的主组
# -g 指定主组
[root@localhost ~]# useradd test2
[root@localhost ~]# id test2
uid=1102(test2) gid=1102(test2) groups=1102(test2)
[root@localhost ~]# useradd -g test2 test3
[root@localhost ~]# id test3
uid=1103(test3) gid=1102(test2) groups=1102(test2)6.2.6 指定用户附属组
用户可以有0个或多个附属组。如果一个组有多个成员,可以在/etc/group文件中最后一个字段看到。
[root@localhost ~]# useradd -G test2,zhangsan,lisi,root test4
[root@localhost ~]# id test4
uid=1104(test4) gid=1104(test4) groups=1104(test4),0(root),1001(zhangsan),1100(lisi),1102(test2)
# 在/etc/group文件每行的最后一个字段,可以看到用户的附属组。6.2.7 创建用户的其他命令
[root@localhost ~]# adduser test1
[root@localhost ~]# id test1
uid=1001(test1) gid=1001(test1) groups=1001(test1)
[root@localhost ~]# which adduser
/usr/sbin/adduser
[root@localhost ~]# ll /usr/sbin/adduser
lrwxrwxrwx. 1 root root 7 Jul 22 01:51 /usr/sbin/adduser -> useradd
# adduser 是useradd的软链接6.2.8 删除用户
# userdel [option] username
# -f, --force 强制删除用户,在用户已登录的状态下,依然强制删除
# -h, --help 帮助
# -r, --remove 删除用户宿主目录及目录中所有文件
# -R, --root CHROOT_DIR
[root@localhost ~]# userdel -rf test16.2.9 密码文件
[root@localhost ~]# tail -3 /etc/shadow
test1:$6$wzShJFG7$cH5e4l8dkJRF3eaWCkHlnpU/aZk7tLkkEWwTAM6QKiDbsahn4RffHxLkqvNuImi0NkpURWwsl.1DDq8kRcUBt1:18484:0:99999:7:::
test2:!!:18484:0:99999:7:::
test3:!!:18484:0:99999:7:::name | 登陆名称,这个必须是系统中有效的账户名 | |
passwd | 已加密密码,分三部分。第一部分:使用哪种哈希算法加密,第二部分:用于加密哈希的salt,第三部分:已加密的的哈希。 | |
lastchange | 最近一次密码修改的时间 ,1970年1月1日至最后一次修改密码日期算起的总的天数 | |
min-age | 不能更改密码的最少天数,最近更改过后几天才可以更改;为0表示最短期限要求 | |
max-age | 密码过期时间 | |
warning | 密码到期的净高期,为0表示不提供警告 | |
inactive | 宽限天数,密码到期后 | |
expire | 账号过期时间,以距离1970/1/1的天数计算 | |
blank | 预留字段 |
给用户添加密码
# 交互式
[root@localhost ~]# passwd test1
Changing password for user test1.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
# 不交互
[root@localhost ~]# echo 123456 | passwd --stdin test1
Changing password for user test1.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# echo 123456 | passwd --stdin test2
# 虽然两个用户的密码一样,但是shadow 中加密的hash值并不同,因为salt不一样。6.2.10 查看用户相关命令
id | 查看当前有效用户名 |
whoami | 显示当前登入系统的用户信息 |
w | 用于显示已经登录系统的用户列表 |
users | 用于显示当前登录系统的所有用户的用户列表 |
6.2.11 修改用户信息
usermod [option] username
常用参数:
-u UID
-d 宿主目录
-g 用户所属组,只能有一个
-G 用户附属组,可以有多个
-s 登录shell
-L 锁定
# 修改UID
[root@localhost ~]# id test1
uid=1001(test1) gid=1001(test1) groups=1001(test1)
[root@localhost ~]# usermod -u 1111 test1
[root@localhost ~]# id test1
uid=1111(test1) gid=1001(test1) groups=1001(test1)
# 修改shell
[root@localhost ~]# usermod -s /sbin/nologin test1
[root@localhost ~]# grep test1 /etc/passwd
test1:x:1111:1001::/home/test1:/sbin/nologin
# 更改用户宿主目录
[root@localhost ~]# usermod -m -d /mnt/test1 test1 # -m 会自动创建新目录并移动内容到新目录中6.3 Centos 7 紧急模式恢复root密码
环境:一台Centos 7 服务器,忘记root密码,需要修改root密码,找回root。
步骤:
1.重启,按↑↓键,进入如下界面,选择第一项,按 e 进行编辑。

2.在此界面找到 ro 这一项,改为 rw init=/sysroot/bin/sh,改完后 ctrl + x 进入紧急模式。启动一个shell环境,系统并没有真正启动。

3.切换根目录,chroot:change root directory。在 linux 系统中,系统默认的目录结构都是以 /,即是以根 (root) 开始的,chroot 后,系统读取到的目录和文件将不再是旧系统根下的而是新执行的根下的目录结构和文件。

注:如果系统selinux开启,则需要执行:touch ./autorelable 以更新系统信息,否则重启后密码修改不会生效。
4. 退出当前 / 目录,reboot 重启 ,使用新密码进行登录测试

















