根据useradd联机帮助页,1000以下的UID通常保留给系统帐户.
我正在开发一个将作为自己的用户运行的服务.我知道可以找到众所周知的端口/etc/services.
有没有一个地方我可以找到那里众所周知的UID?我想避免与其他人的UID崩溃.
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 变得简单。
为此,多年来我发现下面链接的帖子非常宝贵,遗憾的是,关于该主题的类似帖子并不多,而且很难找到。
如果您在“uid”标签下搜索该博客,还有其他相关帖子,包括一个脚本,用于在 Linux 下跨多个主机自动标准化 uid 的过程。
此用户 ID 定义也是一种宝贵的资源。
简短的回答是,您使用哪个 uid 并不重要,只要它们在您的组织中是唯一的和标准的,以避免冲突。