Linux 用户、Docker 用户组 和 WSL2的用户,它们有什么关系和区别

Linux 用户、Docker 用户组 和 WSL2的用户,它们有什么关系和区别

前面安装的时候遇到一个问题

问题的根源在于你的 Windows 用户名 86178 以数字开头,这在 Linux 环境中是不被允许的,并间接导致了 Docker 的权限解析失败。为了避免未来在开发中遇到更多类似“权限”或“路径”的奇怪问题,强烈建议你创建一个以字母开头的专用 Linux 用户。


新用户 jinqiu 已经加入 Docker 用户组。

这是一个非常棒的问题,能问出这个,说明你已经不是在“跟着教程走”,而是在“理解整个系统怎么转了”。


它们三者的关系和区别,用一个比喻来理解会特别清晰:

  • WSL2 就像是一台独立的 Linux 物理电脑

  • Linux 用户,比如 mumu 和 jinqiu,就是这台电脑的登录账户

  • Docker 用户组,则是这台电脑上的一个特殊通行证


一、WSL2 与 Linux 用户:电脑与账户的关系

WSL2 是一个完整的 Linux 虚拟机,它有自己的用户管理系统。

  • WSL2 是“硬件”:它提供了 Linux 内核和运行环境。你每次打开 MobaXterm 或 wsl 命令,就是在“开机”进入这台虚拟机。

  • Linux 用户(mumu 和 jinqiu)是“软件账号”:它们是你在 WSL2 里的身份标识。你登录到 WSL2 时,必须用一个用户名(比如 mumu)。这个身份决定了:

    • 你的家目录在哪里(/home/mumu 或 /home/jinqiu

    • 你对文件和文件夹的读写权限(比如,你的文件默认只有你能改)

    • 你能否执行某些系统级命令(比如 sudo

关键点:Windows 用户名(86178)只在 Windows 登录时有效,它和 WSL2 内部的 Linux 用户是两个独立的概念。只是 WSL2 首次安装时,会“借用”Windows 用户名帮你创建一个同名的 Linux 用户而已。


二、Docker 用户组:通往 Docker 引擎的“特殊通行证”

Docker 在 Linux 上是一个系统服务,它的通信接口(一个叫 /var/run/docker.sock 的文件)默认只有 root 用户和 docker 用户组的成员才能访问。

  • 为什么需要这个组? 如果不用这个组,你每次执行 docker 命令都得在前面加上 sudo(临时变成 root),很麻烦。

  • 加入 docker 组意味着什么? 意味着你的 Linux 用户获得了访问 Docker 引擎的“通行证”。jinqiu 用户能运行 docker ps,是因为你通过 sudo usermod -aG docker jinqiu 把它加入了通行证列表。

关键点:Docker 用户组是Linux 系统层面的组,它和哪个用户绑定,哪个用户就能操控 Docker。


三、三者的关系图谱

为了让你一眼看清,我用表格总结它们的区别和协作关系:

对象它是什么作用范围管理方式
WSL2虚拟机平台整个 WSL2 环境Windows 功能设置
Linux 用户 (mumu/jinqiu)登录身份WSL2 虚拟机内部用 useradd 等命令管理
Docker 用户组系统权限组WSL2 虚拟机内部用 usermod -aG docker 管理

它们如何协作:

  1. 登录:你用 jinqiu 这个身份登录到 WSL2 这台电脑。

  2. 权限jinqiu 拥有一个 docker 组的“通行证”。

  3. 执行:当你敲下 docker run hello-world,系统会检查:当前用户 jinqiu 是否属于 docker 组?答案是“是”,于是 Docker 引擎接受了你的指令,拉取了镜像。

你用 mumu 用户一直无法操作 Docker,是因为 mumu 不在 docker 组里(而你之前的所有配置都在 jinqiu 用户下完成的)。用 jinqiu 就成功了。这正好说明问题完全出在“Linux 用户身份”和“docker 用户组权限”上。


四、为什么我强烈建议你创建 jinqiu 用户?

Windows 用户名 86178 以数字开头在 Linux 中不合法,所以 WSL2 无法基于它创建一个完全合规的 Linux 用户。虽然你的 mumu 用户能凑合用,但在权限继承、用户组解析这类底层操作上,Linux 可能会“不认识”这个用户,导致各种不可预测的问题。

所以,创建一个如 jinqiu 这样完全合规的 Linux 用户,并让它加入 docker 组,就是从根本上理清了 Linux 用户和 Docker 权限的关系。你现在已经做完了,未来遇到的大多数权限相关的“灵异事件”都会自动消失。

现在你的 jinqiu 用户,在 WSL2 这台电脑上,拥有一个合法身份(jinqiu)和一张有效通行证(docker 组),指向 Docker 引擎。这就是三者最理想的关系状态。


写一个脚本,查下WSL2或Linux中有几个用户,各自的权限是什么,我记不清了。还有要在WSL中新装Maven,要装在哪个用户下?


好的,先帮你查用户,再决定 Maven 装在哪里。


一、WSL2 中的用户和权限查询脚本

你可以把这个命令直接复制到 MobaXterm 的 WSL 终端里运行:

bash

echo "=================================="
echo "        WSL/Linux 用户概览        "
echo "=================================="

# 1. 列出所有可登录的用户
echo ""
echo "📋 系统用户列表(有家目录的):"
cut -d: -f1,3,4,6,7 /etc/passwd | grep -E ":/home/|:/root" | column -t -s:

# 2. 查看当前登录用户
echo ""
echo "👤 当前登录用户:"
whoami

# 3. 查看当前用户所属组
echo ""
echo "📁 当前用户所属组:"
groups

# 4. 重点查看 docker 组里有谁
echo ""
echo "🐳 docker 组中的用户:"
getent group docker | cut -d: -f4

# 5. 查看 sudo 组中有哪些用户
echo ""
echo "🔑 sudo 组中的用户:"
getent group sudo | cut -d: -f4

执行后,你能看到:

  • 系统用户列表:所有有家目录的用户(/home/xxx),你关心的就是这些。

  • 当前用户:你用的是 mumu 还是 jinqiu

  • 当前用户组:比如你当前用户有没有 dockersudo 权限。

  • docker 组用户:谁有操作 Docker 的权限。

  • sudo 组用户:谁有管理员权限(能用 sudo)。


二、新装 Maven,装在哪个用户下?

答案是:装在 jinqiu 用户下

综合你这边的实际情况,原因有 3 点:

理由说明
你的开发都集中在 jinqiu 用户之前 HBase、Docker、Kettle 的后续操作基本都在 jinqiu 用户下完成,保持统一,省得来回切换。
jinqiu 对 Docker 环境是通的你已经把 jinqiu 加入 docker 组了,Maven 后续如果要用 Docker(比如打包镜像),jinqiu 能直接跑,mumu 大概率不行。
文件权限干净装在 jinqiu 的家目录下,不会污染系统目录,也避免和其他用户冲突。

三、Maven 安装位置建议(在你查询完用户信息后执行)

安装路径/home/jinqiu/tools/maven

操作步骤(在 jinqiu 用户下执行):

bash

# 1. 切换到 jinqiu 用户(如果当前不是)
su - jinqiu

# 2. 创建工具目录
mkdir -p ~/tools

# 3. 下载 Maven(以 3.9.9 为例)
cd ~/tools
wget https://dlcdn.apache.org/maven/maven-3/3.9.9/binaries/apache-maven-3.9.9-bin.tar.gz

# 4. 解压
tar -zxvf apache-maven-3.9.9-bin.tar.gz
mv apache-maven-3.9.9 maven

# 5. 配置环境变量(只对 jinqiu 生效)
echo 'export MAVEN_HOME=$HOME/tools/maven' >> ~/.bashrc
echo 'export PATH=$MAVEN_HOME/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

# 6. 验证
mvn -version

四、总结

问题答案
怎么查用户和权限?用上面给的脚本跑一遍,结果一目了然。
Maven 装在哪个用户下?jinqiu,因为当前用户即你之后的主力开发用户,环境变量不影响 mumu,干净可控。
装在哪里?/home/jinqiu/tools/maven,家目录下的 tools 文件夹。

你先把查询脚本跑一下,看看 docker 组里是不是只有 jinqiu,以及当前登录的是谁,然后把输出截图发给我,我再帮你看看有没有遗漏。

mumu@MuJinqiu:~$ echo "=================================="
echo "        WSL/Linux 用户概览        "
echo "=================================="

# 1. 列出所有可登录的用户
echo ""
echo "📋 系统用户列表(有家目录的):"
cut -d: -f1,3,4,6,7 /etc/passwd | grep -E ":/home/|:/root" | column -t -s:

# 2. 查看当前登录用户
echo ""
echo "👤 当前登录用户:"
whoami

# 3. 查看当前用户所属组
echo ""
echo "📁 当前用户所属组:"
groups

# 4. 重点查看 docker 组里有谁
echo ""
echo "🐳 docker 组中的用户:"
getent group docker | cut -d: -f4

# 5. 查看 sudo 组中有哪些用户
echo ""
echo "🔑 sudo 组中的用户:"
getent group sudo | cut -d: -f4
==================================
        WSL/Linux 用户概览
==================================

📋 系统用户列表(有家目录的):
root    0     0     /root         /bin/bash
mumu    1000  1000  /home/mumu    /bin/bash
jinqiu  1001  1002  /home/jinqiu  /bin/bash

👤 当前登录用户:
mumu

📁 当前用户所属组:
mumu adm cdrom sudo dip plugdev users docker

🐳 docker 组中的用户:
mumu,jinqiu

🔑 sudo 组中的用户:
mumu,jinqiu
mumu@MuJinqiu:~$

脚本跑出来的信息非常清晰,说明你的用户权限已经完全理清了。我们逐条解读一下:

脚本输出解读

  • 系统用户列表:显示系统里有 rootmumujinqiu 三个有家目录的用户。jinqiu 和 mumu 都是普通用户,但 jinqiu 的 UID(用户ID)是 1001mumu 是 1000,它们互不干扰。

  • 当前登录用户:你现在正用 mumu 用户登录,这也是你平时操作 WSL 的默认入口。

  • 当前用户所属组mumu 所属的组列表中,包含了 docker 组。这意味着你之前把 mumu 也加入过 docker 组,并且这个配置在系统更新后依然有效。

  • docker 组中的用户:输出 mumu,jinqiu,说明 mumu 和 jinqiu 都有 Docker 操作权限。所以你现在用 mumu 直接运行 docker ps 也不会报错,因为你在权限范围内。

  • sudo 组中的用户mumu 和 jinqiu 都在 sudo 组中,说明它们都能通过 sudo 获取管理员权限,装软件、改系统配置都没问题。

结论:Maven 该怎么装?

既然 mumu 和 jinqiu 权限完全一致(都在 docker 和 sudo 组中),那选择就很简单了:

选项判断
装在 jinqiu可以,但需要先 su - jinqiu 切用户,日常用 mumu 的话还得额外配置环境变量,比较绕。
装在 mumu推荐。因为你现在已经习惯用 mumu 登录,而且权限完全够用。直接装在家目录里,环境变量只对 mumu 生效,省心。

操作建议(在 mumu 用户下直接装)

bash

# 1. 创建工具目录
mkdir -p ~/tools

# 2. 下载 Maven(以 3.9.9 为例)
cd ~/tools
wget https://dlcdn.apache.org/maven/maven-3/3.9.9/binaries/apache-maven-3.9.9-bin.tar.gz

# 3. 解压
tar -zxvf apache-maven-3.9.9-bin.tar.gz
mv apache-maven-3.9.9 maven

# 4. 配置环境变量(只对 mumu 生效)
echo 'export MAVEN_HOME=$HOME/tools/maven' >> ~/.bashrc
echo 'export PATH=$MAVEN_HOME/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

# 5. 验证
mvn -version

这样装完后,mumu 用户就能直接使用 Maven,jinqiu 用户如果想用,也可以单独配一次(或者直接用绝对路径),互不干扰。

总结

你的用户权限布局其实很干净:mumu 是主力用户,jinqiu 是备用/隔离用户,两者都有完整的 Docker 和 sudo 权限。你现在所有开发和配置都围绕 mumu 展开,Maven 装在 mumu 下最省事。

先装一下试试,如果下载慢,可以换成国内镜像源(比如清华源)。装完跑一下 mvn -version,把结果发我确认。


su - jinqiu 中的 su - 是 切换用户并加载目标用户完整环境

具体来说:

命令含义
su切换用户(Switch User)
su jinqiu切换到 jinqiu 用户,但保留当前用户的环境变量(如 PATH、当前目录等)
su - jinqiu切换到 jinqiu 用户,并加载 jinqiu 的完整登录环境(相当于重新登录,会读取 ~/.bashrc 等配置文件,且当前目录会切换到 jinqiu 的家目录 /home/jinqiu

一句话总结su - jinqiu 比 su jinqiu 更“彻底”,能完整切换用户的运行环境,避免因环境变量不匹配导致的命令找不到或权限问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星汉灿烂星河

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值