【Linux】Linux 之用户管理
Linux 之用户管理
- 1.Linux 下的用户
- 2.配置文件
- 3.用户管理
- 3.1 useradd
- 3.1.1 创建用户并指定用户 ID
- 3.1.2 指定用户的主目录
- 3.1.3 指定用户的主组
- 3.2 adduser
- 3.3 userdel
- 3.4 密码文件
- 3.4.1 字段含义解释
- 3.4.2 给用户添加密码
- 3.5 其他与用户相关的命令
- 4.修改用户的信息
- 4.1 usermod
- 4.2 举例
- 4.2.1 修改 UID
- 4.2.2 修改 shell
- 4.2.3 更改用户主目录
- 5.关于用户管理常见的面试题
- 5.1 查找当前系统下能够登陆系统的用户
- 5.2 统计当前系统下能够登陆系统的用户个数
- 5.3 增加一个新用户 admin,权限是 root
1.Linux 下的用户
Linux 是一个多用户的系统,我们可以多个用户同时登陆 Linux,在 Linux 中用户有三种角色:
- 超级用户:
root拥有对系统的最高的管理权限 ID=0 - 普通用户:(普通用户又包含系统用户和本地用户)
- 系统用户 UID: 1 − 999 1-999 1−999(Centos7 版本)、 1 − 499 1-499 1−499(Centos6 版本)
- 本地用户 UID: 1000 + 1000+ 1000+
- UID: 即每个用户的身份标示,类似于每个人的身份证号码。
- 虚拟用户: 虚拟用户是伪用户,在 Linux 系统中不是真实存在的(非本地用户,即使通过抓包工具得到了用户名及密码,也不能用于登录 Linux 系统),一般不会用来登录系统,它主要是用于维持某个服务的正常运行,如:FTP。
2.配置文件
每个用户有三个信息可以证明自己: 一个是 配置文件,一个是 用户组文件,一个是 用户对应的密码信息。
- 用户配置文件
/etc/passwd:记录了每个用户的基本属性,并且对所有用户可读,每一行记录一个用户,每行记录用冒号分割。 - 用户组文件
/etc/group:用户组的所有信息存放地。 - 用户对应密码文件
/etc/shadow:用户密码单独分离出来放在了shadow下,该文件只有root用户拥有读的权限。
3.用户管理
3.1 useradd
使用方法:
useradd -d -u [UID] -g [初始组] -s [/bin/bash] 用户
参数如下:
-c comment 给新用户添加备注
-d home_dir 为主目录指定一个名字(如果不想用登录名作为主目录名的话)
-e expire_date 用 YYYYY-MM-DD 格式指定一个账户过期的日期
-f inactive_days 指定这个帐户密码过期后多少天这个账户被禁用;0 表示密码一过期就立即禁用,-1 表示禁用这个功能
-g initial_group 指定用户登录组的 GID 或组名
-G group ... 指定用户除登录组之外所属的一个或多个附加组
-k 必须和 -m 一起使用,将 /etc/skel 目录的内容复制到用户的 HOME 目录
-m 创建用户的 HOME 目录
-M 不创建用户的 HOME 目录(当默认设置里指定创建时,才用到)
-n 创建一个同用户登录名同名的新组
-r 创建系统账户
-p passwd 为用户账户指定默认密码
-s shell 指定默认登录 shell ,有时候禁止登录使用 /sbin/nologin
-u uid 为账户指定一个唯一的 UID
useradd 命令背后发生了什么?
- 创建一个唯一的
UID - 添加一个用户名相同的用户组和一个唯一的
GID,并将用户设置为该组 - 在
/home目录下创建一个与用户同名的目录 - 设置 shell 为
/bin/bash - 默认情况下是不会设置用户密码的,需要使用
passwd命令为新用户设置密码
使用举例:
添加一个名为 gaosh 的用户,并使用 bash 作为登陆的 shell。
[root@zmgaosh ~]# useradd gaosh
[root@zmgaosh ~]# tail -1 /etc/passwd
gaosh:x:1000:1000::/home/gaosh:/bin/bash

| 字段 | 含义 |
|---|---|
gaosh | 用户名 |
x | 密码占位符 |
1001 | 用户的 UID,它都是用数字来表示的 |
1001 | 用户所属组的 GID,它都是用数字来表示的 |
| 用户描述信息 | 对用户的功能或其它来进行一个简要的描述 |
/home/goash | 用户主目录(shell 提示符中 ~ 代表的那个) |
/bin/bash | 用户登录系统后使用的 shell,默认是 /bin/bash |
3.1.1 创建用户并指定用户 ID
[root@zmgaosh ~]# useradd -u 1111 xinsz08 # 创建用户指定 UID 为 1111[root@zmgaosh ~]# id xinsz08 # 查看用户所属组,及 UID 和组 ID 信息
uid=1111(xinsz08) gid=1111(xinsz08) 组=1111(xinsz08)[root@zmgaosh ~]# tail -1 /etc/passwd # 查看 /etc/passwd 新建用户
xinsz08:x:1111:1111::/home/xinsz08:/bin/bash[root@zmgaosh ~]# ls /home/xinsz08/ -a # 查看家目录默认模板
. .. .bash_logout .bash_profile .bashrc
3.1.2 指定用户的主目录
[root@zmgaosh ~]# useradd -d /opt/xinsz xinsz[root@zmgaosh ~]# ls -a /opt/xinsz/ # 可以看到家目录跑 /opt/xinsz 下了
. .. .bash_logout .bash_profile .bashrc[root@zmgaosh ~]# tail -1 /etc/passwd
xinsz:x:1112:1112::/opt/xinsz:/bin/bash
3.1.3 指定用户的主组
就相当于一个财务加到前台组,让财务偶尔也干前台。
[root@zmgaosh ~]# useradd qiantai # 创建了一个前台[root@zmgaosh ~]# id qiantai
uid=1113(qiantai) gid=1113(qiantai) 组=1113(qiantai) [root@zmgaosh ~]# useradd -g qiantai caiwu # 把财务放在前台的组里[root@zmgaosh ~]# id caiwu
uid=1114(caiwu) gid=1113(qiantai) 组=1113(qiantai) # 可以看到财务属于前台组,万一前台请假,财务顶上干前台
3.2 adduser
adduser 是创建用户的另外一个命令,使用方法相同。
[root@zmgaosh ~]# which adduser
/usr/sbin/adduser[root@zmgaosh ~]# ll /usr/sbin/adduser
lrwxrwxrwx 1 root root 7 4月 27 22:17 /usr/sbin/adduser -> useradd
由此可见,adduser 是 useradd 的软连接。
3.3 userdel
-r:会连同家目录和/var/mail的目录一同删除userdel 用户名:皇帝下令斩立决userdel -r 用户名:皇帝下令斩立决并抄家灭族
[root@zmgaosh ~]# userdel -r xinsz08
3.4 密码文件
密码文件放在 /etc/shadow 下。
3.4.1 字段含义解释
[root@zmgaosh ~]# head -3 /etc/shadow
root:$6$SlVomD$EBjlGVUUOnCCk.lupiqnL58ESGeVJBNCvIc7IE6LNQ9J66OEhNSvlZQvk8EJkx6laSHDeDnuVN3NnJgqZxZid.:18430:0:99999:7:::
bin:*:17834:0:99999:7:::
daemon:*:17834:0:99999:7:::
同 /etc/passwd 文件一样,文件中每行代表一个用户,同样使用 : 作为分隔符,不同之处在于,每行用户信息被划分为 9 9 9 个字段。每个字段的含义如下:
1-用户名 : 2-加密密码 : 3-最后一次修改时间 : 4-最小修改时间间隔 : 5-密码有效期 : 6-密码需要变更前的警告天数 : 7-密码过期后的宽限时间 : 8-账号失效时间 : 9-保留字段
- 账户名称。
- 加密后的密码,如果这一栏的第一个字符为
!或者*的话,说明这是一个不能登录的账户,从上面可以看出,ubuntu默认的就不启用root账户。 - 最近改动密码的日期(这个是从 1970 1970 1970 年 1 1 1 月 1 1 1 日算起的总的天数)。
- 密码不可被变更的天数:设置了这个值,则表示从变更密码的日期算起,多少天内无法再次修改密码,如果是 0 0 0 的话,则没有限制。
- 密码需要重新变更的天数:如果为 99999 99999 99999 则没有限制。
- 密码过期预警天数。
- 密码过期的宽恕时间:如果在 5 中设置的日期过后,用户仍然没有修改密码,则该用户还可以继续使用的天数。
- 账号失效日期,过了这个日期账号就无法使用。
- 保留的字段。
3.4.2 给用户添加密码
方法1:
[root@zmgaosh ~]# useradd gaosh1
[root@zmgaosh ~]# passwd gaosh1
更改用户 gaosh1 的密码
新的密码:
无效的密码: 密码未通过字典检查 - 它没有包含足够的不同字符
重新输入新的密码:
passwd:所有的身份验证令牌已经成功更新
[root@zmgaosh ~]#
方法2:使用 echo 命令,可以实现很方便、快捷地修改用户密码。
# echo password | passwd --stdin username
[root@zmgaosh ~]# echo 123456 | passwd --stdin gaosh2
更改用户 gaosh2 的密码
passwd:所有的身份验证令牌已经成功更新。
[root@zmgaosh ~]#
这里有个问题,如果两个不同的用户,他们的密码一样,在 /etc/shadow 中加密的 hash 值一样吗?答案是不一样,要不然太容易破解了。
3.5 其他与用户相关的命令
| 命令 | 作用 |
|---|---|
| id | 用户和组的信息 |
| whoami | 查看当前有效用户名 |
| who | 显示目前登入系统的用户信息 |
| w | 显示已经登陆系统的用户列表 |
| users | 用于显示当前登录系统的所有用户的用户列表 |
4.修改用户的信息
4.1 usermod
usermod [参数] 用户名
常用参数:
-u UID
-d 宿主目录
-g 起始组
-G 附加组
-s 登录 shell
-L 锁定
4.2 举例
4.2.1 修改 UID
[root@zmgaosh ~]# id xinsz
uid=1112(xinsz) gid=1112(xinsz) 组=1112(xinsz)[root@zmgaosh ~]# usermod -u 2222 xinsz
[root@zmgaosh ~]# id xinsz
uid=2222(xinsz) gid=1112(xinsz) 组=1112(xinsz)[root@zmgaosh ~]#
4.2.2 修改 shell
[root@zmgaosh ~]# grep xinsz /etc/passwd
xinsz:x:2222:1112::/opt/xinsz:/bin/bash[root@zmgaosh ~]# usermod -s /sbin/nologin xinsz
[root@zmgaosh ~]# grep xinsz /etc/passwd
xinsz:x:2222:1112::/opt/xinsz:/sbin/nologin # 可以看到变成了 nologin[root@zmgaosh ~]#
4.2.3 更改用户主目录
[root@zmgaosh ~]# usermod -m -d /opt/xinsz1 xinsz
[root@zmgaosh ~]# grep xinsz /etc/passwd
xinsz:x:2222:1112::/opt/xinsz1:/sbin/nologin # 可以看到家目录变成了 /opt/xinsz1
5.关于用户管理常见的面试题
5.1 查找当前系统下能够登陆系统的用户
[root@zmgaosh ~]# grep /bin/bash /etc/passwd
root:x:0:0:root:/root:/bin/bash
gaosh:x:1000:1000::/home/gaosh:/bin/bash
qiantai:x:1113:1113::/home/qiantai:/bin/bash
caiwu:x:1114:1113::/home/caiwu:/bin/bash
sanwu:x:1115:1115::/home/sanwu:/bin/bash
sanwu1:x:1116:1116::/home/sanwu1:/bin/bash
gaosh1:x:1117:1117::/home/gaosh1:/bin/bash
gaosh2:x:1118:1118::/home/gaosh2:/bin/bash[root@zmgaosh ~]#
5.2 统计当前系统下能够登陆系统的用户个数
[root@zmgaosh ~]# grep /bin/bash /etc/passwd | wc -l
其实是在统计 /etc/passwd 文件中有多少包含 bash 的行。
5.3 增加一个新用户 admin,权限是 root
[root@zmgaosh ~]# useradd -u 0 -o admin
[root@zmgaosh ~]# grep admin /etc/passwd
admin:x:0:1119::/home/admin:/bin/bash
当你使用 -u 选项指定 UID 时,-o 选项允许你创建具有非唯一 ID 的用户,例如:
# useradd -o huey -u 501
# useradd -o dewey -u 501
# useradd -o louie -u 501
简而言之,这允许设置多个用户具有相同的权限和特权,但具有不同的主目录和密码。
相关文章:
【Linux】Linux 之用户管理
Linux 之用户管理 1.Linux 下的用户2.配置文件3.用户管理3.1 useradd3.1.1 创建用户并指定用户 ID3.1.2 指定用户的主目录3.1.3 指定用户的主组 3.2 adduser3.3 userdel3.4 密码文件3.4.1 字段含义解释3.4.2 给用户添加密码 3.5 其他与用户相关的命令 4.修改用户的信息4.1 user…...
NLP:Attention和self-attention的区别
核心思想是根据不同的上下文为不同的信息分配不同的注意力权重 效果: Attention:它允许模型在解码时聚焦于输入的特定部分,从而更好地捕获上下文信息。Self-attention:它帮助模型捕获输入序列内部的关系,无论这些关系…...
Gap Year Plan
Gap Year Plan gap year 几个大方向 健康 60 KG10 新朋友 钱 5W RMB基本常识、社会机制补齐开网店 英语 TOELF日常交流 & 面试 口语Science Research Writing 2nd 课程 科研常识CMU 15-445MIT 6.824CMU 15-721Full Stack OpenDDIA 实习 GSOC 2024 PostgreSQL / …...
厌烦了iPhone默认的热点名称?如何更改iPhone上的热点名称
你对你默认的热点名称感到厌倦了吗?这篇文章是为你准备的。在这里,你可以了解如何轻松更改iPhone上的热点名称。 个人热点会将你的手机数据转换为Wi-Fi信号。手机上的个人热点使用户能够与其他用户共享其蜂窝数据连接。当你在WIFI网络之外时,…...
【数据库审计】2023年数据库审计厂家汇总
我们大家都知道数据库审计的重要意义,不仅可以满足等保合规,还能进行风险告警,保障数据安全。那你知道目前市面上数据库审计厂家有哪些吗?这里小编就给大家汇总一下。 2023年数据库审计厂家汇总 1、行云管家 2、安恒信息 3、…...
C#WPF StackPanel布局及Border边框应用实例
本文介绍C#WPF StackPanel布局及Border边框应用实例,通过演示掌握StackPanel布局及Border边框用法,并对对齐方式、边距、尺寸设置、Border的圆角使用作了演示。 具体概念本文不再赘述。 Xaml文件: <Windowx:Class="PropertyDemo.MainWindow"xmlns="htt…...
RabbitMQ-第四种交换机类型
接上文 RabbitMQ-主题模式 1 第四种交换机类型 header:它是根据头部信息来决定的,在我们发送的消息中是可以携带一些头部信息的,类似与HTTP,我们可以根据这些头部信息来决定路由到哪一个消息队列中。 修改配置类内容 Configuration public…...
Redis AOF重写原原理
重写aof之前 appendonly.aof.1.base.aof appendonly.aof.1.incr.aof appendonly.aof.manifest 重写aof 一次 appendonly.aof.2.base.aof 大小变化 appendonly.aof.2.incr.aof 大小o appendonly.aof.manifest 大小不变 AOF文件重写并不是对原文件进行重新整理,而是直…...
es6.x和es7.x如何创建索引?
一、es6.x {"settings": {"number_of_shards": "2","number_of_replicas": "2","max_result_window": 100000},"mappings": {"doc": {"dynamic": "strict","prope…...
《DevOps 精要:业务视角》- 读书笔记(三)
DevOps 精要:业务视角(三) 第3章 原则3.1 价值流3.2 部署流水线3.3 一切都应存储在版本控制系统中3.4 自动化配置管理3.5 完成的定义3.6 小结 第3章 原则 将原则从实践中分离出来,这是一种很有用的做法。当然了,这两个词分别有着…...
C语言——文件操作_学习笔记
一、引言——为什么使用文件 如果没有文件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运行程序,是看不到上次程序的数据的,如果要将数据进行持久化的…...
cap分布式理论
cap 理论 cap是实现分布式系统的思想。 由3个元素组成。 Consistency(一致性) 在任何对等 server 上读取的数据都是最新版,不会读取出旧数据。比如 zookeeper 集群,从任何一台节点读取出来的数据是一致的。 Availability&…...
asp.net core 如何统一json序列化格式
oldconfig.AllFields Newtonsoft.Json.JsonConvert.SerializeObject(sqlParameters.AllFields);在start.cs文件中 JsonConvert.DefaultSettings new Func<JsonSerializerSettings>(() >{JsonSerializerSettings jsonsetting new JsonSerializerSettings(){Formatt…...
DALL·E 3 ChatGPT-4的梦幻联动
核心内容:DALLE 3 & ChatGPT-4的梦幻联动 hello,我是小索奇,最近DALL结合ChatGPT4的话题逐渐上升了起来,今天就带大家探索一下~ DALLE的主要功能是根据文本描述来生成图片。你可以告诉它一个穿着皮草的西瓜,它就能…...
linux,write:xxx has messages disabled 与 Ubuntu多用户同时登录的问题 ubuntu 20.04
write:xxx has messages disabled 问题 被这问题折磨了好久,搜都搜不到,还是灵机一动想到的。 很多 帖子说,要使用 mesg y用了还是没有用,后面我登录了很多用户,发现只有root用户可以给别的用户使用write…...
ffmpeg批量转换ape/wav为mp3 (linux, mac适用)
在保存了ape文件的文件夹下建一个mp3子目录,打开终端并进入ape目录,然后执行脚本(直接粘贴到终端上面,回车键执行): for i in *.apedo ffmpeg -i "$i" -y -acodec libmp3lame -aq 0 "./mp3…...
自动生成JPA bean及repository生成简陋工具
因为工具不太灵活,手写了一个,没啥技术难度,纯堆代码量 import java.io.File; import java.io.FileOutputStream; import java.nio.charset.Charset; import java.sql.*; import java.util.*;/*** JPA dao自动生成工具*/ public class JpaGe…...
vue3+vite+uniapp 封装一个省市区组件
一、预览图 二、使用前的一些注意事项 只支持在 uniapp vue3 项目中使用支持微信小程序和h5 (app端没有测试过)ui库用的 uview-plus省市区数据用的是 vant-ui 提供的一个赖库 vant/area-data 三、组件代码 <template><u-popup :show"show" type"botto…...
OpenCV报错:AttributeError: module ‘cv2.cv2‘ has no attribute ‘SIFT_create‘
报错位置: sift cv2.SIFT_create()报错原因:opencv将SIFT等算法整合到xfeatures2d集合里面了。 改为: sift cv2.xfeatures2d.SIFT_create()...
通用监控视频web播放方案
业务场景 对接监控视频,实现海康大华等监控摄像头的实时画面在web端播放 方案一,使用 RTSP2webnode.jsffmpeg 说明:需要node环境,原理就是RTSP2web实时调用ffmpeg解码。使用单独html页面部署到服务器后,在项目中需要播…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...
