Linux系统下的用户管理模式

Linux系统下的用户管理模式

本文以属于Linux系统基本概念,如果以查找教程教程,解决问题为主,只需要查看本文后半部分。
如需要系统性学习请查看本文前半部分。

文章目录

  • Linux系统下的用户管理模式
    • 1. Linux下用户的概念
    • 2. 创建不同类型的用户
      • 2.1 创建用户useradd命令基本用法
      • 2.1 useradd举例说明
    • 3. 删除用户userdel命令
      • 3.1 创建用户useradd命令基本用法
      • 3.2 userdel举例说明
    • 4. 创建用户组groupadd
        • 4.1 创建用户组groupadd基本用法
      • 4.2 groupadd举例说明
    • 5. 删除用户组groupdel
      • 5.1 删除用户组groupdel命令基本用法
        • 5.2 groupdel举例说明
    • 6. 答疑
      • 6.1 删除组会删除用户吗
      • 6.2 创建用户时默认创建组吗
      • 6.3 如果在创建用户时没有配置相关信息,后续应该怎样修改
      • 6.4 创建的用户和用户组的配置文件存放位置?
      • 6.5 如何给普通用户配置sudo权限?
      • 6.6 如何给普通用户配置免密操作sudo

1. Linux下用户的概念

linux是分时多用户操作系统。可以同时为几个、几十个甚至几百个用户服务。也就是同时可以有多个账号登录。一个linux终端可以登录多个用户,一个用户可以在多个Linux终端同时登录。

tips:我们常用的Windows操作系统是一个分时单用户操作系统。同时一个WIndows系统只能登录一个用户。一个WIndows用户只能在一个WIndows终端登录。

在Linux系统中,相关的概念主要有用户(用UID来标识,UID从0开始)和用户组两种(用GID来标识,GID从0开始).

  • 用户账户用户账户包括用户名、密码、用户ID(UID)、组ID(GID)、用户主目录、shell等信息。用户账户用于登录系统并执行操作。

  • 用户ID (UID):每个用户账户都有一个唯一的UID,范围从0开始。UID为0的用户具有超级用户权限,通常称为root。普通用户的UID一般从1000开始(在某些系统中可能是1001或更高)。

  • 组和组ID (GID):除了用户账户外,Linux还支持用户组。用户可以属于多个组,每个组也有一个唯一的GID。组用于简化权限管理,同一组内的用户共享相同的权限。

  • 权限:Linux使用文件和目录权限来控制用户对系统资源的访问。每个文件和目录都有关联的读、写和执行权限,这些权限可以针对所有者、所属组和其他用户进行设置。

  • sudo命令:sudo允许普通用户以root或其他用户的身份执行命令,从而实现更细粒度的权限控制和管理。

  • 虚拟用户和虚拟组:Linux系统中存在一些用于特定服务或目的的虚拟用户和组,如nobody、messagebus等,它们通常不对应实际的登录用户。

  • 用户配置文件:每个用户账户都有一个家目录,其中包含各种配置文件和数据文件。此外,系统级的配置文件(如/etc/passwd、/etc/group)存储了所有用户和组的信息。

下图为部分不同类型用户的权限和特点。我们一般登录使用的root用户为超级用户。拥有系统的所有权限,也可以直接免密登录任何用户。

用户类型UID范围特点与权限
超级用户(Root)0- 拥有系统最高权限
- 可以对所有文件系统操作,包括增加、注销用户
- 可以执行任何命令和操作
系统用户1–499- 通常用于运行系统守护进程或服务
- 不期望登录
- 限制访问和操作权限
普通用户500–65534- 用于日常操作和应用
- 权限受限,需要通过sudo获取额外权限
客户端用户(nobody)- 特殊用户,用于无特权操作或来宾账户
- 权限极低,仅能访问特定资源

2. 创建不同类型的用户

2.1 创建用户useradd命令基本用法

创建用户一般使用useradd命令来创建

用法:useradd [选项] 登录名useradd -Duseradd -D [选项]选项:--badnames                do not check for bad names-b, --base-dir BASE_DIR       新账户的主目录的基目录--btrfs-subvolume-home    use BTRFS subvolume for home directory-c, --comment COMMENT         新账户的 GECOS 字段-d, --home-dir HOME_DIR       新账户的主目录-D, --defaults                显示或更改默认的 useradd 配置-e, --expiredate EXPIRE_DATE  新账户的过期日期-f, --inactive INACTIVE       新账户的密码不活动期-g, --gid GROUP               新账户主组的名称或 ID-G, --groups GROUPS           新账户的附加组列表-h, --help                    显示此帮助信息并退出-k, --skel SKEL_DIR           使用此目录作为骨架目录-K, --key KEY=VALUE           不使用 /etc/login.defs 中的默认值-l, --no-log-init             不要将此用户添加到最近登录和登录失败数据库-m, --create-home             创建用户的主目录-M, --no-create-home          不创建用户的主目录-N, --no-user-group           不创建同名的组-o, --non-unique              允许使用重复的 UID 创建用户-p, --password PASSWORD       加密后的新账户密码-r, --system                  创建一个系统账户-R, --root CHROOT_DIR         chroot 到的目录-P, --prefix PREFIX_DIR       prefix directory where are located the /etc/* files-s, --shell SHELL             新账户的登录 shell-u, --uid UID                 新账户的用户 ID-U, --user-group              创建与用户同名的组-Z, --selinux-user SEUSER     为 SELinux 用户映射使用指定 SEUSER

2.1 useradd举例说明

# 创建一个用户xianggu,自动创建家目录,用/bin/bash作为登录shell,设置uid为10086,描述信息为"我是炒香菇的书呆子,一个DBA",设置密码为 xianggu
useradd -m -s /bin/bash -u 10086 -c "我是炒香菇的书呆子,一个DBA" -p xianggu xianggu

image-20240708221910719

登录到xianggu用户

image-20240708222105556

[xianggu@xianggu ~]$ whoami
xianggu
# 在/etc/passwd文件中查看xianggu用户的详细信息
[xianggu@xianggu ~]$ grep xianggu /etc/passwd

image-20240708225631114

在创建用户时,使用useradd -m 可以自动指定用户家目录为/home/xxx/,我们可以使用useradd -d /路径 在指定用户家目录

# 创建用户xianggu2 家目录为 /mnt/user/xianggu2
useradd -d /mnt/user/xianggu2 xianggu2
# 登录xianggu2用户。查看信息
cat /etc/passwd | grep xianggu2 

image-20240708230100299

image-20240708230232443

3. 删除用户userdel命令

3.1 创建用户useradd命令基本用法

删除用户一般使用userdel命令

使用格式:userdel [选项] 登录名选项说明:-f, --force:强制执行某些在正常情况下会失败的操作。例如,即使用户当前仍登录在系统中也能进行删除,或者删除那些并不属于该用户的文件。
-h, --help:显示此帮助信息并退出。
-r, --remove:删除用户的家目录及邮件缓存。
-R, --root CHROOT_DIR:指定chroot到的目录。
-P, --prefix PREFIX_DIR:前缀目录,其中存放着/etc/*文件的位置。
-Z, --selinux-user:删除该用户所有的SELinux用户映射。

3.2 userdel举例说明

一般情况下,我们删除用户使用userdel 用户即可,但这样并不会删除用户的家目录

# 删除用户并删除家目录
userdel -r xianggu2
# 强制删除用户
userdel -rf xianggu2

image-20240708231028229

4. 创建用户组groupadd

4.1 创建用户组groupadd基本用法

groupadd是Linux系统中用于创建新用户组的命令。在多用户操作系统中,用户组用于管理对系统资源的访问权限,允许一组用户共享相同的权限集。

使用方法:groupadd [选项] 组名选项说明:-f, --force:如果组已经存在,则命令仍会成功退出,并且如果指定了-g选项并且GID已被使用,-g选项会被忽略。
-g, --gid GID:为新建的组使用指定的GID(组标识符)。
-h, --help:显示此帮助信息并退出程序。
-K, --key KEY=VALUE:不使用/etc/login.defs文件中的默认值,而是使用指定的KEY和VALUE。
-o, --non-unique:允许创建GID重复的组,即多个组可以拥有相同的GID。
-r, --system:创建一个系统组。系统组通常具有较低的GID,并用于系统服务和守护进程。
-R, --root CHROOT_DIR:指定chroot到的目录,即将命令的作用范围限定在一个特定的子目录环境中。
-P, --prefix PREFIX_DIR:指定目录前缀,即groupadd所使用的配置文件所在的目录前缀。
-U, --users USERS:列出属于该组的用户成员,可以在创建组的同时指定初始的用户成员列表。

注意事项

  • 在创建用户组时,建议选择一个尚未被系统或其他组使用的GID,以避免潜在的权限冲突。
  • 用户组的GID通常应该位于系统定义的范围内,避免与系统保留的GID范围冲突。
  • 创建用户组后,可以通过usermod命令将现有用户添加到这个新组中,或者在创建新用户时使用-g-G选项将用户直接添加到该组。

4.2 groupadd举例说明

例如我想要创建一个用户组 newgroup ,设置GID为10010,将xianggu添加到组中

groupadd -g 10010 -U xianggu newgroup

image-20240708232503797

查看xianggu用户的信息,是否属于newgroup组

cat /etc/group | grep xianggu

可以看到xianggu属于xianggu组,也属于newgroup组。拥有两个组的权限。但是xianggu组是xianggu的主组,newgroup是附加组

image-20240708232743298

5. 删除用户组groupdel

5.1 删除用户组groupdel命令基本用法

groupdel [选项] 组名选项说明:-h, --help:显示此帮助信息并退出,提供命令的使用指南。
-R, --root CHROOT_DIR:指定要进行chroot操作的目录,即将命令的作用环境切换到指定的子目录中执行。
-P, --prefix PREFIX_DIR:指定前缀目录,即/etc/*文件所在目录的前缀位置,用于定制命令查找系统配置文件的路径。
-f, --force:即使有用户将该组作为主组,也强制删除该组。通常,如果一个组是某用户的主组,groupdel会拒绝删除,但使用-f选项可以覆盖这一限制。
5.2 groupdel举例说明

删除用户组newgroup

groupdel newgroup 

image-20240708233726315

6. 答疑

6.1 删除组会删除用户吗

删除一个用户组本身并不会直接删除用户。在Linux系统中,用户和用户组是分开管理的。当你使用groupdel命令删除一个用户组时,它仅从系统中移除了那个特定的组,但不会影响到任何用户的账户状态。

然而,如果删除的组是某个用户的主组(primary group),那么情况会有所不同。在这种情况下,大多数Linux发行版会在删除主组时报告错误,因为一个用户必须属于至少一个组。

6.2 创建用户时默认创建组吗

当在Linux系统中使用useradd命令创建一个新用户时,如果不指定用户所属的组,系统会默认创建一个与该用户名同名的组作为该用户的主组(也被称为私有组或默认组)

6.3 如果在创建用户时没有配置相关信息,后续应该怎样修改

修改用户权限需要使用管理员权限才能执行,在命令前通常需要加上sudo

  1. 修改用户密码: 使用passwd命令可以修改用户密码。作为管理员,可以直接修改任何用户的密码,而普通用户只能修改自己的密码。例如:

    sudo passwd 用户名
    

    输入新密码两次即可完成修改。

  2. 修改用户主目录: 使用usermod命令可以改变用户的主目录。例如:

    sudo usermod -d /new/home/directory 用户名
    

    这里/new/home/directory是要设置的新主目录路径。

  3. 修改用户组: 可以使用usermod命令将用户添加到或从组中移除。例如,将用户添加到一个新组:

    sudo usermod -aG 新组名 用户名
    

    移除用户从一个组:

    gpasswd -d 用户名 组名
    
  4. 设置用户过期时间: 使用chage命令可以设置用户账户的过期时间。例如,设置用户账户在2024年1月1日过期:

    sudo chage -E "2024-01-01" 用户名
    
  5. 设置用户密码过期时间: 同样使用chage命令可以设置用户密码的有效期。例如,设置用户密码90天后过期:

    sudo chage -M 90 用户名
    
  6. 更改用户的UID/GID: 使用usermod命令可以更改用户的UID(User ID)或GID(Group ID)。例如,更改用户的UID:

    sudo usermod -uUID 用户名
    

    更改用户的主组(GID):

    sudo usermod -g 新GID 用户名
    
  7. 更改用户登录Shell: 使用usermod命令可以更改用户登录时默认使用的shell。例如,更改用户的登录shell为bash:

    sudo usermod -s /bin/bash 用户名
    

6.4 创建的用户和用户组的配置文件存放位置?

  1. /etc/passwd: 这个文件包含系统中所有用户的账号信息。每一行代表一个用户,字段包括用户名、密码占位符、用户ID(UID)、组ID(GID)、用户全名、主目录和登录Shell。密码在这里实际上并不存储明文,而是存储一个占位符,真正的密码存储在/etc/shadow文件中(对于加密密码)。
  2. /etc/shadow: 这个文件存储用户的加密密码以及其他密码相关的策略信息,如密码的最后修改时间、密码过期时间等。这是为了增加系统的安全性,防止非授权访问。
  3. /etc/group: 类似于/etc/passwd,这个文件包含了系统中所有用户组的信息。每一行代表一个组,字段包括组名、密码占位符、组ID(GID)和组成员列表。
  4. /etc/sudoers: 这个文件定义哪些用户和用户组可以使用sudo命令,并规定了他们可以执行的命令和目标主机等。这是一个非常重要的文件,用于控制系统的超级用户权限。
  5. /etc/login.defs: 这个文件包含登录和密码管理的默认策略和参数,例如密码过期时间、密码尝试次数限制等。

6.5 如何给普通用户配置sudo权限?

这里以给xianggu用户添加sudo权限为例

在root账号下或者其他具有sudo权限的用户下

  1. 编辑sudoers文件

    vi /etc/sudoers
    

    这将使用默认的文本编辑器打开/etc/sudoers文件。

  2. 找到相关行: 在文件中找到类似下面的一行:

    快捷操作:在命令模式下,输入/root,按回车,既可以在文件中搜索root,然后按n,可以搜索下一个root字符

    root    ALL=(ALL:ALL) ALL
    

    这行表示root用户可以在所有主机上以任何用户身份执行任何命令。

    image-20240708235217887

  3. 添加用户到sudoers: 在文件的适当位置(通常是文件末尾)添加一行,格式如下:

    xianggu    ALL=(ALL:ALL) ALL
    

    用户名替换为你希望给予sudo权限的用户名称。这样,该用户就能以root权限执行命令。

  4. 保存并退出: 编辑完成后,保存文件并退出编辑器。在vi编辑器中,你可以使用Esc键回到命令模式,然后输入:wq!来保存并退出。

6.6 如何给普通用户配置免密操作sudo

这里以给xianggu用户添加免密sudo权限为例

在root账号下或者其他具有sudo权限的用户下

  1. 编辑sudoers文件

    vi /etc/sudoers
    

    这将使用默认的文本编辑器打开/etc/sudoers文件。

  2. 找到相关行: 在文件中找到类似下面的一行:

    快捷操作:在命令模式下,输入/root,按回车,既可以在文件中搜索root,然后按n,可以搜索下一个root字符

    root    ALL=(ALL:ALL) ALL
    

    image-20240709000140304

    这行表示root用户可以在所有主机上以任何用户身份执行任何命令。

  3. 添加用户到sudoers: 在文件的适当位置(通常是文件末尾)添加一行,格式如下:

    xianggu    ALL=(ALL:ALL) ALL
    

    用户名替换为你希望给予sudo权限的用户名称。这样,该用户就能以root权限执行命令。

    image-20240709000217959

    如果想要给某个组添加sudo免密权限,则需要如下配置

    image-20240709000358367

  4. 保存并退出: 编辑完成后,保存文件并退出编辑器。在vi编辑器中,你可以使用Esc键回到命令模式,然后输入:wq!来保存并退出。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Johnson Counter

目录 描述 输入描述: 输出描述: 参考代码 描述 请用Verilog实现4位约翰逊计数器(扭环形计数器),计数器的循环状态如下。 电路的接口如下图所示。 输入描述: input clk , input …

第一百四十九节 Java数据类型教程 - Java子字符串、字符串转换

Java数据类型教程 - Java子字符串 获取子字符串 我们可以使用substring()方法来获取字符串的子部分。 我们可以将开始索引作为参数,并返回一个从开始索引开始到字符串结尾的子串。 我们还可以将开始索引和结束索引作为参数。 它返回从开始索引开始的子字符串和小…

[数仓]七、离线数仓(PrestoKylin即席查询)

第1章 Presto 1.1 Presto简介 1.1.1 Presto概念 1.1.2 Presto架构 1.1.4 Presto、Impala性能比较 Presto、Impala性能比较_presto和impala对比-CSDN博客 测试结论:Impala性能稍领先于Presto,但是Presto在数据源支持上非常丰富,包括Hive、图数据库、传统关系型数据库、Re…

记录一次Nginx的使用过程

一、Docker安装配置nginx 1.拉取镜像 docker pull nginx2.创建挂载目录 启动前需要先创建Nginx外部挂载目录文件夹 主要有三个目录 conf:配置文件目录log:日志文件目录html:项目文件目录(这里可以存放web文件) 创建挂…

云计算【第一阶段(28)】DNS域名解析服务

一、DNS解析的定义与作用 1.1、DNS解析的定义 DNS解析(Domain Name System Resolution)是互联网服务中的一个核心环节,它负责将用户容易记住的域名转换成网络设备能够识别和使用的IP地址。一般来讲域名比 IP 地址更加的有含义、也更容易记住…

鸿蒙小练习

bean对象 export class BannerImage{id:numberurl:stringtargetUrl:stringproductId:numberconstructor(id: number, url: string, targetUrl: string, productId: number) {this.id idthis.url urlthis.targetUrl targetUrlthis.productId productId} }export class d…

乐鑫ESPC3 ESP8685 WiFi蓝牙模块透传程序设置教程,抛开繁琐AT指令,简单Web页面配置,即可实现透传

完整文档请下载规格书 TTL-WiFi 透传产品 使用手册 一. 产品概述 二. 接口定义 三. 软件透传WEB配置使用说明 3.1 STATUS配置界面 3.2 MODULE配置界面 n Serial(串口配置) n WiFi(WiFi配置) n Networks(网络…

mybatis mapper.xml 比较运算符(大于|小于|等于)的写法: 转义和<![CDATA[]]>

文章目录 引言I 使用xml 原生转义的方式进行转义II 使用 <![CDATA[ 内容 ]]>引言 应用场景:查询时间范围 背景:在 *.xml 中使用常规的 < > = <= >= 会与xml的语法存在冲突 <![CDATA[]]> 比 转义符 来的繁琐 <![CDATA[]]> 表示xml解析器忽略…

怎样优化 PostgreSQL 中对日期时间范围的模糊查询?

文章目录 一、问题分析&#xff08;一&#xff09;索引未有效利用&#xff08;二&#xff09;日期时间格式不统一&#xff08;三&#xff09;复杂的查询条件 二、优化策略&#xff08;一&#xff09;使用合适的索引&#xff08;二&#xff09;规范日期时间格式&#xff08;三&a…

Hadoop简明教程

文章目录 关于HadoopHadoop拓扑结构Namenode 和 Datanode 基本管理启动Hadoop启动YARN验证Hadoop服务停止Hadoop停止HDFS Hadoop集群搭建步骤准备阶段Java环境配置Hadoop安装与配置HDFS格式化与启动服务测试集群安装额外组件监控与维护&#xff1a; 使用Docker搭建集群使用Hado…

Chain-of-Verification Reduces Hallucination in Lagrge Language Models阅读笔记

来来来&#xff0c;继续读文章了&#xff0c;今天这个是meta的研究员们做的一个关于如何减少LLM得出幻觉信息的工作&#xff0c;23年底发表。文章链接&#xff1a;https://arxiv.org/abs/2309.11495 首先&#xff0c;这个工作所面向的LLM的问答任务&#xff0c;是list-based q…

Nginx理论篇与相关网络协议

Nginx是什么&#xff1f; Nginx是一款由C语言编写的高性能、轻量级的web服务器&#xff0c;一个线程能处理多个请求&#xff0c;支持万级并发。 优势&#xff1a;I/O多路复用。 I/O是什么&#xff1f; I指的是输入&#xff08;Input&#xff09;,O是指输出&#xff08;Outp…

java中 使用数组实现需求小案例

Date: 2024.04.08 18:32:57 author: lijianzhan 需求实现&#xff1a; 设计一个java类&#xff0c;java方法&#xff0c;根据用户手动输入的绩点&#xff0c;从而获取到绩点最高的成绩。 实现业务逻辑的代码块 import java.util.Scanner;public class PointDemo {/*** 需求&…

python-24-零基础自学python while循环+交互+数据的存储

学习内容&#xff1a;《python编程&#xff1a;从入门到实践》第二版 知识点&#xff1a; 文件处理 with open&#xff08;&#xff09;while 练习内容&#xff1a;10章练习题10-3、10-4、10-5 练习10-3&#xff1a;访客 编写一个程序&#xff0c;提示用户输入名字。用户做…

SpringBoot实战:轻松实现XSS攻击防御(注解和过滤器)

文章目录 引言一、XSS攻击概述1.1 XSS攻击的定义1.2 XSS攻击的类型1.3 XSS攻击的攻击原理及示例 二、Spring Boot中的XSS防御手段2.1 使用注解进行XSS防御2.1.1 引入相关依赖2.1.2 使用XSS注解进行参数校验2.1.3 实现自定义注解处理器2.1.4 使用注解 2.2 使用过滤器进行XSS防御…

《算法笔记》总结No.5——递归

一.分而治之 将原问题划分为若干个规模较小而结构与原问题相同或相似的子问题&#xff0c;然后分别解决这些子问题&#xff0c;最后合并子问题的解&#xff0c;即可得到原问题的解&#xff0c;步骤抽象如下&#xff1a; 分解&#xff1a;将原问题分解为若干子问题解决&#x…

[氮化镓]Kevin J. Chen组新作—肖特基p-GaN HEMTs正栅ESD机理研究

这篇文章是发表在《IEEE Electron Device Letters》上的一篇关于Schottky型p-GaN栅极高电子迁移率晶体管&#xff08;HEMTs&#xff09;的正向栅极静电放电&#xff08;ESD&#xff09;机理研究的论文。文章由Jiahui Sun等人撰写&#xff0c;使用了基于碳化硅&#xff08;SiC&a…

Java--多态

1.多态为同一方法根据发送对象的不同而采用多种不同的行为方式 2.一个对象的实际类型是确定的&#xff0c;但可以指向对象的引用的类型有很多 3.多态存在的条件 1.有继承关系 2.子类重写父类方法 3.父类引用指向子类对象 4.多态是方法的多态&#xff0c;属性没有多态 5.由于…

全网最适合入门的面向对象编程教程:11 类和对象的Python实现-子类调用父类方法-模拟串口传感器和主机

全网最适合入门的面向对象编程教程&#xff1a;11 类和对象的 Python 实现-子类调用父类方法-模拟串口传感器和主机 摘要&#xff1a; 本节课&#xff0c;我们主要讲解了在 Python 类的继承中子类如何进行初始化、调用父类的属性和方法&#xff0c;同时讲解了模拟串口传感器和…

Python | Leetcode Python题解之第223题矩形面积

题目&#xff1a; 题解&#xff1a; class Solution:def computeArea(self, ax1: int, ay1: int, ax2: int, ay2: int, bx1: int, by1: int, bx2: int, by2: int) -> int:area1 (ax2 - ax1) * (ay2 - ay1)area2 (bx2 - bx1) * (by2 - by1)overlapWidth min(ax2, bx2) - …