账户和组管理
账户和组管理
账户和工作组的分类
用户分为三类:
超级账户——账户名为root,它具有一切权限,只有进行系统维护(例如:建立用户等)或其他必要情形下才用超级用户登录,以避免系统出现安全问题。
系统账户——是Linux系统正常工作所必需的账户,主要为了满足相应的系统进程对文件属主的要求而建立的,如:bin、daemon、adm、sshd等,注意:系统账户不能登录。
普通用户——是为了让使用者能够使用Linux系统资源而建立的,大多数用户属于此类。
工作组分析两类:
基本组(私有组):新建立账户时,若没有指定账户所属的工作组,会建立和账户名相同的组
扩展组(公有组):可以容纳多个用户,组中的账户都具有组所拥有的权利。
账户和工作组的配置文件
账户名、密码、工作组信息和工作组密码存储在以下配置文件中
文件功能 | 文件名称 |
---|---|
用户账号文件 | /etc/passwd |
用户密码文件 | /etc/shadow |
工作组账号文件 | /etc/group |
工作组密码文件 | /etc/gshadow |
用户账号文件--passwd
/etc/passwd 是一个文本文件,用于定义系统的账号,由于所有账户都对passwd有读权限,所以该文件中只定义用户账号,而不保存口令。
[root@server ~]# ll /etc/passwd-rw-r--r--. 1 root root 2083 4月 26 14:39 /etc/passwd[root@server ~]# head -1 /etc/passwdroot:x:0:0:root:/root:/bin/bash
/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 账户名
示例
[root@server ~]# id root用户id=0(root) 组id=0(root) 组=0(root)[root@server ~]# id fox用户id=1000(fox) 组id=1000(fox) 组=1000(fox)[root@server ~]# id sshd用户id=74(sshd) 组id=74(sshd) 组=74(sshd)
用户密码文件--shaow
/etc/shadow存储密码加密后的密文,又称为“影子文件”,该文件为了保证了账户密码的安全性只有 root 账户拥有读权限,注意:若该文件权限发生变化,需要留心恶意攻击
[root@server ~]# ll /etc/shadow----------. 1 root root 1130 4月 26 14:39 /etc/shadow[root@server ~]# head -1 /etc/shadowroot:$6$u6dOBCaz335byzFq$WcZK5t3EAHzCxy0AP8rscP/CrM/SZLzZZDCzkE2T6yiVpnSz92iWt/wd4jL9oBfFglbVrdhsUmRCVfWKTqNdv/::0:99999:7:::
/etc/shadow文件中的每行9个字段的含义为:
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
工作组账号文件--group
/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/grouproot:x:0:
字段说明:
字段 | 说明 |
---|---|
Groupname | 组的名字 |
Passwd | 组的加密口令 |
GID | 是系统区分不同组的ID,在/etc/passwd域中的GID字段是用这个数来指定账户的基本组 |
Userlist | 是用“,”分开的账户名,列出的成员以该组为附加组 |
用户管理
添加新用户
格式
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账户,查看对应配置文件及家目录
[root@server ~]# useradd test1[root@server ~]# tail -1 /etc/passwdtest1:x:1001:1001::/home/test1:/bin/bash[root@server ~]# ls /homefox test1[root@server ~]# id test1用户id=1001(test1) 组id=1001(test1) 组=1001(test1)
例2:新建账户test2,指定UID为2001,登录的shell为/bin/bash,账户永不过期
[root@server ~]# useradd test2 -u 2001 -s /bin/bash -e -1[root@server ~]# id test2用户id=2001(test2) 组id=2001(test2) 组=2001(test2)[root@server ~]# tail -1 /etc/shadowtest2:!!:19488:0:99999:7:::
例3:新建用于访问FTP服务的账户test3,禁止登录,且不创建家目录
[root@server ~]# useradd -M -s /sbin/nologin test3[root@server ~]# id test3用户id=2002(test3) 组id=2002(test3) 组=2002(test3)[root@server ~]# ls /homefox test1 test2[root@server ~]# tail -1 /etc/passwdtest3:x:2002:2002::/home/test3:/sbin/nologin
例4:新建账户test4,UID=3001,工作组=test1,家目录=/test
[root@server ~]# useradd test4 -u 3001 -g test1 -d /test[root@server ~]# id test4用户id=3001(test4) 组id=1001(test1) 组=1001(test1)[root@server ~]# tail -1 /etc/passwdtest4:x:3001:1001::/test:/bin/bash
修改账户
格式
usermod -参数 账户名
参数
常用参数:-c、-d、m、-g、-G、-s、-u等参数意义与useradd命令参数相同
-l: 账户名:更改账户的名称,必须在该账户未登录时修改
-L:锁定账户(暂停),使其不可登录
-U:解除锁定
示例
例1:将上例中test1账户修改为TEST1,并暂停使用
[root@server ~]# usermod test1 -l TEST1 -L[root@server ~]# tail -1 /etc/passwdTEST1:x:1001:1001::/home/test1:/bin/bash
例2:将上例test4的家目录移至/home/test4目录下
[root@server ~]# ls /homefox test1 test2[root@server ~]# mkdir /home/test4[root@server ~]# ls /homefox test1 test2 test4[root@server ~]# usermod test4 -d /home/test4[root@server ~]# tail -2 /etc/passwdtest4:x:3001:1001::/home/test4:/bin/bashTEST1:x:1001:1001::/home/test1:/bin/bash
账户的密码设置
原则
linux账户必须设置密码之后才可登录系统
格式
passwd -参数 账户名
参数
-d:清空口令-e:使用户账户的密码立刻过期,下次登录时强制修改密码-i:密码过期多少天后停用账户-l:锁定(停用)账户-n:指定密码的最短存活期-x:指定密码的最长有效期-u:解锁账户
示例
例1:修改root密码
[root@server ~]# passwd root更改用户 root 的密码 。新的密码: 无效的密码: 密码少于 8 个字符重新输入新的密码: passwd:所有的身份验证令牌已经成功更新。
例2:为上例test2、test4设置密码
[root@server ~]# passwd test2[root@server ~]# passwd test4
例3:锁定test2账户,尝试登录
[root@server ~]# passwd -l test2 锁定用户 test2 的密码 。passwd: 操作成功# 解锁[root@server ~]# passwd -u test2 解锁用户 test2 的密码。passwd: 操作成功
注意
密码不能为空
密码不能写成回文
可以使用以下命令设置密码,一般用于脚本编程'
[root@server ~]# echo "123456" | passwd --stdin root更改用户 root 的密码 。passwd:所有的身份验证令牌已经成功更新。# 无信息提示[root@server ~]# echo "123456" | passwd --stdin root > /dev/null
只有root账户修改密码时可以指定账户名
[root@server ~]# useradd test5[root@server ~]# passwd test5更改用户 test5 的密码 。新的密码: 无效的密码: 密码少于 8 个字符重新输入新的密码: passwd:所有的身份验证令牌已经成功更新。[root@server ~]# su test5[test5@server root]$ cd ~[test5@server ~]$ passwd test5passwd:只有 root 用户才能指定用户名。[test5@server ~]$ su root密码: [root@server test5]# cd ~[root@server ~]#
控制用户对系统命令的使用权限
删除账户
格式
userdel 账户
参数
-r:删除该账户时一并删除账户对应的家目录
示例
例:删除上述示例的TEST1 、test2、test3、test4
[root@server ~]# userdel -r TEST1[root@server ~]# userdel -r test2[root@server ~]# userdel -r test3userdel:未找到 test3 的主目录“/home/test3”[root@server ~]# userdel -r test4userdel:/home/test4 并不属于 test4,所以不会删除
注意:删除账户时若出现报错:user xxxxx is currently used by process 34420,说明账户已登录,则使用ctrl+d进行注销,多按几次,在尝试删除
账户切换
格式
su 账户名
su 与 su - 区别
区别:加载的配置文件不一样
su - 相当于重新建立的环境,若全局变量还需要再其它账户中则不能使用su -
注意
root切换到普通账户时不需要密码
任意普通账户切换到root账户时需要输入root密码
控制账户对系统命令的使用权限
作用
使用
sudo
命令可以提高普通用户的操作权限,使用前需要root进行配置例
[root@server ~]# su fox[fox@server root]$ cd /rootbash: cd: /root: 权限不够[fox@server root]$ sudo cd /root我们信任您已经从系统管理员那里了解了日常注意事项。总结起来无外乎这三点:#1) 尊重别人的隐私。#2) 输入前要先考虑(后果和风险)。#3) 权力越大,责任越大。[sudo] fox 的密码:fox 不在 sudoers 文件中。此事将被报告。
sudo的执行流程如下:
当执行sudo提权时,需要输入自己密码来确认(root执行sudo时不需要输入密码)
若密码输入成功,系统会去/etc/sudoers文件中查找该用户是否有执行sudo的权限
若用户具有执行sudo的权限,便开始sudo后续接的命令
配置/etc/sudoers文件方式
执行visudo 或 vim /etc/sudoers
[root@server ~]# visudoroot ALL=(ALL) ALL# 账户名 允许使用的主机=(以谁的身份) 可执行的命令列表#说明:ALL是关键字,代表任何身份、主机或命令。
示例
接上例
[root@server ~]# visudo# 定位到第101行添加t1 ALL=(ALL) ALL# 若无法保存退出,可以强制保存退出,wq![t1@server ~]$ sudo cd /root[sudo] t1 的密码:
工作组管理
创建工作组
格式
groupadd -参数 工作组名
参数
-g GID : 指定新工作组的GID值-r:建立一个系统组账户
示例
例1:新建工作组group1
root@server ~]# groupadd group1[root@server ~]# tail -1 /etc/groupgroup1:x:1003:
例2:向系统中新建一个组ID为2000,名称为group2的工作组
[root@server ~]# groupadd group2 -g 2000[root@server ~]# tail -2 /etc/groupgroup1:x:1003:group2:x:2000:
修改工作组
格式
groupmod -参数 工作组名
参数
-g GID:修改工作组的ID值
-n 新工作组,将用户的组名修改为新工作组名称
示例
例:将group1工作组GID值修改为3000,组名该为group3
[root@server ~]# groupmod -g 3000 -n group3 group1 [root@server ~]# tail -2 /etc/groupgroup2:x:2000:group3:x:3000:
添加/删除组成员
格式
gpasswd -参数 账户名 工作组名
参数
-r:删除组密码-a:将账户加入工作组-d:从工作组中删除账户-M:同时添加多个账户-A:给工作组指派成员
示例
例:新建账户temp1、temp2后加入group2组,并指派temp1为group2工作组的管理员
[root@server ~]# useradd temp1[root@server ~]# passwd temp1更改用户 temp1 的密码 。新的密码: 无效的密码: 密码少于 8 个字符重新输入新的密码: passwd:所有的身份验证令牌已经成功更新。[root@server ~]# useradd temp2[root@server ~]# passwd temp2更改用户 temp2 的密码 。'新的密码: 无效的密码: 密码少于 8 个字符重新输入新的密码: passwd:所有的身份验证令牌已经成功更新。[root@server ~]# gpasswd -a temp1 group2正在将用户“temp1”加入到“group2”组中[root@server ~]# gpasswd -a temp2 group2正在将用户“temp2”加入到“group2”组中[root@server ~]# gpasswd -A temp1 group2
注意
gpasswd命令只有root账户和组管理员可以使用
删除工作组
格式
groupdel 工作组名
示例
[root@server ~]# groupdel group3[root@server ~]# tail -4 /etc/groupt1:x:1002:group2:x:2000:temp1,temp2temp1:x:3001:temp2:x:1003:
查看用户登录情况
users命令
作用
显示当前登录系统的账户名
示例
[root@server ~]# usersroot root root
last命令
作用
列出当前及以前登入系统的账户信息
例
[root@server ~]# lastroot pts/0 192.168.48.1 Thu May 11 10:57 still logged inroot pts/2 192.168.48.1 Thu May 11 10:41 - 10:48 (00:06)root tty2 tty2 Thu May 11 10:37 still logged intest4 tty2 tty2 Thu May 11 10:20 - 10:22 (00:01)root pts/2 192.168.48.1 Thu May 11 09:56 - 10:39 (00:42)root pts/1 192.168.48.1 Wed Apr 26 15:40 gone - no logoutroot tty2 tty2 Wed Apr 26 15:16 - 10:10 (14+18:53)reboot system boot 5.14.0-162.6.1.e Wed Apr 26 15:15 still runningroot tty2 tty2 Wed Apr 26 14:55 - down (00:19)reboot system boot 5.14.0-162.6.1.e Wed Apr 26 14:54 - 15:15 (00:20)root tty2 tty2 Wed Apr 26 14:45 - crash (00:09)reboot system boot 5.14.0-162.6.1.e Wed Apr 26 14:43 - 15:15 (00:32)[root@server ~]# last -2 # 最近2条登录信息root pts/0 192.168.48.1 Thu May 11 10:57 still logged inroot pts/2 192.168.48.1 Thu May 11 10:41 - 10:48 (00:06)wtmp begins Wed Apr 26 14:43:13 2023
lastlog命令
作用
查看每个账户的最近登录时间
示例
[root@server ~]# lastlogUsername Port From Latestroot pts/0 四 5月 11 11:27:51 +0800 2023bin **从未登录过**……
w命令
作用
显示登录到系统的用户信息
例
[root@server ~]# w15:04:43 up 5:27, 1 user, load average: 0.00, 0.02, 0.04USER TTY LOGIN@ IDLE JCPU PCPU WHATroot pts/0 14:36 1.00s 0.20s 0.01s w
结果分析
第一行显示当前的系统时间、开机多久、登录到系统中的用户数和系统平均负载(平均负载是指在1分钟、5分钟、15分钟内系统负载情况)
第二行只是各个项目的说明
USER:表示登录系统的用户
TTY:表示用户使用的TTY名称
FROM:表示用户从哪里登录进来
LOGIN@:用户登录的日期和时间
idle:表示空闲时间
JCPU:在某段时间内所有与该终端相关的进程任务所耗费的cpu时间
PCPU:当前活动进程使用的系统时间
WHAT:表示当前用户执行的进程名称和选项
第三行以后,每行代表一个用户登录的信息。
who命令
作用
显示目前登录到系统的用户,会从/var/run/utmp文件来获取信息
例
[root@server ~]# whoroot pts/0 2023-05-06 14:36 (192.168.48.1)[root@server ~]# who -sroot pts/0 2023-05-06 14:36 (192.168.48.1)[root@server ~]# who -a系统引导 2023-04-26 15:15运行级别 5 2023-04-26 15:16tty2 2023-05-06 14:33 33767 id= 终端=0 退出=0pts/1 2023-05-06 12:40 2470 id=ts/1 终端=0 退出=0pts/2 2023-05-06 14:34 32840 id=ts/2 终端=0 退出=0root + pts/0 2023-05-06 14:36 . 35228 (192.168.48.1)
结果分析
who命令的输出格式 | 名称 | 状态 | 终端 | 时间 | 活动 | 进程标识 | 主机名 |
---|---|---|---|---|---|---|---|
说明 | 用户的登录名 | 表明终端是否对用户都是可写的 | 类似于pts/1、pts/2等 | 用户登录系统的时间 | 某个用户在自己的终端上最后一次活动发生以来到现在的时间,如果是".",表示一分钟内的终端活动 | 用户登录shell的进程id | 登录到linux系统上的客户端机器标识 |