前言:
Linux 系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户管理文件,并为用户提供安全性保护。
本节主要介绍了Linux系统下用户和组的配置文件以及用户管理,最后介绍了在忘记root密码后的恢复操作。
一、介绍用户和组以及其配置文件
1.1:用户分类
根据帐号位置分为:本地用户(UID:1000+)、远程(域)用户
根据帐号功能分为:系统用户【超级用户root(UID:0)、管理用户(也称伪用户,UID:1~499,)】、普通用户(UID:500~60000)
1.2:用户组分类
每个用户至少属于一个用户组;每个用户组可以包括多个用户;同一用户组的用户享有该组共有的权限。
根据帐号位置分为:本地组(UID:1000+)、远程(域)组。
根据帐号功能分为:系统用户组 【超级用户组root(UID:0)、管理用户组(UID:1~499)】、普通用户组
用户和组的相关配置文件
2.1:用户信息配置文件:/etc/passwd,文件格式及字段简单说明如下:
username:password:uid:gid:comment:home_dir:login_shell
字段 | 简单说明 |
username | 用户登录系统使用的用户名 |
password | 密码占位符 |
uid | 用户标识号 |
gid | 缺省组标识号 |
comment | 包含用户全名、电话号码和电子邮件地址等用户信息 |
home_dir | 用户登录后的起始目录(全路径名) |
login_shell | 用户使用的shell。默认为bash |
2.2:密码配置文件:/etc/shadow,文件格式及字段简单说明如下:
username:password:lastchanged:mindays:maxdays:warn:inactive:expire:reserver
字段 | 简单说明 |
username | 用户名 |
password | 被加密的密码 |
lastchanged | 上次更改密码的日期(从1970-1-1开始) |
mindays | 两次修改密码之间的最小天数,只有超过此限后才能修改密码(按天计算,0 表示随时可以修改) |
maxdays | 密码保持有效的最长天数。超过此限会强制提醒用户更新密码(按天计算) |
warn | 密码有效期到期前,提前几天发送警告信息(按天计算,0 = 未指定警告) |
inactive | 密码到有效期后一直不访问系统,保证帐号信息有效的最大天数,超过此限将封锁账号,用户最后一次登录信息保存在/var/log/lastlog文件中 |
expire | 账号过期时间,到期后帐号将自动失效,用户无法再登录系统(从1970-1-1开始) |
reserver | 保留字段 |
2.3:用户组文件/erc/group,文件格式及字段简单说明如下:
group_name:password:gid:user_list
字段 | 简单说明 |
group_name | 用户登陆时所在的组 |
password | 通常为“X”,没有实际意义 |
gid | 用户组ID |
user_list | 属于该组的所有用户列表 |
2.4:用户组密码文件/etc/gshadow,文件格式及字段简单说明如下:
group_name:password:user_list:user_list
字段 | 简单说明 |
group_name | 用户组的组名 |
password | 用户组密码,这个段可以是空的或!,如果是空的或有!,表示没有密码 |
user_list | 组管理者。这个字段也可为空,如果有多个用户组管理者,用,号分割 |
user_list | 组内用户列表。如果有多个成员,用,号分割 ; |
2.5:用户配置的文件:/etc/login.defs、/etc/default/useradd
/etc/login.defs该文件里的配置对root用户无效。如果/etc/shadow文件里有相同的选项,则以/etc/shadow里的设置为准;
/etc/default/useradd该文件主要是定义缺省用户主目录、环境配置文件目录、登入执行首个程序等等。
[root@localhost ~]# vim /etc/default/useradd
2.6:新建用户初始化模版文件:/etc/skel
创建用户时,默认会将/etc/skel/下的所有文件(.bash_logout、.bash_profile、.bashrc等)复制到用户的根目录。当用户根目录下的bash_*文件被误删了,可以从/etc/skel拷贝文件。
二:用户和组管理命令和配置
1:用户管理命令与实例
1.1:useradd命令
useradd命令用于创建用户,为新用户分配用户号、用户组、主目录和登录Shell等资源,默认情况下只有系统超级用户root才能使用。
语法如下:
useradd [-u uid] [-g group] [-G groups] [-d home_dir] [-sshell] [-c comment] [-m [-k shell_dir]] [-N] [-M] login
其中各选项含义如下:
-c:comment 指定一段注释性描述。
-d:目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,能创建主目录。
-g:用户组 指定用户所属的用户组。
-G:用户组,用户组 指定用户所属的附加组。
-s:Shell文件 指定用户的登录Shell。
-u:用户号 指定用户的用户号,如果同时有-o选项,则能重复使用其他用户的标识号。
-p:这个命令是需求提供md5码的加密口令,普通数字是不行的。
-M:再创建用户时不创建用户宿主目录
例:
1.1.1:使用useradd命令创建用户today,并查看/etc/passwd文件检查是否创建成功。由配置文件可以看出today用户已经创建成功用户的UID为1001,主目录是/home/today,shell是/bin/bash
[root@cnklog2 ~]# useradd today
[root@cnklog2 ~]# tail -1 /etc/passwd
1.1.2:建立用户lina,不创建用户的宿主目录,并指定其登录脚本为/sbin/nologin(用户不能登录系统)。由配置文件可以看出用户已经创建成功并且shell是/sbin/nologin;查看/home目录中也没有创建用户的宿主目录。
[root@cnklog2 ~]# useradd -M -s /sbin/nologinlinda
注:-M再创建用户时不创建用户宿主目录
1.1.3:建立一个用户sam,指定其UID为666,GID为1000。由id命令查看用户已经创建成功并且UID是666, GID是1000。
[root@cnklog2 ~]# useradd -u 666 -g 1000 sami
1.1.4:创建用户mon,指定其宿主目录为/home/date。由配置文件可以看出用户已经创建成功并且宿主目录是/home/date。
[root@cnklog2 ~]# useradd -d /home/data mon
1.1.5:创建用户的其他命令adduser
[root@cnklog2 ~]# adduser cnklog
1.2:usermod命令
usermod命令用于更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。
语法如下:
usermod [-u uid] [-g group] [-d home_dir] [-s shell] [-ccomment] [-f inactive] [-e expire] [-l new_logname] login
其中各选项含义如下:
-l:指定新的注册用户名。
其他选项的说明参考useradd
例:
1.2.1:将系统中用户today的宿主目录由/home/today改为/home/today1,UID给为777,GID改为:1000,增加附属组root
[root@cnklog2 ~]# id today #查看用户today信息
[root@cnklog2 ~]# usermod -d /home/today1 -u 777-g 1000 -G root today
1.3:userdel命令
删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。删除一个已有的用户账号使用userdel命令。
语法如下:
userdel [-r] login
其中各选项含义如下:
-r:从系统中删除用户记录(/etc/passwd,/etc/shadow,/etc/group等)和主目录,包括文件和子目录
例:
1.3.1:删除系统中的用户sam,但保留用户的宿主目录。命令 cat /etc/passwd | grep sam查询发现已无sam用户,但是/home/sam仍然存在。
[root@cnklog2 ~]# userdel sam
1.3.2:删除系统中的用户zhlking,同时删除用户的宿主目录。命令 cat /etc/passwd | grep zhlking查询发现已无zhlking用户,但是/home/zhlking仍然存在。
[root@cnklog2 ~]# userdel -r zhlking
1.4:passwd命令
passwd命令系统管理员也就是root用户可以使用,普通用户也可以使用,但是两者使用的权限和方式是不一样的。root用户可以使用passwd命令的一切功能,但是普通用户只能使用该命令修改自己的密码。
语法如下:
passwd [-dlsuf] [login]
其中各选项含义如下:
-d:删除密码,仅有系统管理者才能使用
-l:锁住密码
-s:列出密码的相关信息,仅有系统管理者才能使用
-u:解开已上锁的帐号
-f 强迫用户下次登录时修改口令
注:除非特别说明,相对性选项仅限域超级用户使用
例:
1.4.1:普通用户一般使用该命令都是修改登录密码,使用方法也很简单,只有在提示符下输入 passwd ,按照提示输入原密码,然后再两次输入新密码就可以了,但是要注意密码的复杂度,否则系统不会接受。
[root@cnklog2 ~]# passwd
1.4.2:root用户通常可以在不需要知道用户原密码的情况下修改所有用户的密码,只需要输入密码 passwd 用户名 即可,按照提示两次输入新密码就能够设置完成。如果密码在设置过程中不符合复杂度,系统会提示,但不会阻止设置完成。
[root@cnklog2 ~]# passwd mon
1.4.3:root用户还可以锁定用户,只需要加上-l选项和用户名即可。一旦用户被锁定,将无法登录系统,提示信息都会是密码错误。
[root@cnklog2 ~]# passwd -l mon
1.4.4:如果想恢复用户的登录,可以使用-u选项加用户名即可。一旦解锁,用户就可以重新登录系统。
[root@cnklog2 ~]# passwd -u mon
2:用户组管理与实例
Linux系统为每一个用户都会分配至少一个用户组,很多情况下就可以通过用户组来管理该组中的所有用户。
2.1:建立用户组命令groupadd
groupadd命令用于创建一个新的工作组,新工作组的信息将被添加到系统文件中。
语法如下:
groupadd [-g gid] group
其中各选项含义如下:
-g:指定新增的用户组ID,默认用户组ID为已分配的最大ID加1
例:
2.1.1:建立一个用户组math。方法:使用命令 group math。建立完成后,查看系统的用户组信息文件/etc/group,可以看出用户组已经创建完成,GID为1005。
[root@cnklog2 ~]# groupadd math
[root@cnklog2 ~]# grep math /etc/group
2.2:删除用户组命令groupdel
groupdel要修改的系统文件包括/ect/group和/ect/gshadow。若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组。
语法格式如下
groupdel group
例:
2.2.1:删除用户组math,查看系统文件/ect/group和/ect/gshadow中已经没有math。
[root@cnklog2 ~]# groupdel math
3. 显示系统登录用户命令
3.1:w命令简介
w命令可以显示系统当前登录的用户以及用户正在运行的进程信息。
[root@cnklog2 ~]# w
字段简单说明如下:
字段 | 简单说明 |
USER | 用户帐号 |
TTY | 终端 |
FROM | 远程主机名称 |
LOGIN@ | 用户登录时间 |
IDLE | 空闲时间 |
JCPU | 该tty终端连接的所有进程占用的时间 |
PCPU | 是当前进程(即w项中显示的)所占用的时间 |
WHAT | 正在运行进程 |
3.2:who命令简介
Who命令显示当前登录用户的信息,从左到右依次为用户名称、终端、登录时间。
[root@cnklog2 ~]# who
三、实战:RHEL6/7恢复root密码
1:RHEL7恢复root密码
1.1:首先重启,按↑↓键,进入引导菜单界面,选择第一项,按下e键进行编辑
1.2:找到Linux 16的那一行,将ro改为rw init=/sysroot/bin/sh
1.3:改完之后按下Ctrl+X,使用单用户模式启动
1.4:使用chroot /sysroot命令访问系统,passwd命令修改密码,exit命令退出当目录,执行/bin/sh shutdown –r now重启系统
注意:恢复密码时把selinux关闭
2:RHEL6恢复root密码
2.1:重启服务器,在读秒的时候按任意键,就会出现如下界面
2.2:在1中按下e就会进入到如下界面。将光标移动到kernel那一行,然后再一次按‘e’,进入kernel该行的编辑界面
2.3:选择操内核,给当前内核发送一个参数"1"、"s"、"single"。都是表示,启动后进入单用户模式。
2.4:按Enter键,回到操作系统选择界面。按"b"启动
2.5:进入系统后,输入passwd命令修改root的密码,reboot重启系统;
转载于:https://blog.51cto.com/firstshell/1914388