Linux账号与用户组
目录
用户标识符:UID与GID
用户账号
/etc/passwd文件结构
1、账号名称
2、密码
3、UID
4、GID
5、用户信息说明栏
6、家目录
7、shell
/etc/shadow文件结构
1、账号名称
2、密码
3、最近修改密码的日期
4、密码不可被修改的天数(与第三字段相比)
5、密码需要重新修改的天数(与第三字段相比)
6、密码需要修改期限前的警告天数(与第五字段相比)
7、密码过期后的账号宽限时间(密码失效日)(与第五字段相比)
8、账号失效日期
9、保留
关于用户组:有效与初始用户组,groups,newgr
/etc/group文件结构
1、组名
2、用户组密码
3、GID
4、此用户组支持的账号名称
有效用户组(effective group)与初始用户组(initial group)
groups:有效与支持用户组的观察
newgrp:有效用户组的切换
/etc/gshadow
用户标识符:UID与GID
其实Linux主机并不会直接认识你的账号名称,它仅认识ID(ID就是一组号码)。由于计算机智认知0和1,所以主机对于数字比较有概念,而账号只是为了让人们容易记忆而已,我们的ID与账号的对应就在/etc/passwd中
我们知道,一个文件的属性中有拥有人与拥有人组这两个属性,所以每个登录的用户至少会获取两个ID,一个是用户ID(UID),一个是用户组ID(GID)
所以文件判断拥有者与用户组就是依据这两个ID来进行判断的,当我们要显示文件属性时,系统会根据/etc/passwd与/etc/group的内容来找到UID与GID对应的账号与组名再显示出来
下述例子仅说明UID与账号的对应性
系统中redhat的UID与GID都是1000,它们的关系就是redhat对应的UID为1000
![]()
此时我们将/etc/passwd中将用户的UID改为2000
你会发现该文件的拥有者就变成了数字
在正常运行的Linux主机环境下,上面的操作不可以随意进行,因为系统上面已经有很多的数据被建立存在了,随意修改系统上某些账号的UID会导致某些程序无法运行,甚至导致系统无法顺利运行——因为权限的问题。上述例子中,我们如果没有将2000改回来会导致redhat下次登录时将没有办法进入自己的家目录,因为它的UID已经改为2000,但是它的家目录却记录的是1000,由于权限为700,因此它将无法进入原本的家目录
用户账号
你输入账号密码后,系统做了哪些处理?
1、先查找/etc/passwd里面是否有你输入的账号,没有则退出,有则将该账号对应的UID与GID(/etc/group)读出来,另外该账号的家目录与shell设置也一并读出
2、再核对密码表,这是Linux会进入/etc/shadow中找出对应账号与UID,然后核对一下你输入的密码是否相符
3、上面一切OK则进入shell管理的阶段
跟用户账号有关的有两个非常重要的文件,一个是管理用户UID与GID重要参数的/etc/passwd,另一个则是专门管理密码相关数据的/etc/shadow
很多程序的运行都与权限有关,而权限与UID和GID有关。因此各程序都需要读取/etc/passwd来了解不同账号的权限,因此我们/etc/passwd的权限需设置为-rw-r--r--这样
/etc/passwd文件结构
文件内容构造:每一行代表一个账号,有几行则代表几个账号在你的系统中,但是里面很多账号本来就是系统正常运行所需要的,我们简称它为系统账号,例如bin、daemon、adm等,这些账号不可随意删除
查看:vim /etc/passwd
root为系统管理员,我们可以看出每一行中都有:来相互分隔开,因此一行中共有七个东西
1、账号名称
就是账号,提供给对数字不敏感的我们用来登录系统的,需要用来对应UID
2、密码
早期UNIX系统的密码就放于此字段上,后来由于这个文件的特性是所有程序都能读取导致容易造成密码数据被窃取,所以就将这个字段的密码数据改放到/etc/shadow中去了,因此我们在这里只能看到一个【x】
3、UID
用户标识符,通常Linux对于UID有几个限制,我们可以了解一下
4、GID
这个与/etc/group有关,其实/etc/group的概念与/etc/shadow差不多,只是它是用来规范组名与GID的对应而已
5、用户信息说明栏
用来解释这个账号的意义而已,如果你使用finger的功能时,这个字段可以提供很多信息(可以了解一下chfn命令)
6、家目录
这就是用户的家目录,我们可以看到每个账号的家目录位置,所以我们使用各个用户登录时,会立刻跑到每个用户的家目录里面。所以当我们想要把家目录进行移动时,就可以在这个字段进行修改,默认的用户家目录在/home/yourIDname
7、shell
当用户登录后会获取一个shell来与系统的内核沟通以进行用户的操作任务,那为何默认shell会使用bash呢?就是在这个字段指定的,这里比较需要注意的是,有一个shell可以使账号在登录时无法获取shell环境,那就是/sbin/nologin这个东西。这也可以用来制作纯pop邮件账号的数据
/etc/shadow文件结构
基本上shadow同样以:来作为分隔符,所以每一行共有九个字段,这九个字段的用途是这样的
1、账号名称
密码也需要与账号对应,所以第一栏为账号且必须与/etc/passwd相同才行
2、密码
这个字段内的数据才是密码,而且是经过编码的密码,这些密码很难破解,但不代表不会,所以它的权限为-rw-------或----------,即只有root才可以读写,所以我们得注意,不要随意修改这个权限
由于固定的摘要算法产生的密码是特定的,因此当修改这个字段后,该密码就会失效(算不出来)。很多软件通过这个功能,在此字段前加上!或*修改密码字段,就会让密码暂时失效
3、最近修改密码的日期
记录了密码修改那一天的日期,我们可以看到bin那栏中的日期为18849呢?这是因为计算Linux是以1970年1月1日作为1而累加的日期,1971年1月1日就是366
4、密码不可被修改的天数(与第三字段相比)
记录了账号的密码在最近一次修改后需要经过几天才能再次修改,如果是0则表示可以随时修改
5、密码需要重新修改的天数(与第三字段相比)
经常修改密码是个好习惯,为了强制修改密码,这个字段可以指定最近一次更改密码后需要在多少天数内再次修改才行。你必须在这个天数内重新设置你的密码,否则这个密码将会变为过期特性,如果是99999(计算为273年)的话,那就表示密码的修改没有强制性
6、密码需要修改期限前的警告天数(与第五字段相比)
当账号密码有效期限快要到的时候(第五字段),系统会根据这个字段的设置,发出警告信息给这个账号,提醒它再过n天你的密码就要过期
7、密码过期后的账号宽限时间(密码失效日)(与第五字段相比)
密码有效期为更新日期+重新修改日期,过了该期限后用户依旧没有更新密码,那该密码就过期了,虽然密码过期了,但是该账号还是可以用来执行其他任务,包括重新登录系统获取bash。不过如果密码过期了,那当你登录系统时,系统会强制你必须重新设置你的密码才能继续登录使用,这就是密码过期特性
8、账号失效日期
这个日期与第三字段相同,都是采用1970年以来的天数的总天数,这个字段表示这个账号在此字段规定的日期之后无法再使用,这个字段通常都是在收费服务系统中
9、保留
最后一个字段为保留,看以后有没有新功能加入
关于用户组:有效与初始用户组,groups,newgr
/etc/group文件结构
该文件也是以:来作为分隔符,共分为四栏
1、组名
用来供人使用,基本上与第三字段的GID对应
2、用户组密码
通常不需要设置,这个设置一般是给用户组管理员用的,目前很少有机会设置用户组管理员。同样密码以及移动到了/etc/shadow中,所以我们只能看到【x】
3、GID
用户组ID,我们/etc/passwd第四个字段使用的GID对应的用户组名,就是由这里对应出来的
4、此用户组支持的账号名称
一个账号可以加入多个用户组中,如果某个账号想要加入此用户组时,将该账户填入这个字段即可(账号之间用逗号隔开,不要有空格),如果一个账号的初始用户组为此用户组,则此账号不写入此字段,例如root的初始用户组为root用户组并且root用户组中只有root用户,所以此字段没有数据
有效用户组(effective group)与初始用户组(initial group)
每个用户在它的/etc/passwd中都有一个GID,这个GID就是所谓的初始用户组,也就是说,用户一登录系统就会立刻拥有这个用户组的相关权限
我么给redhat用户新增加一个次要用户组
此时我们redhat账号同时支持redhat与users这两个用户组,但当我创建一个新目录或文件时,新文件的用户组为哪个?所以这时候就需要理解有效用户组了
groups:有效与支持用户组的观察
我们以redhat用户身份登录后,就可以用groups命令来查看我们所有支持的用户组了
第一个输出的用户组即为有效用户组,所以我此时去建立一个新文件的话,拥有者与用户组都为redhat
newgrp:有效用户组的切换
我们可以使用newgrp来修改有效用户组,但是newgrp是有限制的,即切换的用户组必须是已有支持的用户组
需要注意的是,记得退出newgrp的环境,因为这个命令是以一个shell来提供这个功能,就是说redhat目前是以另一个shell登录的,并且这个shell中redhat的有效用户组为users,虽然用户的环境设置不会有影响,但是用户的用户组权限将会重新计算,所以我们需要使用完newgrp后需要退出到原来的shell环境(有效用户组会改回redhat)
加入用户组有两种方式:一种是系统管理员利用usermod帮你加入;另一种是用户组管理员以gpasswd帮你加入他所管理的用户组中
/etc/gshadow
四个字段的意义为:
- 组名
- 密码栏,同样的,开头为!表示无合法密码,所以无用户组管理员
- 用户组管理员的账号
- 有加入该用户组支持的所属账号(与/etc/group内容相同)
以系统管理员来说,gshadow最大的功能就是建立用户组管理员,该用户组管理员可以将其他账号加入到自己管理的用户组中来减轻root用户的任务(这个功能已经很少使用了)
相关文章:

Linux账号与用户组
目录 用户标识符:UID与GID 用户账号 /etc/passwd文件结构 1、账号名称 2、密码 3、UID 4、GID 5、用户信息说明栏 6、家目录 7、shell /etc/shadow文件结构 1、账号名称 2、密码 3、最近修改密码的日期 4、密码不可被修改的天数(与第三字…...

有趣的Hack-A-Sat黑掉卫星挑战赛——定位卫星Jackson
国家太空安全是国家安全在空间领域的表现。随着太空技术在政治、经济、军事、文化等各个领域的应用不断增加,太空已经成为国家赖以生存与发展的命脉之一,凝聚着巨大的国家利益,太空安全的重要性日益凸显[1]。而在信息化时代,太空安…...

JAVA集合专题3 —— vector + LinkedList + Set
目录vector的特点LinkedList底层结构模拟双向链表比较ArrayList和LinkedListSet接口基本介绍Set接口的遍历方式Set接口实现类对象的特点Set接口实现类HashSet模拟HashSet/HashMap的底层结构vector的特点 Vector底层是一个对象数组Vector是线程同步的,即线程安全的&…...

Scout:一款功能强大的轻量级URL模糊测试与爬取工具
关于Scout Scout是一款功能强大的轻量级URL模糊测试与爬取工具,可以帮助广大研究人员进行URL模糊测试,并爬取目标Web服务器中难以扫描发现的VHSOT、文件和目录等资源。 项目中包含了一个完整的字典文件,并尽可能地提供了更多的便携性&#…...

leaflet 解决marker呈现灰色边框的问题
第052个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet示例中处理marker外面有灰色边框的问题,请看未处理会后的图片。 处理后的结果非常满意,不再显示灰色边框。处理方法参考源代码。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果; 注意…...
MySQL JSON类型字段的查找与更新
MySQL 提供了丰富的函数用于 JSON 类型字段的查找与更新,详见官方文档。 创建一个表 t1,basic_info 字段为JSON类型: CREATE TABLE t1 (id int(11) NOT NULL AUTO_INCREMENT,basic_info json DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CH…...

element Ui树状图控件 spring boot Vue 实现角色授权功能
目录 前言: 二. element ui 2.1官网提供的核心代码 三.表结构 编辑 四.后端 4.1功能分析 4.2实体类 4.3 查询全部权限显示的结果 4.2修改角色权限的后台方法 五.vue 5.0代码总览 5.1树形图 5.2所需要的绑定数据 5.3所需方法 前言: 先上图…...

已解决sc delete MongoDB卸载MongoDB拒绝访问。
已解决sc delete MongoDB卸载MongoDB拒绝访问。 文章目录报错问题报错翻译报错原因解决方法联系博主免费帮忙解决报错报错问题 粉丝群里面的一个小伙伴遇到问题跑来私信我,想卸载MongoDB数据库,但是发生了报错(当时他心里瞬间凉了一大截&…...

python的opencv操作记录11——阈值分割
文章目录传统图像处理分割阈值分割一个应用场景opencv库中的阈值分割固定阈值THRESH_OTSU 大津法阈值自适应阈值传统图像处理分割 现在提到图像分割,很多人会直接想到当前火爆的深度学习的各种分割网络,比如实例分割,语义分割等。其实在传统…...

Python-项目实战--飞机大战-英雄登场(7)
目标设计英雄和子弹类使用pygame.key.get_pressed()移动英雄发射子弹1.设计英雄和子弹类1.1英雄需求游戏启动后,英雄出现在屏幕的水平中间位置,距离屏幕底部120像素英雄每隔0.5秒发射一次子弹,每次连发三枚子弹英雄默认不会移动,需…...

寒假安全作业nginx-host绕过实例复现
1.测试环境搭建 LNMP架构的话,肯定就是linux、nginx、mysql、php四大组件。在后面的复现中我们还会用到https的一部分知识,故这里的nginx就需要使用虚拟主机并且配置https证书,且具有php解析功能。 1.1 基础nginx配置 #1.创建web目录 mkdir …...

RocketMQ-消息消费模式 顺序消费
RocketMQ-消息消费模式 顺序消费RocketMQ-消息消费模式集群模式集群模式的演示(本身就默认)Rocketmq存储队列广播模式顺序消费如何改实现顺序消费RocketMQ-消息消费模式 集群模式 在消费模式为集群的情况下,如果机器是集群的,消息只会给集群中的其中一台机器消费到 集群模…...

一、Java并发编程之线程、synchronized
黑马课程 文章目录1. Java线程1.1 创建和运行线程方法一:Thread方法二:Runnable(推荐)lambda精简Thread和runnable原理方法三:FutureTask配合Thread1.2 查看进程和线程的方法1.3 线程运行原理栈与栈帧线程上下文切换1.…...

12.hadoop系列之MapReduce分区实践
本文我们学习MapReduce默认分区以及自定义分区实践 当我们要求将统计结果按照条件输出到不同文件(分区),比如按照统计结果将手机归属地不同省份输出到不同文件中(分区) 1.默认Partitioner分区 public class HashPartitioner<K, V> extends Partitioner<…...

有了独自开,一个人就是一个团队
文章目录 简单介绍优点 优秀案例平台福利总结 简单介绍 独自开是一个基于商品与服务交易全流程的PaaS开发平台。对于开发者,独自开可以协助开发者一个人独自开发一套系统。 优点 独自开有独创的分层标准化平台架构,可以满足系统的任何个性化需求。 …...

web期末复习 2023.02.11
文章目录Web 的概念Web 组成用户通过浏览器请求资源的过程:HTML 超文本标记语言CSS插入样式表的方法有三种:对象,类,实例一个完整的 JavaScript 实现是由以下 3 个不同部分组成的:JavaScript 用法什么是 Java Server Pages?JSP 注释JSP 的 J…...
第44章 用户密码实体及其约束规则的定义实现
1 说明: 由当前程序需要兼容实现多种用户密码的加密操作,所以必须把“CustomerPassword”定义为实体类,该类用于用于把加密方式、密钥及其加密后的密码持久化到“CustomerPassword”表中,以便用为用户登录操作提供验证支撑。 如果…...

聊聊并发与锁
持续坚持原创输出,点击蓝字关注我吧1.并发与并行并发可以充分地利用 CPU 资源,一般都会使用多线程实现。多线程的作用是提高任务的平均执行速度,但是会导致程序可理解性变差,编程难度加大。关于对并发与并行的概念,大家…...

开源项目 —— 原生JS实现斗地主游戏 ——代码极少、功能都有、直接粘贴即用
目录 效果如下 目录结构 GameEntity.js GrawGame.js konva.min.js PlayGame.js veriable.js index.html 结语: 前期回顾 卡通形象人物2 写代码-睡觉 丝滑如德芙_0.活在风浪里的博客-CSDN博客本文实现了包含形象的卡通小人吃、睡、电脑工作的网页动画https://…...
Linux第四讲
目录 四、shell脚本 4.1 shell和shell脚本 4.2 脚本语言分类 4.2.1 编译型语言 4.2.2 解释型语言 4.2.3 脚本语言 4.3 shell常见种类 4.3.1 shell分类介绍 4.3.2 查看bash版本 4.3.3 sh和bash的关系 4.4 脚本书写规范 4.4.1 选择解释器 4.4.2 开发规范 4.5 shell…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...

Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...

Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...