所以我必须做书上的练习作为家庭作业。首先,您必须创建一个用户,例如:
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 的所有旧文件,发生了什么?
答案1
魔鬼在于细节,在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(因为使用useradd
该命令时两个用户选择的uid是相同的)。useradd
磁盘上的文件仅存储 uid,而不存储用户名翻译(因为此翻译是在密码文件中定义的)。您可以通过发出命令ls -ln
查看 uid 所有权文件的内容来确认这一点。
我实际上会推荐你禁用而不是删除帐户。大多数 Linux 发行版上的锁定帐户可以通过 来实现usermod -L -e today <username>
,它会锁定密码并将帐户设置为今天到期(您可以使用 来查看帐户的到期日期chage -l
)。
答案2
已删除用户的 UID 被新用户重用,文件系统使用 UID 来表示所有权,而不是用户名。