【问题标题】:Can I assume that nobody is 65534?我可以假设没有人是 65534 吗?
【发布时间】:2016-04-22 06:34:59
【问题描述】:

我正在编写一个 setuid 根程序。这个程序需要打开一个文件进行写入,然后写入一些内容。打开文件只需要euid 0,就可以删除权限了。

要删除权限,我可以将当​​前 uid 设置为 seteuid。但我正在考虑切换到nobody:nogroup。

现在,我想知道:我可以假设没有人在每个系统上都是 65534(并且 nogroup 也是 65534)吗?它是由某个标准(可能是 POSIX)定义的吗?

【问题讨论】:

  • 在我的 FreeBSD 和 Gentoo 机器上确实是 65534,但在我的 Arch Linux 机器上,nobody 的 uid 是 99。所以我想说这绝对不是你可以在现实世界中做出的假设。

标签: posix user-permissions uid


【解决方案1】:

也许你可以使用/proc/sys/fs/overflowuid的值。

我不确定它是否与“nobody”的 UID 相同。但它应该满足您的需求。

【讨论】:

    【解决方案2】:

    你不能。 nobody has had at least a few different IDs across distros and time:

    从历史上看,用户“nobody”的 UID -2 是由几个 操作系统,尽管其他值,例如 2^(15)−1 = 32,767 也在使用中,例如 OpenBSD。为了 16 位之间的兼容性 和 32 位 UID,许多 Linux 发行版现在将其设置为 2^(16)−2 = 65,534; Linux 内核默认返回这个值时 32 位 UID 不适合 16 位系统的返回值 来电。另一种约定分配范围的最后一个 UID 静态分配给系统使用 (0-99) 给没人:99。

    【讨论】:

    • 我可以使用 getpwnam("nobody") 吗?我的意思是:到处都没有人叫“nobody”吗?
    • @Likk It's in the LSB 除了通过 UID 或名称之外,没有其他方法可以找到帐户——所以我会说是的。但是请注意,现在推荐的安全设置是为每个守护进程拥有一个单独的用户帐户,而不是使用nobody
    • 这很不方便。我认为解决方案是继续使用谷歌搜索,直到找到“可以”的答案。
    • @ChrisRobinson “相信的人有福了” :-) (S. Griboedov “Woe from Wit”)
    • @ivan_pozdeev 嗯,没错。 “以及世界上对他的温暖。”我会将其视为 65534 的必要祝福。但感谢您提供神秘的背景。
    猜你喜欢
    • 2015-05-05
    • 2018-07-17
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多