UID 1 的用户是否在所有系统上都是“守护进程”?

UID 1 的用户是否在所有系统上都是“守护进程”?

我正在编写一些测试代码,我想知道如果假设 UID 1 的用户在所有 Unix 系统上都被命名为“daemon”,它是否可以移植?

编辑:如果没有(答案似乎是否定的),是否有任何 UID/用户名映射跨 Unices 一致(除了我已经在使用的 0/root 之外)?

答案1

不,并非所有地方都是如此。在 CentOS 7 系统上,摘自/etc/passwd

bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

在 Linux 上,您可以使用getent passwd daemon来查找用户的 UID daemon,并getent passwd 1查找哪个用户的 UID 为 1。

答案2

不。对于 Linux,bin并且daemon交换了位置 -bin曾经是#1 和daemon#2。在 Minix 上,#1/bin 实际上曾经被操作系统内核授予半特权(即有点像 #0/root)。在 Solaris 上,UID #1 称为daemon,而 GID #1 称为others- 这是新用户的默认组(除了在安装过程中使用 -“角色”创建的用户外root,他属于staff-组)。

UID #0 当然是root... GID #0 通常是rootwheel

我认为唯一必需的用户和组是#0。然而,强烈建议也有一个bindaemon组 - 拥有//bin 和 //sbin。然后你经常可以sys拥有各种系统文件和目录 - 特别是 /dev (在 Linux 中,设备现在通常由 root 拥有,并且不同组的设备有许多不同的组......只有 /dev/random、/dev/null在其他操作系统(如 Solaris)上,/dev/zero 通常仍sys作为组获得sys:sys。通常,您会adm成为各种日志的所有者和组(最初位于 /usr/adm),有时会运行 syslog。通常有一个man用户/组拥有手册页。

operator用户和/或组适用于那些被允许在控制台工作的人 - 即。终端直接连接到上锁的机房中的计算机。它经常运行备份,因此通常是该root组的成员来访问(几乎)所有内容。 staff是一个用于“初级管理员”的组,可能允许控制 /home 并添加本地用户。

最后,我们得到了一系列用户:组对,用于各种常见的以及在某种程度上所需的服务...有些现在不常见:lp=打印机,news=网络新闻(NNTP)公告板,mail=(本地)邮件服务,uucp= Unix to Unix CoPy...一种将邮件和新闻组帖子等内容打包在一起,并将其“复制”到远程 Unix 机器的方法。当人们主要使用拨号时经常使用。 tty= TeleTYpe...拥有各种终端。

许多人还有games用户。需要直接访问声卡和视频卡等内容的游戏,以该用户(游戏)运行 SetUID...并且 -usergame已添加到该硬件的组中。这样,游戏就可以获得对硬件所需的访问权限,而不必以完全 root 访问权限(即 SetUID=root)运行。它还允许在系统上的所有用户之间共享“最高分”列表等。

答案3

不,这不一定是便携式的。任何本地安装都可以自由更改任何 UID/名称对(尽管通常不建议这样做)。

为了可移植性,您应该始终使用操作系统的函数来转换数字/符号用户和组标识符(uidgid)。

如果您关心数字用户 ID ( uid) 2,则使用获取并返回数字组 ID 的命令和系统调用。必要时,使用getent命令或类似命令将数字转换为符号。

如果您关心用户,daemon则在执行用户操作时使用符号字符串daemon,或者在将 传递给命令或函数之前获取uid指定用户的daemon(再次,来自getent例如) 。uid

许多命令(例如ls和 )find包含用于处理符号组名称和数字组标识符的选项。其他命令例如getent可用于转换为/从

相关内容