当前位置: 首页 > news >正文

【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 1999(Centos7 版本)、 1 − 499 1-499 1499(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

由此可见,adduseruseradd 的软连接。

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-保留字段

  1. 账户名称。
  2. 加密后的密码,如果这一栏的第一个字符为 ! 或者 * 的话,说明这是一个不能登录的账户,从上面可以看出,ubuntu 默认的就不启用 root 账户。
  3. 最近改动密码的日期(这个是从 1970 1970 1970 1 1 1 1 1 1 日算起的总的天数)。
  4. 密码不可被变更的天数:设置了这个值,则表示从变更密码的日期算起,多少天内无法再次修改密码,如果是 0 0 0 的话,则没有限制。
  5. 密码需要重新变更的天数:如果为 99999 99999 99999 则没有限制。
  6. 密码过期预警天数。
  7. 密码过期的宽恕时间:如果在 5 中设置的日期过后,用户仍然没有修改密码,则该用户还可以继续使用的天数。
  8. 账号失效日期,过了这个日期账号就无法使用。
  9. 保留的字段。

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网络之外时&#xff0c…...

【数据库审计】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:它是根据头部信息来决定的&#xff0c;在我们发送的消息中是可以携带一些头部信息的&#xff0c;类似与HTTP&#xff0c;我们可以根据这些头部信息来决定路由到哪一个消息队列中。 修改配置类内容 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文件重写并不是对原文件进行重新整理&#xff0c;而是直…...

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 精要:业务视角&#xff08;三&#xff09; 第3章 原则3.1 价值流3.2 部署流水线3.3 一切都应存储在版本控制系统中3.4 自动化配置管理3.5 完成的定义3.6 小结 第3章 原则 将原则从实践中分离出来&#xff0c;这是一种很有用的做法。当然了&#xff0c;这两个词分别有着…...

C语言——文件操作_学习笔记

一、引言——为什么使用文件 如果没有文件&#xff0c;我们写的程序的数据是存储在电脑的内存中&#xff0c;如果程序退出&#xff0c;内存回收&#xff0c;数据就丢失了&#xff0c;等再次运行程序&#xff0c;是看不到上次程序的数据的&#xff0c;如果要将数据进行持久化的…...

cap分布式理论

cap 理论 cap是实现分布式系统的思想。 由3个元素组成。 Consistency&#xff08;一致性&#xff09; 在任何对等 server 上读取的数据都是最新版&#xff0c;不会读取出旧数据。比如 zookeeper 集群&#xff0c;从任何一台节点读取出来的数据是一致的。 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的梦幻联动

核心内容&#xff1a;DALLE 3 & ChatGPT-4的梦幻联动 hello&#xff0c;我是小索奇&#xff0c;最近DALL结合ChatGPT4的话题逐渐上升了起来&#xff0c;今天就带大家探索一下~ DALLE的主要功能是根据文本描述来生成图片。你可以告诉它一个穿着皮草的西瓜&#xff0c;它就能…...

linux,write:xxx has messages disabled 与 Ubuntu多用户同时登录的问题 ubuntu 20.04

write&#xff1a;xxx has messages disabled 问题 被这问题折磨了好久&#xff0c;搜都搜不到&#xff0c;还是灵机一动想到的。 很多 帖子说&#xff0c;要使用 mesg y用了还是没有用&#xff0c;后面我登录了很多用户&#xff0c;发现只有root用户可以给别的用户使用write…...

ffmpeg批量转换ape/wav为mp3 (linux, mac适用)

在保存了ape文件的文件夹下建一个mp3子目录&#xff0c;打开终端并进入ape目录&#xff0c;然后执行脚本&#xff08;直接粘贴到终端上面&#xff0c;回车键执行&#xff09;&#xff1a; for i in *.apedo ffmpeg -i "$i" -y -acodec libmp3lame -aq 0 "./mp3…...

自动生成JPA bean及repository生成简陋工具

因为工具不太灵活&#xff0c;手写了一个&#xff0c;没啥技术难度&#xff0c;纯堆代码量 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‘

报错位置&#xff1a; sift cv2.SIFT_create()报错原因&#xff1a;opencv将SIFT等算法整合到xfeatures2d集合里面了。 改为&#xff1a; sift cv2.xfeatures2d.SIFT_create()...

通用监控视频web播放方案

业务场景 对接监控视频&#xff0c;实现海康大华等监控摄像头的实时画面在web端播放 方案一&#xff0c;使用 RTSP2webnode.jsffmpeg 说明&#xff1a;需要node环境&#xff0c;原理就是RTSP2web实时调用ffmpeg解码。使用单独html页面部署到服务器后&#xff0c;在项目中需要播…...

C++基础知识3

1、为什么构造函数不能是虚构造&#xff1f; 虚函数对应一个虚表vtale&#xff0c;这个表的地址是存储在对象的内存空间的。如果将构造函数设置为虚函数&#xff0c;就需要到虚表中调用&#xff0c;但这时候对象没有实例化&#xff0c;没有内存分配&#xff0c;虚表就不存在&am…...

【配置vscode编写python代码并输出到外部控制台】

配置vscode编写python代码并输出到外部控制台 1、扩展中添加python插件 2、打开一个文件夹&#xff0c;在里面新建一个.py文件&#xff0c;粘贴print(‘你好啊&#xff01;’)并运行 运行结果如下: 3、点击调试点击如下图 生成launch.json&#xff0c;将console后面改成exte…...

RK3588开发笔记-MIPI-CSI接口视频解码芯片XS9922B调试

目录 前言 一、RK3588 MIPI接口介绍 二、xs9922B视频解码芯片介绍 三、原理图连接...

DVWA -xss

什么是XSS 跨站点脚本(Cross Site Scripting,XSS)是指客户端代码注入攻击&#xff0c;攻击者可以在合法网站或Web应用程序中执行恶意脚本。当wb应用程序在其生成的输出中使用未经验证或未编码的用户输入时&#xff0c;就会发生XSS。 跨站脚本攻击&#xff0c;XSS(Cross Site S…...

C语言编程实现只有一个未知数的两个多项式合并的程序

背景&#xff1a; 直接看题目把&#xff01;就是C语言写两个多项式多项式合并 题目要求&#xff1a; 1. 题目&#xff1a; 编程实现只有一个未知数的两个多项式合并的程序。如&#xff1a; 3x^26x7 和 5x^2-2x9合并结果为8x^24x16。 2. 设计要求 &#xff08;1&#xff09…...

C# .net创建一个MVC框架工程

二、C# .net创建一个MVC框架工程 1.步骤 首先打开VS &#xff0c;然后点击创建新项目 在三个选项框中输入我们需要的项目条件 最后一步创建完毕 创建会在资源解决方案生成如图&#xff1a;...

Deep learning of free boundary and Stefan problems论文阅读复现

Deep learning of free boundary and Stefan problems论文阅读复现 摘要1. 一维一相Stefan问题1.1 Direct Stefan problem1.2 Inverse Type I1.3 Inverse Type II 2. 一维二相Stefan问题2.1 Direct Stefan problem2.2 Inverse Type I2.3 Inverse Type II 3. 二维一相Stefan问题…...

LeetCode 1277. 统计全为 1 的正方形子矩阵【动态规划】1613

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…...

测试部门来了个00后卷王之王,老油条感叹真干不过,但是...

都说00后躺平了&#xff0c;但是有一说一&#xff0c;该卷的还是卷。 这不&#xff0c;前段时间我们公司来了个00后&#xff0c;工作都没两年&#xff0c;跳槽到我们公司起薪18K&#xff0c;都快接近我了。后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了…...

360 G800行车记录仪,不使用降压线如何开机,8芯插头的定义。

G800记录仪的插头是这样的&#xff0c;图中标出了线的颜色。其中红色为常电V&#xff0c;黑色为GND负极&#xff0c;黄色为ACC受车是否启动控制。 这个记录仪原装的电源线没有降压功能&#xff0c;所以这里的V是12V。 记录仪内部有电源板&#xff0c;负责将12V降压为5V。 如果…...