次のユーザーがいるとします。
$ 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: ", "))