根据useradd
联机帮助页,1000以下的UID通常是为系统帐户保留的。
我正在开发一个以自己的用户身份运行的服务。我知道/etc/services
可以找到众所周知的端口。
是否有一个地方可以找到那些众所周知的UID?我想避免与其他人的UID崩溃。
答案 0 :(得分: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);
}
UID 0始终是root,传统上UID 65534是nobody
,但你不应该依赖它,也不应该依赖它。正在使用的UID因操作系统,分发甚至系统而异 - 例如,Gentoo上的许多系统服务在安装时分配UID。没有使用UID的中央数据库。
此外,/etc/login.defs
定义了“系统UID”。在我的桌面上,它被配置为UID 100-999被视为系统帐户,UIDS 1000-60000是用户帐户,但这可以很容易地更改。
如果您正在编写服务,我建议编写软件包安装脚本以根据需要分配UID,并且您的软件可以配置为使用任何UID /用户名。
答案 1 :(得分:4)
我知道这是一篇旧帖子,但由于我2017年在这里,仍然试图回答类似的问题,我认为这些额外的信息与同一位置的其他人有关。
&#34;众所周知的UID&#34;可以追溯到unix的早期阶段,之前有大量的发行版和unix变体。 &#34;众所周知&#34; UID被认为是系统用户的那些,如adm,守护进程,lp,同步,运营商,新闻,邮件等,并且是所有各种系统的标准,以避免uid冲突。这些用户仍然存在于类似Unix的现代操作系统中。
在整个组织中标准化uid是避免这些问题的关键。正如上面的评论所指出的那样,现在你选择的任何uid都可能在某个地方使用,所以系统管理员最好的目标是确保uid的标准是他们维护的所有系统,然后为应用程序分配新的uid变得简单。
为此,多年来我发现下面链接的帖子非常宝贵,遗憾的是在这个主题上没有很多类似的帖子,而且很难找到。
UNIX/Linux: Analyzing user/group UID/GID conflicts
如果你在“uid&#39;”下搜索该博客。标签还有其他相关的帖子,包括一个脚本,用于自动化在Linux下跨多个主机标准化uid的过程。
此User ID Definition也是宝贵的资源。
简短的回答是,只要它们在整个组织中是独一无二且标准的,您使用哪个uid并不重要,以避免冲突。
答案 2 :(得分:0)
我不确定这样的清单是否存在。如何通过 / etc / passwd 文件, / etc / shadow 文件以及 NIS全球用户列表来注意UID正在使用中,注意哪些正在使用?然后使用一个不是!
答案 3 :(得分:0)
在Linux中,在/etc/login.defs
中配置。有时候,当我安装一个基于Debian的系统时,我会将“uid start”选项(我忘了它的名字,我现在不在Linux上)从1000改为500,以便与其他Red Hat-y机器保持一致。 / p>
man login.defs
应该为您提供所需的所有信息。