Linux用户和组管理

news2024/11/15 12:10:00

1、用户和组简介

Linux 是多用户多任务操作系统。换句话说,Linux 系统支持多个用户在同一时间内登陆,不同用户可以执行不同的任务,并且互不影响。不同用户具有不问的权限,毎个用户在权限允许的范围内完成不同的任务。

用户组是具有相同特征用户的逻辑集合。有时我们需要让多个用户具有相同的权限,比如查看、修改某一个文件的权限,一种方法是分别对多个用户进行文件访问授权,如果有 10 个用户的话,就需要授权 10 次,显然,这种方法不太合理。最好的方式是建立一个组,让这个组具有查看、修改此文件的权限,然后将所有需要访问此文件的用户放入这个组中。那么,所有用户就具有了和组一样的权限,这就是用户组。(每个用户至少属于一个用户组,新建用户时如果不指定组,则会新建一个组,组名跟用户名相同,并且把该用户添加到该组中。)

将用户分组是 Linux 系统中对用户进行管理及控制访问权限的一种手段

2、用户分类

  • 超级用户(root):linux默认的超级用户账号,对于本操作系统拥有至高无上的权利,类似于windows中的Administrator用户。当要进行系统管理、维护任务的时候才会使用root账号,日常事务,启动某个软件等,都使用普通用户。
  • 普通用户:一般都是由root或者其他普通用户创建而成,在权限上是有限制的,一般只在自己的home家目录中,有至高无上的权限。
  • 程序用户:安装linux以及某些软件的时候,会自动添加一些权限较低的用户,这些程序用户是不能登录到系统中,shell的窗口来输入命令,只能维持系统某个软件的正常运行,比如:bin,deamon,ftp,mail等。

3、UID与GID

Linux 系统中,每个用户的 ID 细分为 2 种,分别是 UID(User ID)GID(Group ID),对于操作系统来说,UID就是用来区分用户的基本依据,每个用户的UID是唯一的。GID和UID类似是组的一个标识号,这与文件有拥有者和拥有群组两种属性相对应。

UID 范围用户身份
0超级用户。UID 为 0 就代表这个账号是管理员账号
1~499系统用户(程序用户)。此范围的 UID 保留给系统使用。其中,1~99 用于系统自行创建的账号;100~499 分配给有系统账号需求的用户。其实,除了 0 之外,其他的 UID 并无不同,这里只是默认 500 以下的数字给系统作为保留账户
500~65535普通用户。通常这些 UID 已经足够用户使用了。2.6.x 内核之后的 Linux 系统已经可以支持 232个 UID

使用id 命令可以查询用户的UID、GID 和附加组的信息。格式如下:

[root@localhost ~]# id 用户名

在这里插入图片描述

4、有关用户和组的配置文件

1)、/etc/passwd

Linux 系统中的 /etc/passwd 文件,是系统用户配置文件,存储了系统中所有用户的基本信息,并且所有用户都可以对此文件执行读操作。

这些用户中的绝大多数是系统或服务正常运行所必需的用户,这些用户通常称为系统用户伪用户系统用户无法用来登录系统,但也不能删除,因为一旦删除,依赖这些用户运行的服务或程序就不能正常执行,会导致系统问题。

使用cat /etc/passwd命令查看文件内容,可以看到,每行记录对应一个用户

在这里插入图片描述每行用户信息都以 : 作为分隔符,划分为 7 个字段,每个字段所表示的含义如下:

用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell

  • 用户名

    用户名,就是一串代表用户身份的字符串。

  • 密码

    “x” 表示此用户设有密码,但不是真正的密码,真正的密码保存在 /etc/shadow 文件中

    在早期的 UNIX 中,这里保存的就是真正的加密密码串,但由于所有用户都能读取此文件,非常容易造成用户数据被窃取。

    现在 Linux 系统把真正的加密密码串放置在 /etc/shadow 文件中,此文件只有 root 用户可以浏览和操作,这样就最大限度地保证了密码的安全。

  • UID

    UID,也就是用户 ID。每个用户都有唯一的一个 UID,Linux 系统通过 UID 来识别不同的用户。

  • GID

    全称“Group ID”,简称“组ID”,表示用户初始组的组 ID 号。

  • 描述性信息

    这个字段并没有什么重要的用途,只是用来解释这个用户的意义而已。

  • 主目录

    也就是用户登录后有操作权限的访问目录,通常称为用户的主目录。例如:root 超级管理员账户的主目录为 /root,普通用户的主目录为 /home/yourIDname,即在 /home/ 目录下建立和用户名相同的目录作为主目录

  • 默认Shell

    Shell 就是 Linux 的命令解释器,是用户和 Linux 内核之间沟通的桥梁。Shell 命令解释器的功能就是将用户输入的命令转换成系统可以识别的机器语言。通常情况下,Linux 系统默认的解释器是 bash(/bin/bash),当然还有其他命令解释器,例如 sh、csh 等。

2)、/etc/shadow

/etc/shadow文件,用于存储 Linux 系统中用户的密码信息,又称为“影子文件”。

/etc/shadow 文件只有 root 用户拥有读权限,其他用户没有任何权限,这样就保证了用户密码的安全性。

使用cat /etc/shadow命令查看文件内容
在这里插入图片描述/etc/passwd 文件一样,文件中每行代表一个用户,同样使用 : 作为分隔符,不同之处在于,每行用户信息被划分为 9 个字段。每个字段的含义如下:

用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段

  • 用户名

    同 /etc/passwd 文件的用户名有相同的含义。

  • 加密密码

    这里保存的是真正加密的密码。目前 Linux 的密码采用的是 SHA512 散列加密算法,原来采用的是MD5DES 加密算法。SHA512 散列加密算法的加密等级更高,也更加安全。

    所有伪用户的密码都是 !!*,代表没有密码是不能登录的。当然,新创建的用户如果不设定密码,那么它的密码项也是 !!,代表这个用户没有密码,不能登录。

  • 最后一次修改时间

    此字段表示最后一次修改密码的时间(Linux 计算日期的时间是以 1970 年 1 月 1 日作为 1 不断累加得到的时间,这里以天为单位)。

    那么,到底 18353 代表的是哪一天呢?可以使用如下命令进行换算:

    [root@localhost ~]# date -d "1970-01-01 18353 days"
    2020年 04月 01日 星期三 00:00:00 PDT
    
  • 最小修改时间间隔

    最小修改间隔时间,也就是说,该字段规定了从第 3 字段(最后一次修改密码的日期)起,多长时间之内不能修改密码。如果是 0,则密码可以随时修改;如果是 10,则代表密码修改后 10 天之内不能再次修改密码。

  • 密码有效期

    密码最长有效天数,这个字段可以指定距离第 3 字段(最后一次更改密码)多长时间内需要再次变更密码,否则该账户密码进行过期阶段。

    该字段的默认值为 99999,也就是 273 年,可认为是永久生效。如果改为 90,则表示密码被修改 90 天之后必须再次修改,否则该用户即将过期。管理服务器时,通过这个字段强制用户定期修改密码。

  • 密码需要变更前的警报天数

    与第 5 字段相比较,当账户密码有效期快到时,系统会发出警告信息给此账户,提醒用户 “再过 n 天你的密码就要过期了,请尽快重新设置你的密码!”。该字段的默认值是 7。

  • 密码过期后的宽限天数

    也称为“口令失效日”,简单理解就是,在密码过期后,用户如果还是没有修改密码,则在此字段规定的宽限天数内,用户还是可以登录系统的;如果过了宽限天数,系统将不再让此账户登陆,也不会提示账户过期,是完全禁用。

    比如说,此字段规定的宽限天数是 10,则代表密码过期 10 天后失效;如果是 0,则代表密码过期后立即失效;如果是 -1,则代表密码永远不会失效。

  • 账号失效时间

    同第 3 个字段一样,使用自 1970 年 1 月 1 日以来的总天数作为账户的失效时间。该字段表示,账号在此字段规定的时间之外,不论你的密码是否过期,都将无法使用!该字段通常被使用在具有收费服务的系统中。

  • 保留

3)、/etc/group

/ect/group文件是用户组配置文件,即用户组的所有信息都存放在此文件中。

通过cat /etc/group命令查看文件内容
在这里插入图片描述文件中每一行各代表一个用户组,各用户组中以 : 作为字段之间的分隔符,分为 4 个字段,每个字段对应的含义为:

组名:密码:GID:该用户组中的用户列表

5、用户管理

  • 创建用户

    使用 useradd 命令新建用户,此命令的基本格式如下:

    [root@localhost ~]#useradd [选项] 用户名
    

    常用选项:

    选项含义
    -u UID指定用户的 UID,注意 UID 的范围(不要小于 500)
    -d 主目录指定用户的主目录(主目录必须写绝对路径)。默认指定的用户家目录在 /home/下
    -c 用户说明指定/etc/passwd文件中各用户信息中第 5 个字段的描述性内容,可随意配置
    -g 组名指定用户的初始组。在创建用户时会默认建立初始组(组名和用户名相同)
    -G 组名指定用户的附加组
    -s shell指定用户的登录 Shell,默认是 /bin/bash;
    -e 曰期指定用户的失效曰期,格式为 “YYYY-MM-DD”。也就是 /etc/shadow 文件的第8个字段;

    在这里插入图片描述通常情况创建用户,可以不指定任何选项,直接使用useradd zhangsan,大部分情况下,使用默认值就可以满足我们的要求

  • 删除用户

    使用userdel 命令删除用户,此命令只有 root 用户才能使用

    基本格式如下:

    [root@localhost ~]# userdel -r 用户名			# -r 选项表示在删除用户的同时删除用户的家目录
    
  • 修改用户密码

    使用passwd命令为用户配置密码

    基本格式如下:

    [root@localhost ~]#passwd [选项] 用户名	# 省略"选项"和"用户名"时,修改当前系统已登录用户的密码
    

    常用选项:

    选项含义
    -S查看用户账户的状态(是否被锁定)
    -l暂时锁定用户(在 /etc/shadow 文件中指定用户的加密密码串前添加 “!”),使密码失效
    -u解锁用户,和 -l 选项相对应
    –stdin可以将通过管道符输出的数据作为用户的密码。主要在批量添加用户时使用
    -n 天数设置用户修改密码后,多长时间不能再修改密码,对应 /etc/shadow 文件中的第 4 个字段;
    -x 天数设置用户的密码有效期,对应 /etc/shadow 文件中密码的第 5 个字段
    -w 天数设置用户密码过期前的警告天数,对于 /etc/shadow 文件中密码的第 6 个字段
    -i 日期设置用户密码失效日期,对应 /etc/shadow 文件中密码的第 7 个字段

    在这里插入图片描述

    普通用户修改自己的密码时,密码必须符合复杂性要求,新密码太短、太简单,都会被系统检测出来并禁止用户使用。
    很多Linux 发行版为了系统安装,都使用了 PAM 模块进行密码的检验,设置密码太短、与用户名相同、是常见字符串等,都会被 PAM 模块检查出来,从而禁止用户使用此类密码。

    为了方便系统管理,passwd 命令提供了 --stdin 选项,用于批量给用户设置初始密码。

    [root@localhost ~]# echo "123"|passwd --stdin zhangsan
    

    在这里插入图片描述

    这样设定的密码会把密码明文保存在历史命令中,如果系统被攻破,别人可以在 /root/.bash_history 中找到设置密码的这个命令,存在安全隐患。
    因此,如果使用这种方式修改密码,那么应该记住两件事情:第一,手工清除历史命令;第二,强制这些新添加的用户在第一次登录时必须修改密码( “chage” 命令)。

  • 修改用户信息

    使用usermod命令可以修改用户的信息,此命令的基本格式:

    [root@localhost ~]#usermod [选项] 用户名
    

    常用选项:

    选项含义
    -c 用户说明修改用户的说明信息,即修改 /etc/passwd 文件中的第 5 个字段
    -d 主目录修改用户的主目录,即修改 /etc/passwd 文件中的第 6 个字段(主目录必须写绝对路径)
    -e 日期修改用户的失效日期,格式为 “YYYY-MM-DD”,
    -g 组名修改用户的初始组,即修改 /etc/passwd 文件目标用户信息的第 4 个字段(GID)
    -u UID修改用户的UID,即修改 /etc/passwd 文件目标用户信息的第 3 个字段(UID)
    -G 组名修改用户的附加组,其实就是把用户加入其他用户组,即修改 /etc/group 文件
    -l 用户名修改用户名称
    -L临时锁定用户(Lock)
    -U解锁用户(Unlock),和 -L 对应
    -s shell修改用户的登录 Shell,默认是 /bin/bash

6、组管理

  • 添加用户组

    使用groupadd命令添加用户,命令格式如下:

    [root@localhost ~]# groupadd [选项] 组名
    
  • 删除用户组

    使用groupdel删除用户组,命令格式如下:

    [root@localhost ~]#groupdel 组名
    

    如果有群组还是某用户的初始群组,则无法使用 groupdel 命令成功删除。

    在这里插入图片描述

  • 将用户添加进组或从组中删除

    将用户添加进组或从组中删除使用gpasswd 命令,其基本格式如下:

    [root@localhost ~]# gpasswd [选项] 组名
    

    常用选项:

    选项含义
    -a user将 user 用户加入到群组中
    -d user将 user 用户从群组中移除

    在这里插入图片描述- 查看用户所属的组

    使用groups 命令可以查询用户所属的组。格式如下:

    [root@localhost ~]# groups 用户名
    

参考文档:http://c.biancheng.net/view/839.html

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

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

相关文章

进攻即是最好的防御!19个练习黑客技术的在线网站

前言 进攻即是最好的防御,这句话同样适用于信息安全的世界。这里罗列了19个合法的来练习黑客技术的网站,不管你是一名开发人员、安全工程师、代码审计师、渗透测试人员,通过不断的练习才能让你成为一个优秀安全研究人员。以下网站希望能给各…

智能排班系统 【技术选型与工具版本】

技术架构图 前端工具及环境 名称版本介绍NodeJS16.13.2开源、跨平台的 JavaScript 运行时环境Npm8.1.2npm包管理工具可以快速引入别人开发好的工具包进行使用Webpack4.0.0打包工具Vue2.6.14Vue 的核心库只关注视图层,易于上手,便于与第三方库或既有项目…

每日学术速递5.17

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.HACK: Learning a Parametric Head and Neck Model for High-fidelity Animation 标题:HACK:学习用于高保真动画的参数化头颈模型 作者:Longwe…

FEC功能在40G和100G光模块中的应用和注意事项

FEC(Forward Error Correction,前向纠错)功能是一种在数字通信中用于纠正传输过程中产生的误码的技术。在100G和40G光模块中,FEC功能被广泛应用于光纤传输过程中,以提高传输的可靠性和抗干扰能力。 本期文章我们主要介…

Twitter架构决策

技术决策需要在不同限制条件下做出权衡,本文介绍了Twitter早期应对用户大规模增长所做出的技术架构决策。原文:Twitter’s Tough Architectural Decision[1] Jeremy BezangerUnsplash 研究大规模互联网应用可以学到很多东西,像Netflix这样的公…

强大而可靠的DiskQ:持久化队列的解决方案

强大而可靠的DiskQ:持久化队列的解决方案 简介: 在软件开发中,处理大量数据和任务调度是常见的挑战。为了有效地处理这些问题,开发人员需要一种可靠的队列解决方案,以确保数据和任务在处理过程中不会丢失。DiskQ作为一种持久化队…

浏览器如果免费安装ChatGPT插件?

一、什么是ChatGPT? ​ ChatGPT是一种基于自然语言处理的机器学习算法,通过大规模的训练数据和优化算法来生成自然语言响应。目前,它在聊天机器人,自动回答问题,自动文本生成等方面有广泛的应用。ChatGPT是由OpenAI公…

[组合数学] 排列组合

文章目录 加法法则 --每一类都能够独立的完成任务乘法法则 --集合论 任务分步骤1000和9999之间有多个具有不同数位的奇数n 7 3 1 1 2 1 3 4 ^311^213^4 3112134 求除尽n的整数个数0到10000之间有多少个整数恰好是有一位数字是5两位数字可以组成多少两位互异且非零的两位数 减…

suricata中command的实现分析和自定义命令方法

suricata提供了suricatasc这个工具用来与其进行通信,比如修改规则文件后,通知suricata重新加载规则,就可以通过suricatasc下发重新加载规则命令,suricatasc和suricata通过unix socket进行通信,unix socke好处就是不占用…

libevent高并发网络编程 - 06_基于libevent的C++线程池实现

文章目录 1 功能简介线程池的初始化线程池执行流程 2 线程池类的设计线程类XThreadXThread.hXThread.cpp 线程池类XThreadPoolXThreadPool.hXThreadPool.cpp 任务基类taskXTask.h 3 自定义任务的例子自定义任务类ServerCMDServerCMD.hServerCMD.cpp 测试程序运行效果 1 功能简介…

华为机试(JAVA)真题Od【A卷+B卷】2023

目录 华为OD机试是什么?华为OD面试流程?华为OD机试通过率高吗?华为OD薪资待遇?华为OD晋升空间? 大家好,我是哪吒。 本专栏包含了最新最全的华为OD机试真题,有详细的分析和Java代码解答。已帮助…

【信息安全案例】——信息内容安全(学习笔记)

📖 前言:在数字化时代,信息内容安全问题越来越引起人们的关注。信息内容安全主要包括对数据的机密性、完整性和可用性的保护,以及对用户隐私的保护等方面。针对信息内容安全的威胁,采取科学有效的安全措施和技术手段至…

每日学术速递5.20

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Improved baselines for vision-language pre-training 标题:改进视觉语言预训练的基线 作者:Enrico Fini, Pietro Astolfi, Adriana Romero-Soriano, Jak…

10-《简单算法》

10-《简单算法》 一、时间复杂度二、空间复杂度三、排序算法1.比较排序1.1冒泡排序:1.2选择排序:1.3插入排序:1.4归并排序(非常重要)1.5快速排序(非常重要)1.6堆排序1.7排序算法稳定性 2.线性排序2.1桶排序2.2计数排序…

数据结构初阶(3)(链表:链表的基本概念、链表的类型、单向不带头非循环链表的实现、链表的优缺点 )

接上次博客:和数组处理有关的一些OJ题;ArrayList 实现简单的洗牌算法(JAVA)(ArrayList)_di-Dora的博客-CSDN博客 目录 链表的基本概念 链表的类型 单向、不带头、非循环链表的实现 遍历链表并打印节点值: 在链…

uni-app小程序uni.navigateBack返回上一个页面并传递参数.返回上个页面并刷新

返回上一个打开的页面并传递一个参数。有种办法就是使用 假如从B页面返回A页面: var pages getCurrentPages(); var prevPage pages[pages.length - 2]; //上一个页面 prevPage.setData({ mdata:1 })经过测试,在uni.app中使用B页面使用setData设置A页…

【Spring篇】AOP案例

🍓系列专栏:Spring系列专栏 🍉个人主页:个人主页 一、案例:业务层接口执行效率 1.需求分析 这个需求也比较简单,前面我们在介绍 AOP 的时候已经演示过 : 需求 : 任意业务层接口执行均可显示其执行效率(执行时长&…

如何选对适合你的FPGA?快速掌握选型技巧!

FPGA厂家和芯片型号众多,在开发过程中,特别是新产品新项目时,都会面临FPGA选型的问题。 如何选择出适合的FPGA型号非常关键,需要评估需求、功能、成本、存储器、高速收发器等各种因素,选出性能与成本平衡的FPGA芯片。…

从零玩转设计模式之外观模式-waiguanmos

title: 从零玩转设计模式之外观模式 date: 2022-12-12 15:49:05.322 updated: 2022-12-23 15:34:40.394 url: https://www.yby6.com/archives/waiguanmos categories: - 设计模式 tags: - 设计模式 什么是外观模式 外观模式是一种软件设计模式,它提供了一种将多个…

进阶必看:高速PCB Layout设计的技术指南

当今电子行业中,高速PCB电路越来越广泛,已成为当代PCB工程师的重要技能,而在高速PCB电路中,高速PCB Layout设计是一项高难度高技术的工作,其设计质量直接关系到电路的性能。所以做好PCB Layout设计是非常非常重要的。 …