创建 UID < 500 的普通用户有什么危险?假设 UID 与现有 UID 不重复,可能会出现什么问题?
这不是我想做的事情,而是我已经看到的事情并且想知道为什么不应该这样做。在此示例中,它位于 RHEL5 上。
答案1
我不认为存在任何固有风险,这样做只是为了在系统帐户和用户帐户之间建立分离。根据我的经验,使用低于 500 的数字的做法是 Redhat 主义,仅此而已。
在 Solaris 上,我也看到用户被分配的编号从 100 开始,直到几年后才发现,将 2 个较小部门的系统合并在一起会导致一场噩梦,因为这 2 个部门中有多个用户具有相同的 UID /GID 已分配。
这确实是分配 UID 时的主要风险/令人头疼的问题。由于 UID 是最终写入用户给定文件/目录的 inode 的内容,因此您不希望以后执行大量find
查找 UID 1234 拥有的文件并将其更改为 5678 。
因此,通过仔细考虑 UID 的选择,管理员可以避免日后出现的麻烦。
使用 500 及以上只是 Redhat(和其他 Unix)尝试为自己提供足够的缓冲区,以便可能需要创建的任何系统帐户都不会与分配给用户的 UID 混合。
/etc/login.defs
顺便说一句,数字 500 是由配置文件 中的此设置驱动的/etc/login.defs
。
#
# Min/max values for automatic uid selection in useradd
#
UID_MIN 500
UID_MAX 60000
#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN 500
GID_MAX 60000
如果您想通过useradd
/adduser
命令覆盖默认行为,您可以将其更改为您想要的任何内容。
Useradd 手册页
如果您查看useradd
手册页,您会注意到这部分讨论了 GID 的默认值,但此注释也适用于 UID:
摘抄
-g, --gid GROUP
The group name or number of the user´s initial login group. The group name
must exist. A group number must refer to an already existing group.
If not specified, the behavior of useradd will depend on the USERGROUPS_ENAB
variable in /etc/login.defs. If this variable is set to yes
(or -U/--user-group is specified on the command line), a group will be
created for the user, with the same name as her loginname. If the variable
is set to no (or -N/--no-user-group is specified on the command line),
useradd will set the primary group of the new user to the value specified by
the GROUP variable in /etc/default/useradd, or 100 by default.
系统账户
手册页中需要注意的另一件事useradd
是关于系统帐户生成的这一点。
摘抄
-r, --system
Create a system account.
System users will be created with no aging information in /etc/shadow,
and their numeric identifiers are choosen in the SYS_UID_MIN-SYS_UID_MAX
range, defined in /etc/login.defs, instead of UID_MIN-UID_MAX (and their
GID counterparts for the creation of groups).
Note that useradd will not create a home directory for such an user,
regardless of the default setting in /etc/login.defs (CREATE_HOME). You
have to specify the -m options if you want a home directory for a system
account to be created.
useradd -r ...
当安装软件包时,脚本编写经常使用此方法 ( ),将其合并到各种软件包管理器(例如 RPM)中。以这种方式编写脚本允许系统自动选择给定系统上的下一个可用 UID/GID,而不会出现踩踏已分配给系统用户的 UID/GID 的风险。
答案2
不存在真正的危险。内核不关心除 0 之外的用户 ID 值。大多数管理工具也不关心 — 系统的很少部分会区分系统用户和人类用户。
系统用户往往有专用的组,因此不太可能创建属于更多组的帐户。
某些发行版为系统用户保留 1–499(Red Hat 和相关版本)或 1–999(Debian 和相关版本)范围,包括在安装包含需要专用用户的系统服务的软件包时分配的用户。 Debian 的约定是范围 1–99 是静态分配的(因此在该范围内创建人类用户是一个非常糟糕的主意,因为它可能与系统用户冲突),而范围 100–999 是动态分配的(因此创建人类用户在该范围内是无害的,因为任何新的系统用户都会选择一个免费的用户 ID)。
您可能会遇到一些小不便,例如显示管理器不向用户提供低于列表阈值的 UID。
隔离计算机的主要危险是您可能会让其他系统管理员感到困惑。对于共享用户 ID 的网络中的计算机,您可能会与这些用户与系统用户具有相同用户 ID 的其他计算机发生冲突。在具有共享用户 ID 的网络中,对于人类用户来说,最好坚持 1000-65533 甚至 10000-65533 的范围。
答案3
从内核的角度来看,只有一个特殊用户:UID 0。出于管理原因分割 UID 范围可以让您的生活更简单。常见的范围是供应商、系统、本地、全局。
供应商用户在系统初始安装期间安装,并由供应商静态管理。根据安装的软件包,每台计算机都会安装系统用户。大多数用户添加/删除实用程序都有范围限制来单独处理这些内容。本地用户是普通用户并按计算机分配。全局用户由中央数据库分配,但都是普通用户。使用 UID 范围可以防止这些不同组之间发生冲突。这些截止值可能会有所不同,但通常是可配置的。
答案4
PAM 配置文件通常根据 UID 做出决定。例如 RHEL 7.7 中的行:
/etc/pam.d/password-auth:auth requisite pam_succeed_if.so uid >= 1000 quiet_success
/etc/pam.d/password-auth:account sufficient pam_succeed_if.so uid < 1000 quiet
因此,系统帐户被授予了普通用户帐户可能不需要的特殊权限。另外,uid 小于 1000 的用户可能会发现无法登录。