目录
1. 账户和工作组的分类
1.1. 用户分为三类:
1.2. 工作组分析两类:
1.3. 账户和工作组的配置文件
1.3.1. 用户账号文件
1.3.2. 用户密码文件
1.3.3. 工作组账号文件
2. 用户管理
2.1. 添加新用户
2.1.1例:
2.2. 修改账户信息
例
2.3. 账号设置密码
例:
注意:
2.4. 删除账号
例:
2.5 账户切换
2.6. 控制用户对系统命令的使用权限(sudo )
2.6.1. 作用
2.6.2. sudo的执行流程如下:
2.6.3. 配置/etc/sudoers文件方式
2.6.4. 管理员提权
3. 工作组管理
3.1. 创建工作组
3.2. 修改工作组
3.3. 添加/删除组成员
3.4. 删除工作组
4. 查看用户登录系统的情况
4.1. users命令
4.2. last命令
4.3. lastlog命令
4.4. w命令
结果分析:
4.5. who命令
结果分析:
命令扩展:
超级账户——账户名为root,它具有一切权限,只有进行系统维护(例如:建立用户等)或其他必要情形下才 用超级用户登录,以避免系统出现安全问题。
系统账户——是Linux系统正常工作所必需的账户,主要为了满足相应的系统进程对文件属主的要求而建立 的,如:bin、daemon、adm、sshd等,注意:系统账户不能登录,用于进程访问。
普通用户——是为了让使用者能够使用Linux系统资源而建立的,大多数用户属于此类。
基本组(私有组):新建立账户时,若没有指定账户所属的工作组,会建立和账户名相同的组
扩展组(公有组):可以容纳多个用户,组中的账户都具有组所拥有的权利。
账户名、密码、工作组信息和工作组密码存储在以下配置文件中
/etc/passwd 是一个文本文件,用于定义系统的账号,由于所有账户都对passwd有读权限,所以该文件中 只定义用户账号,而不保存口令。
/etc/passwd 中的文件内容及含义:
root:x:0:0:root:/root:/bin/bash
账户名:密码(加密后的代号):账户编号(uid):工作组的编号 组id(jid):注释:家目录:账户在登陆时所用到的解释器名称(shell解释器)
/etc/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
id 命令
作用:查看账户的UID、GID等信息
格式: id 账户名
/etc/shadow存储密码加密后的密文,又称为“影子文件”,该文件为了保证了账户密码的安全性只有 root 账户拥有读权限,注意:若该文件权限发生变化,需要留心恶意攻击
[root@server ~]# ll /etc/shadow
----------. 1 root root 1130 4月 26 14:39 /etc/shadow
[root@server ~]# head -1 /etc/shadow
root:$6$u6dOBCaz335byzFq$WcZK5t3EAHzCxy0AP8rscP/CrM/SZLzZZDCzkE2T6yiVpnSz92iWt/wd4j L9oBfFglbVrdhsUmRCVfWKTqNdv/::0:99999:7:::
/etc/shadow文件中的每行9个字段的含义为:
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
/etc/group文件存储每个组工作组信息
[root@server ~]# ll /etc/group
-rw-r--r--. 1 root root 810 4月 26 14:39 /etc/group
[root@server ~]# head -1 /etc/group
root:x:0:
字段说明:
格式:
useradd -参数 账户名
参数:
-c 注释信息:设置相关的说明信息,如,:真实姓名、邮箱地址等。
-d:目录:设定账户的家目录(默认为/home/用户名)。
-e YYYY-MM-DD:设置用户的失效日期,此日期后将不能使用该账号。
-f 天数:指定密码到期后多少天账号被禁用,若指定为0,则表示账号到期后被立即
禁用;若指定 为-1,则表示 账号过期后不被禁用(即密码永不过期)。
-g 组名或GID号:为账户指定所属的基本组,该组在指定时必须已存在。
-G:组名或GID号列表:为账户指定所属的扩展组,各组在指定时已存在,附加组可
以有多个,组之间用“,”分隔。
-M:不创建账户家目录。
-N:不创建与账户名同名的基本组。
-p:密码:指定账户的登录密码。
-s shell名:指定账户登录后使用的Shell,默认是bash。
-u 用户号:设置账号的UID,默认是已有账户的最大UID加1。如果同时有-o选项,则‘
可以重复使用其他用户的标 识号。
例1:新建账户test1,查看对应配置文件和家目录
给test设置一个密码,
例2:新建账户test2,指定UID为2001、登录Shell为/bin/bash,账号永不过期
[root@server ~]# useradd test2 -u 2001 -s /bin/bash -e -1
观察test1与test2 的密码文件区别。
例3:新建用于访问FTP的test3账户,禁止其登录且不创建家目录
[root@server ~]# useradd test3 -M -s /sbin/nologin
例4:新建账户test4,UID=3001, 工作组=test1 , 家目录=/test
[root@server ~]# useradd test4 -u 3001 -g test1 -d /test
格式:
usermod -参数 账户名
参数:
常用参数 -c,-d,-m,-g,-G,-s,-u 等,意义与useradd命令中的参数相同
-l 新账户名:更改账户的名称,必须在该用户未登录的情况下才能使用
-L:锁定(暂停)用户账户,使其不能登录使用
-U:解锁用户账户
例1:将用户test1的名称修改为TEST1,并暂停使用该账号
[root@server ~]# usermod test1 -l TEST1 -L
例2:将上例账户test4的家目录移至/home/test4目录下
[root@server ~]# mkdir /home/test4
[root@server ~]# usermod test4 -d /home/test4
原则:
Linux的账户必须设置密码后,才能登录系统
格式: passwd - 参数 账户名
参数:
-d:清空指定用户的口令,与未设置口令的账户不同,未设置口令的账户无法登录系统,而口令为空的账户可以。
-e:使用户的账号密码立即过期,强迫用户下次登录时必须修改口令。
-i:口令过期后多少天停用账户。
-l:锁定(停用)用户账户。
-n:指定口令的最短存活期。
-x:指定密码的最长使用期限。
-u:解锁用户账户。
例1:设置root账户密码
[root@server ~]# passwd root
更改用户 root 的密码 。
新的密码:
无效的密码: 密码少于 8 个字符
重新输入新的密码:
passwd:所有的身份验证令牌已经成功更新。
例2:锁定账户test4,尝试登录
[root@server ~]# passwd -l test4
非交互式的为用户设置密码:
密码不能为空
密码不要写成回文
可以使用以下命令设置密码
echo 密码 | passwd --stdin 用户名
echo 密码 | passwd --stdin 用户名 > /dev/null # 无信息提示(黑洞)
--stdin:从标准输入来接收
修改test4 的密码:
只有 root 用户才能指定用户名:
[root@server ~]# useradd test5
交互式的为test5 设置密码:
[root@server ~]# passwd test5
更改用户 test5 的密码 。
新的密码:
无效的密码: 密码少于 8 个字符
重新输入新的密码:
passwd:所有的身份验证令牌已经成功更新。
[root@server ~]# su test5
[test5@server root]$ passwd test5
passwd:只有 root 户才能指定用户名
非交互式的为test5 设置密码:
[root@server ~]# echo "123456" | passwd --stdin test5
格式
userdel 账户名
参数
-r:在删除该账户的同时,一并删除该账户对应的家目录
例:删除上例的TEST1、test2、test3、test4
[root@server ~]# userdel -r TEST1
[root@server ~]# userdel -r test2
[root@server ~]# userdel -r test3
[root@server ~]# userdel -r test4
格式: su 账户名
su - 账户名
2.5.1. su和su - 命令区别:
区别:加载的配置文件不一样
su 切换方式加载的文件: ~/.bashrc,/etc/bashrc(当前解释器shell配置文件)
su - 切换方式加载的文件: /etc/bashrc,/etc/profile,~/.bashrc,~/.bash_profile
注意:su - 相当于重新建立环境,若全局变量需要继续使用则不能使用su - 命令
2.5.2. 注意
从root用户切换到任何用户不需要密码验证,而从普通用户到root或其他普通用户均需要输入目标用户的 密码且验证成功后才可切换。
使用 sudo 命令可以提高普通用户的操作权限,使用前需要root进行配置(临时提权)
只有在管理员同意的情况下才可以进行临时提权
例:
当执行sudo提权时,需要输入自己密码来确认(root执行sudo时不需要输入密码)
若密码输入成功,系统会去/etc/sudoers文件中查找该用户是否有执行sudo的权限
若用户具有执行sudo的权限,便开始sudo后续接的命令;
执行visudo 或 vim /etc/sudoers
[root@server ~]# visudo
root ALL=(ALL) ALL
# 账户名 允许使用的主机=(以谁的身份) 可执行的命令列表
(可以限定用户所执行的具体命令)
#说明:ALL是关键字,代表任何身份、主机或命令。
进入文件:
[root@server ~]# vim /etc/sudoers
# 在命令模式输入“:100” 定位100行输入:
修改方法:在原有的命令下面经行补充,并强制保存退出。
图中fox已成为准管理员
# 需要wq!强制保存退出
[root@server ~]# su fox
[fox@server root]$ cd /root
bash: cd: /root: 权限不够
[fox@server root]$ sudo cd /root
[sudo] fox 的密码:
[fox@server root]$ pwd
/root
格式:
groupadd -参数 工作组名
参数:
-g GID:指定新工作组的GID,默认值是已有的最大的GID加1
-r: 建立一个系统组账号,与-g不同时使用时,则分配一个1~999的GID
3.1.3. 示例
例1:新建工作group1,group2
root@server ~]# groupadd group1
[root@server ~]# groupadd group2 -g 2001
[root@server ~]# tail -3 /etc/group
格式:
groupmod -参数 工作组名
参数:
-g GID——为用户组指定新的组标识号
-n 新用户组——将用户组的名字改为新名字修改用户组的名称和用户组的GID值
3.2.3. 示例
例:将组group1的GID修改为3000,组名修改为prod1
格式
gpasswd -参数 账户 工作组
参数 (注:该命令只有管理员可以使用)
-r : 删除组密码
-a : 把用户加入组
-d : 把用户从组中删除。
-M : 可同时添加多个用户
-A : 给组指派管理员。
3.3.3. 示例
例:新建账户temp1、temp2后加入group2组,并指派temp1为group2工作组的管理员
[root@server ~]# useradd temp1
[root@server ~]# useradd temp2
[root@server ~]# gpasswd -a temp1 group2
正在将用户“temp1”加入到“group2”组中
[root@server ~]# gpasswd -a temp2 group2
正在将用户“temp2”加入到“group2”组中
[root@server ~]# gpasswd -A temp1 group2
注意:被删除的组若是基本组,则必须先删除引用该基本组的用户,然后再删除该基本组
格式
groupdel 工作组名
示例
例1:删除组prod1 [root@server ~]# groupdel prod1
作用 :查看当前登录系统的用户
例:
作用: 列出目前与过去登入系统的用户相关信息,该命令默认会去读取/var/log/wtmp文件,并把该文件记录的 登入系统的用户名单全部显示出来
例:
作用: 查看每个账号的最近登录时间,该命令会读取/var/log/lastlog文件
例:
作用 :显示登录到系统的用户信息
例:
第一行显示当前的系统时间、开机多久、登录到系统中的用户数和系统平均负载(平均负载是指在1分钟、 5分钟、15分钟内系统负载情况)
第二行只是各个项目的说明
USER:表示登录系统的用户
TTY:表示用户使用的TTY名称
FROM:表示用户从哪里登录进来
LOGIN@:用户登录的日期和时间
idle:表示空闲时间
JCPU:在某段时间内所有与该终端相关的进程任务所耗费的cpu时间
PCPU:当前活动进程使用的系统时间
WHAT:表示当前用户执行的进程名称和选项
第三行以后,每行代表一个用户登录的信息。
作用: 显示目前登录到系统的用户,会从/var/run/utmp文件来获取信息
例:
[root@server ~]# who -b 列出系统最近启动的日期
system boot 2022-05-09 15:38
[root@server ~]# who -m 列出关于当前终端的信息
root pts/0 2022-05-09 15:38 (192.168.168.1)
[root@server ~]# who am i
root pts/0 2022-05-09 15:38 (192.168.168.1)
[root@server ~]# who am I
root pts/0 2022-05-09 15:38 (192.168.168.1)
[root@server ~]# who -q 列出在本地系统上的用户和用户数的清单
root # users=1
[root@server ~]# who -r 显示当前系统的运行级别
run-level 3 2022-05-09 15:38
[root@server ~]# who -u 显示当前每个用户的用户名、登录终端、登录时间、终端活动、进程和主机名
root pts/0 2022-05-09 15:38 . 1510 (192.168.168.1)
[root@nserver ~]# who -T 显示tty终端的状态,“+”表示对任何人可写,“-”表示仅对root用户或所有 者可写,“?”表示遇到终端故障
root + pts/0 2022-05-09 15:38 (192.168.168.1)
[root@server ~]# who -w 和-T一样
root + pts/0 2022-05-09 15:38 (192.168.168.1)