在没有用户的情况下使用自定义用户 ID

在没有用户的情况下使用自定义用户 ID

我想根据需要使用自定义的用户ID和组ID,而无需更改甚至拥有具有此ID的用户帐户。

使用 Docker 可以轻松完成此操作:

> docker run -it --rm -u 10000:10000 bash
bash-5.2$ id
uid=10000 gid=10000
bash-5.2$ whoami
whoami: unknown uid 10000

但是如果没有 Docker 该如何实现呢?

答案1

任何工具都可以通过调用标准setuid()函数(或setreuid()等)来实现这一点。它只需要切换 UID 的权限(通常您必须是 root 用户),但不会以任何方式检查帐户数据库中是否存在 UID。

int main(void) {
    setuid(1234);
}

(在这种情况下,虽然该docker工具没有直接设置uid()的权限,但它会与具有此类权限的dockerd守护进程进行通信。)

在 Linux 上常见的一个这样的工具是setpriv,另一个是chpst

# setpriv --reuid 1234 id
uid=1234 gid=0(root) groups=0(root)

它们还允许“真实”和“有效”的 UID 不同(以模拟运行“setuid”工具):

# setpriv --ruid 1234 --euid 5678 --rgid 1234 --egid 5678 --clear-groups id
uid=1234 gid=1234 euid=5678 egid=5678 groups=5678

sudo -u "#1234"这不起作用的唯一原因runuser -u 1234是他们故意地检查帐户数据库以检索主目录和其他参数。

相关内容