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


24

所以我必须做一本练习本作为作业。首先,您必须创建一个用户,例如:

useradd -c "Steven Baxter" -s "/bin/sh" sbaxter

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

touch /home/sbaxter/ some.txt new.txt files.txt

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

Answers:


41

魔鬼在详细信息的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.

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

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

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


2
...这似乎是一个可怕的安全漏洞。有什么办法可以解决它?
BlueRaja-Danny Pflughoeft13年

6
@ BlueRaja-DannyPflughoeft这不是安全缺陷:用户是通过用户ID而不是用户名来标识的。删除帐户时,必须删除其所有文件(即,该用户ID拥有的所有文件,而不仅仅是用户的主目录)。这是删除帐户的正常过程的一部分。
吉尔(Gilles)'所以

2
@OlivierDulac 被称为备份。或者,锁定但不要删除该帐户,只要您需要保留其数据即可。毕竟,如果您需要保留数据,那么仍然需要该帐户。
吉尔斯(Gillles)“所以-别再邪恶了”

1
可以使用锁定大多数Linux发行版上usermod -L -e today <username>的帐户,该帐户可以锁定密码并将该帐户设置为今天到期(您可以使用来查看该帐户的到期日期chage -l)。
Drav Sloan

5
按照当今的标准,这是一个安全漏洞。如示例所示,这意味着您无法将人与文件关联。当然,人类可能与帐户密切相关,但是由于UID回收,人类<-> account <->文件的关联被破坏了。再说一次,Unix在这方面从未有过强大的安全性(root几乎可以伪造任何东西)。为此,您需要审计跟踪。
MSalters 2013年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.