当前位置: 首页 > news >正文

账户和组管理

 账户和组管理

账户和工作组的分类

用户分为三类:

  • 超级账户——账户名为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 ~]# visudo​root     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系统上的客户端机器标识
http://www.dtcms.com/a/283469.html

相关文章:

  • JavaEE——死锁
  • PowerBI实现仅在需要图表时显示图表
  • 傅里叶变换算子性质证明
  • GTSuite许可管理常见问题及解决方案
  • 基于FPGA的IIC控制EEPROM读写(1)
  • Mybatis07-逆向工程
  • 《python语言程序设计》2018版第8章5题编写函数统计特定不重复字符串s2在s1中的出现次数
  • C#获取当前系统账户是否为管理员账户
  • 资源利用率提升50%:Serverless 驱动国诚投顾打造智能投顾新范式
  • 用Amazon Q Developer助力Python快捷软件开发
  • EMS4000/EMS3900/EMS4100/EMS3157/EMS/23157高性能高质量模拟开关芯片
  • Go语言自学笔记(2.3-2.6)
  • C++:vector(2)之vector的模拟实现
  • 使用 SeaTunnel 建立从 MySQL 到 Databend 的数据同步管道
  • [2025CVPR-图象检索方向]CCIN:用于合成图像检索的合成冲突识别和中和模型
  • OWASP Top 10 攻击场景实战
  • 简单易懂,什么是连续分配管理方式
  • Vue3+Ts实现父子组件间传值的两种方式
  • 设计模式之【观察者模式】
  • 多维动态规划题解——不同路径【LeetCode】记忆化搜索
  • ai 编程工具,简单总结
  • 16路串口光纤通信FPGA项目实现指南 - 第二部分(下)
  • Day36 Java方法和流程控制练习 计算器
  • Linux运维新手的修炼手扎之第19天
  • Linux内核设计与实现 第1章:内核简介
  • UDP和TCP的主要区别是什么?
  • --- Bean 的生命周期 ---
  • Redis键过期后会立即删除吗
  • 光环效应(HALO Effect)
  • MySQL高并发高可用架构设计与实现:主从复制与读写分离