当前位置: 首页 > 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;在项目中需要播…...

为你的爬虫或数据分析脚本添加Taotoken大模型智能解析功能

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为你的爬虫或数据分析脚本添加Taotoken大模型智能解析功能 在数据工程与分析工作中&#xff0c;我们常常会遇到非结构化或半结构化…...

高效跨平台网盘直链解析工具:5步配置实战指南

高效跨平台网盘直链解析工具&#xff1a;5步配置实战指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅…...

DDrawCompat v0.6.0:终极指南,让经典游戏在现代Windows系统完美重生

DDrawCompat v0.6.0&#xff1a;终极指南&#xff0c;让经典游戏在现代Windows系统完美重生 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.…...

APK Installer完整指南:在Windows电脑上快速安装Android应用的终极解决方案

APK Installer完整指南&#xff1a;在Windows电脑上快速安装Android应用的终极解决方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经想在Windows电脑上直…...

JUCE框架移植MDA经典音频插件:从VST2到现代跨平台开发实践

1. 项目概述&#xff1a;JUCE框架下的MDA插件遗产如果你在音频插件开发领域摸爬滚打过一段时间&#xff0c;尤其是对开源社区有所关注&#xff0c;那么“mda-plugins-juce”这个名字大概率会唤起你的一些记忆。这个由hollance维护的GitHub仓库&#xff0c;本质上是一个“移植”…...

彻底释放Mac磁盘空间:Pearcleaner如何智能清理应用残留文件

彻底释放Mac磁盘空间&#xff1a;Pearcleaner如何智能清理应用残留文件 【免费下载链接】Pearcleaner A free, source-available and fair-code licensed mac app cleaner 项目地址: https://gitcode.com/gh_mirrors/pe/Pearcleaner 你是否曾将应用拖入废纸篓后&#xf…...

双机并联自适应虚拟阻抗下垂控制仿真模型附Simulink仿真

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。&#x1f34e;完整代码获取 定制创新 论文复现点击&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1f3…...

【2026最新】应对维普算法升级,5大降AI工具横测,一次稳降至25%(附手改秘籍)

知网和维普的AIGC检测系统又更新了&#xff01; 在当下的关口&#xff0c;如何在不牺牲质量的前提下&#xff0c;优化初稿表达&#xff0c;安全地降低AI痕迹&#xff0c;成了所有小伙伴们必须解决的一个问题。网络上各种“降AI神器”铺天盖地&#xff0c;这些工具到底靠不靠谱…...

Playwright自动化进阶:手把手教你用Yaml实现数据驱动,让测试用例管理效率翻倍

Playwright自动化进阶&#xff1a;手把手教你用Yaml实现数据驱动&#xff0c;让测试用例管理效率翻倍 当UI自动化测试用例数量达到三位数时&#xff0c;每次修改测试数据都像在代码海洋中捞针。我曾经历过这样的痛苦&#xff1a;某次产品迭代导致200多个测试用例中的URL全部需要…...

实战解析:如何通过显卡频率优化解决CUDA/TensorRT推理速度骤降问题

1. 从异常现象到问题定位 最近在部署一个基于YOLOv5的工业检测系统时&#xff0c;遇到了一个让人头疼的问题&#xff1a;当系统从连续检测模式切换到条件触发模式后&#xff0c;原本飞快的CUDA推理速度突然下降了近5倍。更诡异的是&#xff0c;降低相机帧率后&#xff0c;推理…...