AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 450973
Accepted
Arch Stanton
Arch Stanton
Asked: 2018-06-21 13:03:34 +0800 CST2018-06-21 13:03:34 +0800 CST 2018-06-21 13:03:34 +0800 CST

Linux 如何识别用户?

  • 772

我的意思是,如果两个用户具有相同的名称,那么系统在强制执行文件权限时如何知道他们实际上是不同的用户?

当我考虑/home/old-arch在重新安装系统之前重命名我的家时,我想到了这个疑问(我有/home自己的分区,我没有格式化它),这样我就可以拥有一个新的、原始的/home/arch. 我想知道新系统是否会给我文件的旧权限,或者它是否会将我识别为不同的arch.

permissions users
  • 4 4 个回答
  • 4041 Views

4 个回答

  • Voted
  1. Andy Dalton
    2018-06-21T13:22:04+08:002018-06-21T13:22:04+08:00

    如果您强制存在多个具有相同用户名的用户,那么将有多个/etc/{shadow,passwd}具有相同名称的条目:

    $ cat /etc/passwd
    ...
    a:x:1001:1002::/home/a:/bin/bash
    a:x:1002:1003::/home/b:/bin/bash
    
    # cat /etc/shadow
    a:...:17702:0:99999:7:::
    a:...:17702:0:99999:7:::
    

    如果您尝试以该用户身份登录,您将作为第一个匹配项登录。

    $ ssh a@<host>
    Password:
    $ id
    uid=1001(a) gid=1002(a) groups=1002(a)
    $ pwd
    /home/a
    

    将无法以第二个同名用户身份登录。

    请注意,Linux 通过用户的 uid 而非用户名来跟踪用户。

    但是,可能有两个不同的用户名是相同的用户 ID。考虑一个不同的版本/etc/passwd:

    $ cat /etc/passwd
    ...
    a:x:1001:1002::/home/a:/bin/bash
    b:x:1001:1002::/home/b:/bin/bash
    

    请注意,对于 usernamea和b,第三列是 1001 - 这是 uid / 用户 ID。现在,如果用户a或用户b登录(即使使用不同的密码),他们都将是“用户 1001”,并a从操作系统的角度显示为用户。在这里,第一个匹配的条目也是返回的(在大多数情况下):

    $ ssh a@host
    Password: <a's password>
    $ id
    uid=1001(a) gid=1002(a) groups=1002(a)
    
    $ ssh b@host
    Password: <b's password>
    $ id
    uid=1001(a) gid=1002(a) groups=1002(a)
    

    a和都是buid1001并且可以访问 uid 可用的资源1001。

    • 22
  2. Best Answer
    Lollen Jumplan
    2018-06-21T13:24:41+08:002018-06-21T13:24:41+08:00

    在 Unix 中,用户由他们的 ID (uid) 标识,该 ID 必须是唯一的(在本地系统范围内)。因此,即使可以创建 2 个具有相同名称的不同用户(我的系统上的 adduser 拒绝这样做,请参阅此问题以获取更多信息,不同的 unix 帐户可以共享一个用户名但有不同的密码吗?),他们需要得到不同的uid。虽然您可能能够操作包含用户信息的文件以匹配您的标准,但每个程序都基于 uid 在系统上是唯一的假设,因此此类用户将是相同的。

    编辑:另一个答案演示了一个情况,即同一个 uid 有 2 个不同的用户名 - 就系统而言,这就像同一个用户有两个不同的名称,所以如果可能的话,应该避免这样的结构,除非您特别想为系统上的用户创建别名(有关技术细节的更多信息,请参阅 serverfault 上的unix 用户别名问题)。

    系统使用这些 uid 来强制执行文件权限。文件所属用户的uid和gid(组id)写入文件的元数据。如果您将磁盘带到另一台随机共享相同 uid 的不同用户的计算机上,该文件将突然属于该系统上的该用户。知道 uid 在 unix 系统上通常不超过 16 位整数,这表明 uid 并不意味着全局唯一,仅在本地系统范围内唯一。

    • 11
  3. ilkkachu
    2018-06-22T01:14:10+08:002018-06-22T01:14:10+08:00

    /home/old-arch在重新安装系统之前,我正在考虑重命名我的家。我想知道新系统是否会给我文件的旧权限,或者它是否会将我识别为不同的拱门。

    如果您有一个单用户系统并使用相同或类似的发行版进行重新安装,那么您的用户帐户很可能具有相同的用户 ID,因此从内核的角度来看是相同的用户。例如,据我所知,安装期间创建的用户在 Debian 系统上是 UID 1000。其他系统可能会使用其他一些数字,但它很可能是一些在每次安装时都相同的小整数。

    这同样适用于其他用户(如果有的话),因为 UID 通常是按顺序分配的。创建的第三个用户可能与在另一个系统上创建的第三个用户具有相同的 UID。您需要事先采取措施确保 UID 不会在两个系统上重复使用。

    出于类似的原因,任何使用 NFS 的东西都需要有一个共享的用户数据库。

    chown newuser. -R /home/olduser但在这种情况下,由于它是您的个人系统,即使 UID 不同,您也可以以 root 身份登录并运行。

    (Windows 系统不同,它们会生成更随机的较长 ID 字符串。在那里,如果您将磁盘移动到另一台机器,文件将被未知用户拥有,并且您将无法访问,除非使用管理员权限。

    另外,我在上面说了很多“可能”。无法确定某些发行版的行为是否不同。现代 Linux 还支持 32 位 UID,因此虽然它没有 Windows SID 长,但如果想要使用随机 UID,仍然有一些空间可以使用。不过,通常情况下,这样做并没有多大用处。系统管理员应该知道他们附加到系统的磁盘并相应地调整文件所有权,或者使其他用户无法访问挂载点。)

    • 3
  4. ypouplard
    2018-06-22T01:08:06+08:002018-06-22T01:08:06+08:00

    Unix 是一个非常古老的系统,在一个存储容量非常小的时代,一切——以及文件和用户——都由数字标识。在存储量增长一点之后,名字出现了。

    该系统的一个优点是名称只是与真实句柄挂钩的标签:数字 ID。因此,您可以为一个用户指定多个名称(直接编辑 /etc/passwd 时),以及为一个文件指定多个名称(仅用于存储文件一次,但可以在多个位置查看)。

    限制是用户的系统和文件的分区。

    我这么说只是为了澄清,解释为什么事情是这样的。

    我必须承认,我从未尝试过相反的方法——同名不同 ID——我一直认为这是不可能的。是吗?不作为一个错误?

    • 1

相关问题

  • 组权限如何工作?

  • Redis日志文件权限错误,但是权限已经是777

  • 以 root 权限启动 zypper 命令

  • 以非特权用户身份运行时,meld 无法访问 /dev/fd/* 的可能原因是什么?

  • 另一个用户的非空子目录是否可以安全地从我的目录中删除?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve