为什么新用户继承了已删除用户的文件?

Joh*_*ohn 26 users administration

所以我不得不在书中做一个练习作为家庭作业。首先,您必须创建一个用户,例如:

useradd -c "Steven Baxter" -s "/bin/sh" sbaxter
Run Code Online (Sandbox Code Playgroud)

然后你必须在/home/sbaxter目录中添加一些文件:

touch /home/sbaxter/ some.txt new.txt files.txt
Run Code Online (Sandbox Code Playgroud)

然后您必须删除该sbaxter用户并创建一个名为 的新用户mjane。令我惊讶的是,当我运行时find /home/ -user mjane,新用户mjane现在拥有 sbaxter 的所有旧文件,发生了什么?

Dra*_*oan 43

魔鬼在细节中,在useradd手册页中(您可以通过发出 看到man 8 useradd):

   -u, --uid UID
       The numerical value of the user's ID. This value must be unique,
       unless the -o option is used. The value must be non-negative. The
       default is to use the smallest ID value greater than or equal to
       UID_MIN and greater than every other user.
Run Code Online (Sandbox Code Playgroud)

因此,它将默认使用密码文件中最小的未使用的 uid,即比其他用户大的 uid。看到删除 sbaxter 会将他从 passwd 文件中删除,他的 uid 是“空闲的”并被分配给 mjane(因为在使用命令useradd时两个用户的 uid选择是相同的useradd)。

磁盘上的文件仅存储 uid,而不存储用户名转换(因为此转换在密码文件中定义)。您可以通过发出ls -ln查看 uid 所有权文件来确认这一点。

我实际上建议您禁用而不是删除帐户。大多数 Linux 发行版上的锁定帐户都可以使用 来实现usermod -L -e today <username>,它会锁定密码并将帐户设置为今天到期(您可以使用 来查看帐户的到期日期chage -l)。

  • @BlueRaja-DannyPflughoeft 这不是一个安全漏洞:用户是通过他们的用户 ID 来识别的,而不是他们的用户名。删除帐户时,必须删除其所有文件(即该用户 ID 拥有的所有文件,而不仅仅是用户的主目录)。这是删除帐户的正常程序的一部分。 (6认同)
  • 按照今天的标准,这是一个安全漏洞。如示例所示,这意味着您无法将人与文件关联起来。当然,人类可能与帐户有很强的关联,但是由于 UID 回收,人类&lt;-&gt;帐户&lt;-&gt;文件的关联被破坏了。再说一次,Unix 在这方面从来没有很好的安全性(`root` 几乎可以伪造任何东西)。为此,您需要审计跟踪。 (6认同)
  • ...这似乎是一个可怕的安全漏洞。有没有办法解决它? (3认同)
  • @OlivierDulac *那* 称为备份。或者,只要您需要保留其数据,就可以锁定但不要删除该帐户。毕竟,如果您需要保留数据,那么帐户仍然需要。 (2认同)

Ign*_*ams 14

被删除用户的 UID 被新用户重用,文件系统使用 UID 来表示所有权,而不是用户名。