创建UID <500的普通用户有什么危险?


14

创建UID <500的普通用户有什么危险?假设UID不是现有UID的副本,那会出什么问题?

这不是我想做的事情,而是我已经看到并想知道为什么不应该做的事情。在此示例中,它在RHEL5上。


2
Debian的衍生系统似乎,没有500在1000开始正常的UID
基思·汤普森

Answers:


16

我不相信有任何固有的风险,这是为了在系统帐户和用户帐户之间建立隔离而完成的。根据我的经验,使用小于500的数字的做法是Redhat主义,实际上仅此而已。

在Solaris上,我还看到给用户分配的号码也从100开始,直到数年后才发现,将两个较小部门的系统合并在一起会引起各种噩梦,因为两个部门中有多个用户具有相同的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。


1
FWIW,我认为这是一种通用的GNU / Linux主义,而不仅仅是Red Hat主义。我在所有使用的系统上都看到了这一点,而且我从未使用过Red Hat。
奋斗

@strugee-谢谢,我不想说得太宽泛,让它再次咬我。
slm

2

从内核的角度来看,只有一个特殊用户:UID0。出于管理原因拆分UID范围可以简化您的生活。常见范围是供应商,系统,本地,全局。

供应商用户是在系统的初始安装期间安装的,并由供应商静态管理。每台计算机上安装的系统用户数取决于所安装的软件包。大多数用户添加/删除实用程序都有一个范围限制,可以分别处理这些实用程序。本地用户是常规用户,并且按计算机分配。全局用户由中央数据库分配,但是常规用户。使用UID范围可防止这些不同组之间发生冲突。这些截止点的位置可以变化,但通常是可配置的。


1

这样做没有内在的危险。如果您创建的用户具有UID 499,则他们将没有任何额外的权限。建议不要这样做的原因仅仅是因为UID通常是为系统用户保留的。创建此类UID时可能遇到的问题是某些系统服务希望该UID可用时。这有点像创建一个在知名端口上运行的新服务-不一定没有问题,但这不是一个好习惯,当您设置sshd,ftpd等时,可能会进一步导致问题。

就是说,我已经看到许多系统创建用户时UID <500而没有问题。但是,随着用户群的增长以及现在有成千上万的用户,可能很难区分用户帐户和系统帐户。遵循没有UID <500的规则,这非常容易。因此,这也是一种组织帐户的好方法。


1

没有真正的危险。内核不关心用户ID值(0除外)。大多数管理工具也不关心-系统中很少有部分会在系统用户和人工用户之间产生差异。

系统用户倾向于拥有专用的组,因此创建的帐户属于不必要组的可能性不大。

某些发行版为系统用户(包括安装包含需要专用用户的系统服务的软件包时分配的用户)的系统用户保留范围为1–499(Red Hat和亲戚)或1–999(Debian和亲戚)。Debian的约定是静态分配1–99范围(因此在该范围内创建人类用户是一个非常糟糕的主意,因为它可能与系统用户发生冲突)而动态分配100–999范围(因此创建人类用户)在该范围内是无害的,因为任何新系统用户都会选择一个免费的用户ID)。

您可能会遇到一些小麻烦,例如显示管理器不向用户提供其列表中的阈值以下的UID。

隔离的计算机的主要危险是,您很可能会使您的系统管理员迷惑。对于共享用户ID的网络中的计算机,您可能会与其他用户具有与系统用户相同的用户ID的其他计算机发生冲突。在具有共享用户ID的网络中,对于人类用户,最好坚持使用1000–65533甚至10000–65533的范围。

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.