设置权限

设置权限

我应该使用哪个命令(发行版存储库中提供)启动具有指定数字 uid、gid 和组的 shell?通常su用于从 root 更改为其他用户,但它会尝试按名称查找组,而当使用外部文件系统、命名空间和 Docker 容器时,名称可能不存在。

我希望它是一个简单的应用程序,只执行setgroups(2)setgid(2)setuid(2)execve(2),而不需要任何/etc/passwd或 nsswitch 。用 C 语言实现这样的程序很容易,但也许这个用例使用了标准的和发行版可用的东西?

答案1

作为备选:

设置权限

cd /; setpriv --reuid=1000 --regid=1000 --init-groups --reset-env bash

干净简单

答案2

chroot

chroot --userspec=1000:1000 --groups=1001,1002 / /bin/bash

Chroot 有选项--userspec并且--groups通常在发行版中可用。将目标目录设置为/呈现 chroot nil 的主要目的,但 uid/gid/groups 覆盖效果仍然存在。

答案3

如果您有 Perl,并且只关心 UID 和 GID,则执行此操作相对简单:

# perl -e '$( = 456; $) = "456 1111 2222"; $< = $> = 123; exec("id")'
uid=123 gid=456 groups=456,1111,2222

$($)真实有效的GID;以及真实有效的UID(按此顺序)$<。可以接受一个代表多个数字的字符串,它也会设置补充组。 (要清除这些列表,请设置主 GID 两次,例如)$>$)$) = "456 456"

或者,在English

# perl -MEnglish -e '$GID = 456; $EGID = "456 1111 2222"; $EUID = $UID = 123; exec("id")'
uid=123 gid=456 groups=456,1111,2222

您也可以使用POSIX::set[gu]uid(),当然您应该$!在修改特殊变量后检查以检查是否有错误。如果您无权更改您的组或 UID,上述操作将会默默失败。

相关内容