深入理解linux操作系统---第4讲 用户、组和密码管理

news2025/4/16 0:34:18

4.1 UNIX系统的用户和组

4.1.1 用户与UID

  • UID定义:用户身份唯一标识符,16位或32位整数,范围0-65535。系统用户UID为0(root)、1-999(系统服务),普通用户从1000开始分配
  • 特殊UID:UID 0具有最高权限,应避免创建非root用户使用此值
  • UID冲突风险:不同用户名但相同UID会被系统视为同一用户,导致权限混乱

4.1.2 组与GID

  • GID机制:组标识符用于权限管理,用户可属于多个组,主组信息存储在/etc/passwd,附加组在/etc/group
  • 组权限优势:允许按部门或项目划分权限,例如仅允许kmem组访问内核内存
  • 历史设计:早期使用16位整数存储GID以节省磁盘空间,现代系统扩展为32位

4.2 用户和组管理核心文件

4.2.1 /etc/passwd

  • 结构解析
    username:x:UID:GID:Comment:/home/dir:/bin/bash
    七个冒号分隔字段,包含用户基本信息
  • 密码字段:现代系统用x占位,实际密码存储在/etc/shadow
  • UID分类:0(root)、1-999(系统)、1000+(普通用户)

4.2.2 /etc/shadow

  • 加密机制
    $加密算法$salt$哈希值(如$6$salt$hash使用SHA-512)
  • 安全特性
    • 仅root可读(权限400)
    • 字段包含密码过期时间、最小修改间隔等策略
  • 密码锁定!!*表示账户被锁定

4.2.3 /etc/group

  • 格式示例
    groupname:x:1234:user1,user2
    字段含义:组名、密码占位符、GID、成员列表
  • 附加组管理:用户可通过newgrp切换活动组

4.2.4 /etc/login.defs

  • 关键配置项
    PASS_MAX_DAYS   90      # 密码最长有效期
    UID_MIN         1000    # 最小普通用户UID
    CREATE_HOME     yes     # 自动创建主目录
    ENCRYPT_METHOD SHA512   # 密码加密算法
    

4.2.5 /etc/default/useradd

  • 默认参数:定义新用户的默认shell、主目录路径、过期时间等

4.3 用户管理命令

4.3.1 useradd/adduser

  • 创建用户示例

    useradd -m -u 1500 -s /bin/zsh -c "Dev User" alice
    
    • -m:创建主目录
    • -s:指定登录Shell
  • 系统账户创建-r选项创建UID<1000的系统账户

4.3.2 userdel

  • 彻底删除用户
    userdel -r bob 删除账户并移除主目录
  • 强制删除-f选项可删除已登录用户(慎用)

4.3.3 usermod

  • 修改主组
    usermod -g developers alice
  • 附加组管理
    usermod -aG docker alice(避免覆盖原有组)

4.4 组管理命令

4.4.1 groupadd

  • 创建系统组
    groupadd -r -g 120 sysadmin

4.4.2 groupdel

  • 删除条件:组内无用户时才可删除,否则需-f强制删除

4.4.3 groupmod

  • 重命名组
    groupmod -n new_developers dev_team

4.5 密码管理

4.5.1 策略配置

  • 密码复杂度:通过PAM模块设置(如minlen=8 ucredit=-1要求至少1大写字母)
  • 过期策略
    passwd -n 7 -x 30 -w 5 alice  # 7天不可改,30天过期,提前5天警告
    

4.5.2 passwd命令

  • 锁定账户passwd -l alice 在shadow文件中添加!
  • 查看状态passwd -S alice 显示密码最后修改时间和状态

4.6 综合管理实例

4.6.1 用户添加流程

  1. 创建用户:useradd -m -s /bin/bash john
  2. 设置密码:passwd john(交互式输入)
  3. 加入附加组:usermod -aG sudo john

4.6.2 用户删除步骤

  1. 终止进程:killall -u john
  2. 删除用户:userdel -r john

4.7 其他关键命令

4.7.1 身份信息

  • id:显示用户UID、GID及所属组
    id alice → uid=1001(alice) gid=1001(dev) groups=1001(dev),998(docker)

4.7.2 登录监控

  • who:显示登录用户、终端、时间
    who -uH 显示空闲时间

4.7.8 su与sudo

  • 环境切换
    su - root(加载目标用户环境变量) vs su root(保留当前环境)
  • sudo配置
    # /etc/sudoers
    alice ALL=(ALL) NOPASSWD: /usr/bin/apt-get
    

4.8 练习题

4.8.1 思考题

(1)为了提高系统的安全性,对用户密码应如何管理?

(2)叙述文件/etc/passwd、/etc/shadow和/etc/group文件的作用及其结构。

(3)为何要上锁一个用户?如何锁定一个用户?当需要时如何解锁?

(4)如何在删除一个用户时也同时删除它的家目录,在做操作时应注意些什么问题?

(5)如何观察当前系统的运行级别?

(6)如何确定用户所使用的终端?

(7)红帽的用户管理与Ubuntu的有什么不同,在使用时应注意此什么?

4.8.2 选择题

(1)在UNIX/Linux系统添加新用户的命令是(    )。

A.groupadd         B.usermod             C.userdel             D.useradd

(2)添加用户时使用参数(    )可以指定用户目录。

A.-d             B.-p                 C.-u                 D.-c

(3)用户mytest修改自己的密码可使用(    )。

A.passwd         B.passwd -d mytest          C.passwd mytest         D.passwd -l

(4)解锁一个用户的命令和选项对为(    )。

A.passwd -u             B.passwd -x             C.passwd -d             D.passwd -l

(5)删除一个用户密码所使用的命令和选项对为(    )。

A.passwd -u             B.passwd -x             C.passwd -d              D.passwd -l

4.8.3 综合题

(1)试述Linux系统的访问控制机制。

(2)试述su和sudo命令的用法及控制机制。

(3)试述如何进行用户和组管理。

4.8.4 答案

1.思考题

(1)为了提高系统的安全性,对用户密码应如何管理?

解:

每个用户都要按规定设置和使用密码,。使用密码时应注意以下几个问题:

(1)密码应该按规定定期或不定期的修改。

(2)密码内不应包含完整的单词、生日、电话号码、姓名、用户名、组名、宠物和地址等信息。(3)不同系统和用户应该有不同的密码。

(4)密码应易记且不要写在纸上。

(5)要保密,不要共用密码。

(6)输入密码时不要让别人看见,也不要窥视别人的密码。

系统的安全与方便是矛盾的,不能因方便而忽略安全问题,也不能因过于强调安全而影响正常使用,应该在安全和方便之间找到平衡点或进行取舍。

(2)叙述文件/etc/passwd、/etc/shadow和/etc/group文件的作用及其结构。

解:请参见4.2.1、4.2.2和4.2.3。

(3)为何要上锁一个用户?如何上锁一个用户?当需要时如何解锁?

解:

超级用户或具有管理权限的用户或以根据需要上锁或解锁一个用户。上锁一个用户的理由有很多,比如离开原工作岗位、离开单位或长期出差学习等,也可以是不“遵纪守法”等。上锁用户可以使用命令

# passwd -l user # usermod -L user

解锁时可以使用命令

#passwd -u user # usermod -U user

(4)如何在删除一个用户时也同时删除它的家目录,在做操作时应注意些什么问题?

解:

若在删除一个用户时,也同时删除它的家目录,可使用-r选项。比如,删除用户zhang3,并,同时要删除他的家目录,可以使用如下命令

# userdel -r zhang3

这里需要提醒的是,在删除用户家目录时或用户数据时,要确认再三,在确保不会造成后果时,才能删除。因此,在删除用户时,可以不同时删除用户家目录,经再三确认后,再使用rm等命令删除。

(5)如何观察当前系统的运行级别?

解:

观察或确定系统的当前运行级别,可以使用命令

$ who -r

$ runlevel

(6)如何确定用户所使用的终端?

解:

确定用户所使用的终端可以使用命令

$ tty

当使用-s选项运行tty时,即执行命令“tty -s”时,什么也不输出,只返回状态。状态为0时,表示命令是在终端上运行的,否则表示是在后台等非终端环境下运行的。这点在shell脚本中确定程序是在终端控制下运行或是在后台无终端控制下运行的非常有用。

(7)红帽的用户管理与Ubuntu的有什么不同,在使用时应注意此什么?

解:

主要从用户创建的角度观察此问题。

(1)若不带选项运行useradd,如useradd newuser,则按照默认方式创建newuser,但在红帽和Ubuntu中的结果是不同。这主要是因为在两类系统的/etc/login.defs(见4.2.4)和/usr/default/useradd(见4.2.5)的内容不同造成的。这些不同主要表现在是否创建家目录、家目录的权限和用户SHELL是sh或bash等方面。

以useradd test用户为例,默认情况下:

在红帽下,test的家目录/home/test,且为其创建家目录,使用/bin/bash作为登录shell。若不创建家目录,可使用-M选项。

在Ubuntu下,test的家目录/home/test,但不为其创建家目录,使用/bin/sh作为登录shell。若要创建家目录,可使用-m选项。

创建用户时,是否创建用户家目录,默认情况下取决于/etc/login.defs中变量CREATE_HOME的值,但可以使用-m强制创建,也可以使用-M强制不创建。不创建用户家目录也是常见的,当多个用户共用一个家目录时,只要第一个用户创建时创建了家目录就可以,而以后用户直接使用已经存在的目录。这时应该注意目录的存取权限问题,必要时可将这类用户放在一个组中,但要求目录及内容能被同组人按特定权限访问。

若仔细观察,用户还可以发现用户家目录的权限也不相同,在红帽和Ubuntu下分别为700(rwx------)和755(rwxr-xr-x)。这是由/etc/login.defs中的UMASK所决定的。

(2)若要让useradd在两类系统中的行为相同,可修改/etc/login.defs或/usr/default/useradd。比如,若要让Ubuntu默认也创建用户家目录,则可以在其/etc/login.defs中增加如下一行:

CREATE_HOME  yes

若在创建用户时没有创建家目录,用户创建后,还可手工为其创建家目录,但后要修改家目录归属关系和存取权限。

最简单的办法是,将红帽中的/etc/login.defs和/usr/default/useradd复制到Ubuntu,或将Ubuntu中的/etc/login.defs和/usr/default/useradd复制到红帽,但要注意副作用。

2.选择题

(1)D;(2)A;(3)A;(4)A;(5)C

3.综合题

(1)试述Linux系统的访问控制机制。

解:

对UNIX/Linux系统的管理与使用是以用户(user)为主体的。自然人要想使用系统,必须以某个已在系统中存在的用户身份登录,且通过密码验证后,才能进入系统,并按权限使用。

Unix/Linux系统中有两类用户:超级用户和一般用户。超级用户有至高无上的权力,可做任何事情;一般用户只能在给定的权限范围内进行工作,不得越权行事。用户又按实际的需要分成不同的组(group)。同组用户按规定和目的享有某些共同的权限。

root用户或具有管理权限的用户可以创建或删除用户,当需要时可以创建用户。当一个用户(离开岗位、离开单位或长期出差)不再使用时,可以将其删除,也可以将其上锁。需要时,再创建或解锁。

对于系统中不再使用的用户帐号,应尽早的删除它,因为多余用户的存在可能是安全的隐患。删除用户可以使用userdel命令,删除用户时,是否同时删除用户家目录或数据要视具体情况而定。

每个用户都要按规定设置和使用密码,密码管理命令为passwd

(2)试述su和sudo命令的用法。

解:

①su

su命令的功能是在使用者不退出系统的情况下以其它新用户的身份工作。当不指定用户时,默认root。当不指定任务时,将以新用户的身份启动一个shell;当指定任务时,则以新用户的身份执行任务。在以新用户工作的过程中,有效uid和有效gid变为了新用户的uid和gid。

当不使用登录模式(-、-l或--login)时,su不会为新用户正确设置环境变量。

若要实现身份的彻底转换一定要采用登录模式(使用-、-l或--login选项)。

工作完毕后,按^D变为原来的自己。

在Linux系统中,su的使用都受PAM的控制,具体的控制文件为/etc/pam.d/su和/etc/pam.d/su-l的控制,具体情况参见教材或su的在线文档。

②sudo

sudo的功能是以其它用户(当然也包括root用户)的身份执行命令。

sudo的配置文件是/etc/sudoers,能使用sudo命令的用户必须在此文件中定义,且设置正确。系统为此配置文件提供了一个专用的编辑命令visudo,除了编辑修改sudoers文件外,还可帮助使用者检查配置文件内容的正确性。修改sudoers文件时请使用visudo,但不同系统中使用的编辑器不同,红帽使用vi,Ubuntu使用的是nano。

关于sudoers的设置可参考sudo和sudo.conf的man手册,具体操作可参见实验4。

使用sudo命令,具体管理“角色”或职能的普通用户(比如test),可以履行root用户的的管理职能。若要让一个普通用户(比如test)变为管理员或具有管理职能的用户,最简单办法是:在红帽系统可将其加入wheel组;在Ubuntu中,将其加入sudo或admin组。命令为

# usermod -G wheel test

# usermod -G sudo test

关于sudo命令的使用,可以安装vsftpd软件包为例说明如下:

红帽

# dnf install vsftpd -y  # root用户

$ sudo dnf install vsftpd -y  # 管理员用户(比如刚才的test)

Ubuntu

# apt install vsftpd -y  # root用户

$ sudo apt install vsftpd -y  # 管理员用户(比如刚才的test)

(3)试述如何进行用户和组管理。

解:

对UNIX/Linux系统的管理与使用是以用户(user)为主体的。自然人要想使用系统,必须以某个已在系统中存在的用户身份登录,且通过密码验证后,才能进入系统,并按权限使用。

UNIX/Linux系统的用户又按实际的需要分成不同的组(group)。同组用户按规定和目的享有某些共同的权限。

root用户或具有管理权限的用户可以创建或删除用户,也可创建或删除组。没有任何特殊要求时,创建用户zhang3时只需要,执行命令

# useradd zhang3

就可以了。这里,将按默认规定在创建用户zhangsan时,也同时创建一个zhang3组,且用户zhang3所在的组为zhang3。

现在,假定系统需要使用特定的组(组名为mygrp,GID为66)和特定的用户(用户为myproc,UID为666),其它的由系统默认,创建的方法及过程如下:

# groupadd  -g 66  mygrp

# useradd  -m  -g mygrp  -u 666  myproc

以上操作是在GID为66,UID为666在之前均未使用过的情况,若是已经使用过的,需要在命令中使用-o,告诉命令useradd或groupadd,创建新用户或新组时,要使用已经使用过的GUI或UID,或者说,要创建ID不唯一的用户或组。方法如下:

# groupadd  -o  -g 66  mygrp

# useradd  -m  -g mygrp  -o  -u 666  myproc

每个用户都要按规定设置和使用密码。对于系统中不再使用的用户帐号,应尽早的删除它,因为多余用户的存在可能是安全的隐患。删除用户可以使用userdel命令,删除用户时,是否同时删除用户家目录或数据要视具体情况而定。

删除用户时,一般不删除家目录,原因是家目录可能被共享或存放有重要数据,因此需要慎之又慎,确认再三。用户的家目录删除,可在确定不会造成后果的情况下,使用带有-r选项的rm命令删除。

若要删除用户时,同时删除用户的家目录,可以使用带有-r选项的userdel命令。


总结

  1. 最小权限原则:使用sudo代替直接切换root
  2. 定期审计:检查/etc/passwd/etc/shadow的权限(应为644和400)
  3. 密码策略:启用SHA-512加密,设置90天过期周期

通过深入理解这些机制和工具,管理员可有效提升系统的安全性和管理效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2334704.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于PySide6与pycatia的CATIA绘图比例智能调节工具开发全解析

引言:工程图纸自动化处理的技术革新 在机械设计领域,CATIA图纸的比例调整是高频且重复性极强的操作。传统手动调整方式效率低下且易出错。本文基于PySide6+pycatia技术栈,提出一种支持智能比例匹配、实时视图控制、异常自处理的图纸批处理方案,其核心突破体现在: ​操作效…

STM32硬件IIC+DMA驱动OLED显示——释放CPU资源,提升实时性

目录 前言 一、软件IIC与硬件IIC 1、软件IIC 2、硬件IIC 二、STM32CubeMX配置KEIL配置 三、OLED驱动示例 1、0.96寸OLED 2、OLED驱动程序 3、运用示例 4、效果展示 总结 前言 0.96寸OLED屏是一个很常见的显示模块&#xff0c;其驱动方式在用采IIC通讯时&#xff0c;常用软件IIC…

泛型的二三事

泛型&#xff08;Generics&#xff09;是Java语言的一个重要特性&#xff0c;它允许在定义类、接口和方法时使用类型参数&#xff08;Type Parameters&#xff09;&#xff0c;从而实现类型安全的代码重用。泛型在Java 5中被引入&#xff0c;极大地增强了代码的灵活性和安全性。…

编程思想——FP、OOP、FRP、AOP、IOC、DI、MVC、DTO、DAO

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

【区块链安全 | 第三十九篇】合约审计之delegatecall(一)

文章目录 外部调用函数calldelegatecallcall 与 delegatecall 的区别示例部署后初始状态调用B.testCall()函数调用B.testDelegatecall()函数区别总结漏洞代码代码审计攻击代码攻击原理解析攻击流程修复建议审计思路外部调用函数 在 Solidity 中,常见的两种底层外部函数调用方…

linux多线(进)程编程——(6)共享内存

前言 话说进程君的儿子经过父亲点播后就开始闭关&#xff0c;它想要开发出一种全新的传音神通。他想&#xff0c;如果两个人的大脑生长到了一起&#xff0c;那不是就可以直接知道对方在想什么了吗&#xff0c;这样不是可以避免通过语言传递照成的浪费吗&#xff1f; 下面就是它…

信息安全管理与评估2021年国赛正式卷答案截图以及十套国赛卷

2021年全国职业院校技能大赛高职组 “信息安全管理与评估”赛项 任务书1 赛项时间 共计X小时。 赛项信息 赛项内容 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段 平台搭建与安全设备配置防护 任务1 网络平台搭建 任务2 网络安全设备配置与防护 第二…

高并发秒杀系统设计:关键技术解析与典型陷阱规避

电商、在线票务等众多互联网业务场景中&#xff0c;高并发秒杀活动屡见不鲜。这类活动往往在短时间内会涌入海量的用户请求&#xff0c;对系统架构的性能、稳定性和可用性提出了极高的挑战。曾经&#xff0c;高并发秒杀架构设计让许多开发者望而生畏&#xff0c;然而&#xff0…

微信小程序实战案例 - 餐馆点餐系统 阶段 2 – 购物车

阶段 2 – 购物车&#xff08;超详细版&#xff09; 目标 把“加入购物车”做成 全局状态&#xff0c;任何页面都能读写在本地 持久化&#xff08;关闭小程序后购物车仍在&#xff09;新建 购物车页&#xff1a;数量增减、总价实时计算、去结算入口打 Git Tag v2.0‑cart 1. …

sql 向Java的映射

优化建议&#xff0c;可以在SQL中控制它的类型 在 MyBatis 中&#xff0c;如果返回值类型设置为 java.util.Map&#xff0c;默认情况下可以返回 多行多列的数据

Visual Studio未能加载相应的Package包弹窗报错

环境介绍&#xff1a; visulal studio 2019 问题描述&#xff1a; 起因&#xff1a;安装vs扩展插件后&#xff0c;重新打开Visual Studio&#xff0c;报了一些列如下的弹窗错误&#xff0c;即使选择不继续显示该错误&#xff0c;再次打开后任然报错&#xff1b; 解决思路&am…

【HD-RK3576-PI】Docker搭建与使用

硬件&#xff1a;HD-RK3576-PI 软件&#xff1a;Linux6.1Ubuntu22.04 1.Docker 简介 Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言开发&#xff0c;遵循 Apache 2.0 协议。它可以让开发者将应用程序及其依赖项打包到一个轻量级、可移植的容器中&#xff0c;并在任…

【websocket】使用案例( ​JSR 356 标准)

目录 一、JSR 356方式&#xff1a;简单示例 1、引入依赖 2、注册端点扫描器 3、编写通过注解处理生命周期和消息 4、细节解读 5、总结 二、聊天室案例 方案流程 1、引入依赖 2、注册端点扫描器 3、编写一个配置类&#xff0c;读取httpsession 4、编写通过注解处理生…

IS-IS中特殊字段——OL过载

文章目录 OL 过载位 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Datacom专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2025年04月13日20点12分 OL 过载位 路由过载 使用 IS-IS 的过载标记来标识过载状态 对设备设置过载标记后&#xff…

【时频谱分析】快速谱峭度

算法配置页面&#xff0c;也可以一键导出结果数据 报表自定义绘制 获取和下载【PHM学习软件PHM源码】的方式 获取方式&#xff1a;Docshttps://jcn362s9p4t8.feishu.cn/wiki/A0NXwPxY3ie1cGkOy08cru6vnvc

Spring Boot 支持的内嵌服务器(Tomcat、Jetty、Undertow、Netty(用于 WebFlux 响应式应用))详解

Spring Boot 支持的内嵌服务器详解 1. 支持的内嵌服务器 Spring Boot 默认支持以下内嵌服务器&#xff1a; Tomcat&#xff08;默认&#xff09;JettyUndertowNetty&#xff08;用于 WebFlux 响应式应用&#xff09; 2. 各服务器使用示例 (1) Tomcat&#xff08;默认&#xf…

微软Exchange管理中心全球范围宕机

微软已确认Exchange管理中心&#xff08;Exchange Admin Center&#xff0c;EAC&#xff09;发生全球性服务中断&#xff0c;导致管理员无法访问关键管理工具。该故障被标记为关键服务事件&#xff08;编号EX1051697&#xff09;&#xff0c;对依赖Exchange Online的企业造成广…

基于Qt的串口通信工具

程序介绍 该程序是一个基于Qt的串口通信工具&#xff0c;专用于ESP8266 WiFi模块的AT指令配置与调试。主要功能包括&#xff1a; 1. 核心功能 串口通信&#xff1a;支持串口开关、参数配置&#xff08;波特率、数据位、停止位、校验位&#xff09;及数据收发。 AT指令操作&a…

html简易实现推箱子小游戏原理(易上手)

实现效果 使用方向键移动&#xff0c;将橙色箱子推到绿色目标区域&#xff08;黑色块为墙&#xff0c;白色块为可通过区域&#xff0c;蓝球为小人&#xff09; 实现过程 <!DOCTYPE html> <html> <head><title>推箱子小游戏</title><style&g…

字符串与栈和队列-算法小结

字符串 双指针 反转字符串(双指针) 力扣题目链接 void reverseString(vector<char>& s) {for (int i 0, j s.size() - 1; i < s.size()/2; i, j--) {swap(s[i],s[j]);} }反转字符串II 力扣题目链接 遍历字符串的过程中&#xff0c;只要让 i (2 * k)&#…