一、账户和组管理
(一)账户和工作组的分类
1.用户
超级账户:账户名为 root,它具有一切权限,只有进行系统维护(例如:建立用户等)或其他必要情形下才用超级用户登录,以避免系统出现安全问题。
系统账户:是 Linux 系统正常工作所必需的账户,主要为了满足相应的系统进程对文件属主的要求而建立的,如:bin、daemon、adm、sshd等,注意:系统账户不能登录。
普通用户:是为了让使用者能够使用 Linux 系统资源而建立的,大多数用户属于此类。
2.工作组
基本组(私有组):新建立账户时,若没有指定账户所属的工作组,会建立和账户名相同的组
扩展组(公有组):可以容纳多个用户,组中的账户都具有组所拥有的权利。
3.账户和工作组的配置文件
账户名、密码、工作组信息和工作组密码存储在以下配置文件中:
|---------|--------------|
| 文件功能 | 文件名称 |
| 用户账号文件 | /etc/passwd |
| 用户密码文件 | /etc/shadow |
| 工作组账号文件 | /etc/group |
| 工作组密码文件 | /etc/gshadow |
(1)/etc/passwd
是一个文本文件,用于定义系统的账号,由于所有账户都对passwd有读权限,所以该文件中只定义用户账号,而不保存口令。


字段说明:
由7个字段组成,字段之间用 ":" 分隔(账号名:密码:UID:GID:个人资料:主目录:Shell):
账号名:用户登录 Linux 系统时使用的名称。
密码:以前是以加密格式保存密码的位置,现在密码保存在 /etc/shadow 文件中,此处只是密码占位符 "x" 或 "*" 。若为 "x" ,说明密码经过了 shadow 的保护。
UID:账户的 ID 值,是一个数字标识,相当于账户的"身份证编号",具有唯一性。
root 账户 UID:0
系统账户的 UID:1~999
普通账户的 UID:≥1000
注意:普通账户从1000开始编号,连续编号,即使系统管理员某些账户号码未使用,普通账户也不可使用
GID:基本组的 ID 值,用来区分不同的工作组,相同的组具有相同的 GID 。
个人资料:注释信息,可以记录账户的完整姓名、地址、办公室电话、家庭电话等个人信息。
家目录:类似 Windows 的个人目录,通常是 /home/ 账户名
Shell:定义用户登录后激活的 Shell,默认是 Bash Shell。
(2)/etc/shadow
是存储密码加密后的密文,又称为"影子文件",该文件为了保证了账户密码的安全性只有 root 账户拥有读权限。
注意:若该文件权限发生变化,需要留心恶意攻击。

字段说明:
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
(3)/etc/group
作用是存储每个组的工作组信息。

字段说明:
groupname(组名字 ):passwd(组的加密口令):GID(区分系统不同组的 ID,在 /etc/passwd 域中的 GID 字段是用这个数来指定账户的基本组 ):userlist(是用","分开的账户名,列出的成员以该组为附加组 )
(二)用户管理
1.添加新用户
(1)格式
useradd -参数 账户名
(2)参数
|----|-------------|------------------------------------------------------------------|
| 选项 | 含义 | 作用 |
| -c | 注释信息 | 设置相关的说明信息,如真实姓名、邮箱地址等 |
| -d | 目录 | 设定账户的家目录(默认为 /home/ 用户名) |
| -e | YYYY-MM-DD | 设置用户的失效日期,此日期后将不能使用该账号 |
| -f | 天数 | 指定密码到期后多少天账号被禁用,若指定为0,则表示账号到期后被立即禁用;若指定为-1,则表示账号过期后不被禁用(即密码永不过期) |
| -g | 组名或 GID 号 | 为账户指定所属的基本组,该组在指定时必须已存在 |
| -G | 组名或 GID 号列表 | 为账户指定所属的扩展组,各组在指定时已存在,附加组可以有多个,组之间用","分隔 |
| -P | 密码 | 指定账户的登录密码 |
| -s | shell 名 | 指定账户登录后使用的 Shell ,默认是 bash |
| -u | 用户号 | 设置账号的 UID ,默认是已有账户的最大 UID 加1。如果同时有 -o 选项,则可以重复使用其他用户的标识号 |
| -M | | 不创建账户家目录 |
| -N | | 不创建与账户名同名的基本组 |
(3)示例
新建账户 test1,查看对应配置文件和家目录("!!"表示密码尚未设置):

新建账户 test2,指定 UID 为2001、登录 Shell 为 /bin/bash ,账号永不过期:

新建用于访问 FTP 的 test3 账户,禁止其登录且不创建家目录:

新建账户 test4,UID=3001, 工作组=test1 , 家目录=/test:

2.修改账户信息
(1)格式
usermod -参数 账户名
(2)参数
常用参数 -c,-d,-m,-g,-G,-s,-u 等,意义与 useradd 命令中的参数相同
|----|--------------------------------|
| 选项 | 作用 |
| -l | 新账户名,更改账户的名称,必须在该用户未登录的情况下才能使用 |
| -L | 锁定(暂停)用户账户,使其不能登录使用 |
| -U | 解锁用户账户 |
(3)示例
将用户 test1 的名称修改为 TEST1 ,并暂停使用该账号:

将上例账户 test4 的家目录移至 /home/test4 目录下:

3.账号设置密码
(1)格式
passwd -参数 账户名( Linux 的账户必须设置密码后,才能登录系统 )
(2)参数
|----|-------------------------------------------------|
| 选项 | 作用 |
| -d | 清空指定用户的口令,与未设置口令的账户不同,未设置口令的账户无法登录系统,而口令为空的账户可以 |
| -e | 使用户的账号密码立即过期,强迫用户下次登录时必须修改口令 |
| -i | 口令过期后多少天停用账户 |
| -l | 锁定(停用)用户账户 |
| -n | 指定口令的最短存活期 |
| -x | 指定密码的最长使用期限 |
| -u | 解锁用户账户 |
(3)示例
若显示密码少于8个字符时,再回车重新输入一样的密码即可成功:

锁定账户test2,尝试登录:

(4)注意
密码不能为空、密码不要写成回文,可以使用以下命令设置密码:
echo 密码 | passwd --stdin 用户名
echo 密码 | passwd --stdin 用户名 > /dev/null(无信息提示)
只有 root 用户才能指定用户名
4.删除账号
(1)格式
userdel 账户名
(2)参数
-r:在删除该账户的同时,一并删除该账户对应的家目录
(3)示例

5.账户切换
(1)格式
su 账户名
(2)su 和 su - 命令区别
su 切换方式加载的文件:~/.bashrc,/etc/bashrc
su - 切换方式加载的文件:/etc/bashrc,/etc/profile,~/.bashrc,~/.bash_profile
su - 相当于重新建立环境,若全局变量需要继续使用则不能使用 su - 命令。
(3)注意
从 root 用户切换到任何用户不需要密码验证,而从普通用户到 root 或其他普通用户均需要输入目标用户的密码且验证成功后才可切换。
6.控制用户对系统命令的使用权限
(1)作用
使用 sudo 命令可以提高普通用户的操作权限,使用前需要 root 进行配置
(2)sudo的执行流程
当执行 sudo 提权时,需要输入自己密码来确认(root 执行 sudo 时不需要输入密码)
若密码输入成功,系统会去 /etc/sudoers 文件中查找该用户是否有执行 sudo 的权限
若用户具有执行 sudo 的权限,便开始 sudo 后续接的命令;
(3)配置/etc/sudoers文件方式
执行 visudo 或 vim /etc/sudoers

字段说明:账户名 允许使用的主机=(以谁的身份) 可执行的命令列表
(4)示例

(三)工作组管理
1.创建工作组
(1)格式
groupadd -参数 工作组名
(2)参数
-g GID:指定新工作组的GID,默认值是已有的最大的GID加1
-r: 建立一个系统组账号,与-g不同时使用时,则分配一个1~999的GID
(3)示例
新建工作 group1 :

向系统中添加一个组ID为2000,组名为 group2 的新组:

2.修改工作组
(1)格式
groupmod -参数 工作组名
(2)参数
-g GID:为用户组指定新的组标识号
-n 新用户组:将用户组的名字改为新名字修改用户组的名称和用户组的 GID 值
(3)示例
将组 group1 的 GID 修改为3000,组名修改为 group11:

3.添加/删除组成员
(1)格式
gpasswd -参数 账户 工作组
(2)参数
-r : 删除组密码
-a : 把用户加入组
-d : 把用户从组中删除
-M : 可同时添加多个用户
-A : 给组指派管理员
(3)示例
新建账户 temp1、temp2 后加入 group2 组,并指派 temp1 为 group2 工作组的管理员:

4.删除工作组
格式:groupdel 工作组名
注意:被删除的组若是基本组,则必须先删除引用该基本组的用户,然后再删除该基本组
(四)查看用户登录系统的情况
1.users 命令
作用:查看当前登录系统的用户。
示例:

2.last 命令
作用:列出目前与过去登入系统的用户相关信息,该命令默认会去读取 /var/log/wtmp 文件,并把该文件记录的登入系统的用户名单全部显示出来。
示例:


3.lastlog 命令
作用:查看每个账号的最近登录时间,该命令会读取 /var/log/lastlog 文件
示例:

4.w 命令
作用:显示登录到系统的用户信息
示例:

结果分析:
第一行显示当前的系统时间、开机多久、登录到系统中的用户数和系统平均负载(平均负载是指在1分钟、5分钟、15分钟内系统负载情况)。第二行则是各个项目的说明------
USER:表示登录系统的用户;
TTY:表示用户使用的 TTY 名称;
FROM:表示用户从哪里登录进来;
LOGIN@:用户登录的日期和时间;
IDLE:表示空闲时间;
JCPU:在某段时间内所有与该终端相关的进程任务所耗费的 cpu 时间;
PCPU:当前活动进程使用的系统时间;
WHAT:表示当前用户执行的进程名称和选项。
第三行以后,每行代表一个用户登录的信息。
5. who 命令
作用:显示目前登录到系统的用户,会从 /var/run/utmp 文件来获取信息
示例:

结果分析:
|-------|----------------------------|
| 名称 | 说明 |
| 用户登录名 | 登录系统用户名 |
| 状态 | 表明终端是否对用户可写(+ 表示可写) |
| 终端 | 登录终端类型(pts/1、pts/2、tty2 等) |
| 时间 | 用户登录系统的时间 |
| 活动 | 最后一次活动到现在的时间("." 表示1分钟内) |
| 进程标识 | 用户登录 shell 的进程 ID |
| 主机名 | 客户端机器标识(IP地址或主机名) |
常用参数示例:
列出系统最近启动的日期:

列出关于当前终端的信息:

列出在本地系统上的用户和用户数的清单:

显示当前系统的运行级别:

显示当前每个用户的用户名、登录终端、登录时间、终端活动、进程和主机名:

显示 tty 终端的状态,"+"表示对任何人可写,"-"表示仅对root用户或所有者可写,"?"表示遇到终端故障:
