什么是众所周知的UID?

Jim*_*ker 4 unix

根据useradd联机帮助页,1000以下的UID通常保留给系统帐户.

我正在开发一个将作为自己的用户运行的服务.我知道可以找到众所周知的端口/etc/services.

有没有一个地方我可以找到那里众所周知的UID?我想避免与其他人的UID崩溃.

eph*_*ent 7

getpwent(3)迭代密码数据库(通常/etc/passwd,但不一定;例如,系统可能在NIS域中).应该在那里表示系统已知的任何UID.

为了演示,以下shell片段和C代码都应该打印系统上的所有已知UID.

$ getent passwd | cut -d: -f3
#include <pwd.h>
#include <stdio.h>
int main() {
    struct passwd *pw;
    while ((pw = getpwent()))
        printf("%d\n", pw->pw_uid);
}
Run Code Online (Sandbox Code Playgroud)

UID 0总是root,传统上UID是65534 nobody,但是你不应该依赖它,也不应该依赖它.正在使用的UID因操作系统,分发甚至系统而异 - 例如,Gentoo上的许多系统服务在安装时分配UID.没有使用UID的中央数据库.

此外,/etc/login.defs定义"系统UID"是什么.在我的桌面上,它被配置为UID 100-999被视为系统帐户,UIDS 1000-60000是用户帐户,但这很容易更改.

如果您正在编写服务,我建议编写软件包安装脚本以根据需要分配UID,并且您的软件可以配置为使用任何UID /用户名.


小智 5

我知道这是一篇旧帖子,但由于我在 2017 年来到这里,仍在尝试回答类似的问题,我认为这些附加信息与处于同一职位的其他人相关。

“众所周知的 UID”的概念可以追溯到 unix 的早期,在此之前有大量的发行版和 unix 变体。“众所周知”的 UID 被认为是供系统用户使用的 UID,例如 adm、daemon、lp、sync、operator、news、mail 等,并且是所有各种系统的标准,以避免 uid 冲突。这些用户仍然存在于现代类 Unix 操作系统中。

在整个组织中标准化 uid 是避免这些问题的关键。正如在上面的评论中指出的那样,如今您选择的任何 uid 都可能在“某处”使用,因此系统管理员的最佳目标是确保 uid 在他们维护的所有系统中都是标准的,然后分配应用程序的新 uid 变得简单。

为此,多年来我发现下面链接的帖子非常宝贵,遗憾的是,关于该主题的类似帖子并不多,而且很难找到。

UNIX/Linux:分析用户/组 UID/GID 冲突

如果您在“uid”标签下搜索该博客,还有其他相关帖子,包括一个脚本,用于在 Linux 下跨多个主机自动标准化 uid 的过程。

用户 ID 定义也是一种宝贵的资源。

简短的回答是,您使用哪个 uid 并不重要,只要它们在您的组织中是唯一的和标准的,以避免冲突。