![Ubuntu 的自动 UID 生成行为是什么?](https://linux22.com/image/1051657/Ubuntu%20%E7%9A%84%E8%87%AA%E5%8A%A8%20UID%20%E7%94%9F%E6%88%90%E8%A1%8C%E4%B8%BA%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
我对生成新用户但未明确指定 UID 的情况感兴趣,Ubuntu 会自动分配 UID。我知道默认情况下 Ubuntu 会生成大于 1000 的 UID,但我想了解有关 ubuntu 的 UID 生成策略的所有信息。
这个问题的正确答案将澄清以下几点
- 如果以下两个 UID 已被使用:1001、2001 - 那么下一个自动生成的 UID 是 1002 还是 2002?
- 是否有最大 UID?如果某个帐户已被分配了最大 UID(但有其他空闲 UID),Ubuntu 会怎么做?
答案1
看/etc/adduser.conf
:
# FIRST_SYSTEM_[GU]ID to LAST_SYSTEM_[GU]ID inclusive is the range for UIDs
# for dynamically allocated administrative and system accounts/groups.
# Please note that system software, such as the users allocated by the base-passwd
# package, may assume that UIDs less than 100 are unallocated.
FIRST_SYSTEM_UID=100
LAST_SYSTEM_UID=999
FIRST_SYSTEM_GID=100
LAST_SYSTEM_GID=999
# FIRST_[GU]ID to LAST_[GU]ID inclusive is the range of UIDs of dynamically
# allocated user accounts/groups.
FIRST_UID=1000
LAST_UID=29999
FIRST_GID=1000
LAST_GID=29999
$(type -p adduser)
并且,阅读或处的 Perl 脚本/usr/sbin/adduser
,我们发现这个函数:
sub first_avail_uid {
my ($min, $max) = @_;
printf (gtx("Selecting UID from range %d to %d ...\n"),$min,$max) if ($verbose > 1);
my $t = $min;
while ($t <= $max) {
return $t if (!defined(getpwuid($t)));
$t++;
}
return -1; # nothing available
}
意思是:adduser
选择 1000 到 29999 之间的第一个免费 UID,否则失败。
准确答案:1002,它会挑选一个免费的。
存在最大 UID,4294967295
因为UID
s 是 32 位字段,但adduser
使用下限。
然而,也有/usr/sbin/useradd
谨防 adduser
并且useradd
很容易互相混淆/输错。
man useradd
告诉我:
DESCRIPTION
useradd is a low level utility for adding users. On Debian,
administrators should usually use adduser(8) instead.
...
-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.
See also the -r option and the UID_MAX description.
...
CONFIGURATION
The following configuration variables in /etc/login.defs change the
behavior of this tool:
...
SYS_UID_MAX (number), SYS_UID_MIN (number)
Range of user IDs used for the creation of system users by useradd
or newusers.
The default value for SYS_UID_MIN (resp. SYS_UID_MAX) is 101
(resp. UID_MIN-1).
UID_MAX (number), UID_MIN (number)
Range of user IDs used for the creation of regular users by useradd
or newusers.
The default value for UID_MIN (resp. UID_MAX) is 1000 (resp.
60000).
我使用adduser
而不是 的一个原因useradd
是 可以--encrypt-home
选择adduser
。但是,可以通过使用任意 UID 编辑一堆文件、复制其他文件、创建目录等来替换其中任何一个(为什么,在过去,我……)。adduser
或并没有什么神奇之处useradd
。