给定以下用户:
$ whoami
admin
$ groups
staff everyone admin groupA
和
$ whoami
user
$ groups
staff everyone groupB
我试图了解该--preserve-groups
选项到底会产生什么影响。
$ whoami
admin
$ sudo --preserve-groups -u user groups
staff everyone groupB
$ sudo --preserve-groups -u user -s groups
staff everyone groupB
$ sudo --preserve-groups -u user -i groups
staff everyone groupB
根据我阅读选项文档的方式,我希望从执行的命令中看到的组列表是从调用用户而不是从目标用户获取的。但事实似乎并非如此。
答案1
显然它做正如我预期的那样工作,只是groups
CPython 以一种不了解 sudo 工作的方式检索组。
CPython (3.8.9) 将返回目标用户的组,无论--preserve-groups
:
python3 -c "import os; print(os.getgroups())"
但以下 Swift 程序将按预期工作:
import Darwin
let count = Int(getgroups(0, nil))
var groups = [gid_t](repeating: 0, count: count)
getgroups(Int32(count), &groups)
print(groups.map({"\($0)"}).joined(separator: ", "))