Я должен протестировать полномочия группы Linux на репозитории. В одной оболочке, как я могу временно удалить одну из своих ассоциаций группы?
например.
Если мои группы определяются как:
% groups
foo bar baz
Как я могу сделать его так, это только возвращается foo bar
без baz
?
Это возможно.
Проверьте этот код (допустимый C89, heh) я записал в 25 минимальных примерах Использования:
whitequark@forth:~/skipgroup$ ls
skipgroup.c
whitequark@forth:~/skipgroup$ gcc skipgroup.c -o skipgroup
whitequark@forth:~/skipgroup$ sudo chown root:root skipgroup
whitequark@forth:~/skipgroup$ sudo chmod u+s skipgroup
whitequark@forth:~/skipgroup$ groups
whitequark adm dialout cdrom plugdev lpadmin admin sambashare
whitequark@forth:~/skipgroup$ ./skipgroup
Usage: ./skipgroup <group to remove>
Must be SUID. Launches shell.
whitequark@forth:~/skipgroup$ ./skipgroup cdrom
$ id
uid=1000(whitequark) gid=1000(whitequark)
groups=4(adm),20(dialout),46(plugdev),104(lpadmin),114(admin),118(sambashare),1000(whitequark)
ПРЕДУПРЕЖДЕНИЕ ЭТОГО КОДА ЯВЛЯЕТСЯ SUID!
В то время как это отбрасывает полномочия, как Вы видите на выводе идентификатора, это МОЖЕТ БЫТЬ ОПАСНО. Dixi.
Я думаю, что это не возможно, так как файлы (и POSIX ACLs) могут указать субтрактивные права для определенных групп. Разрешение людям сбежать от группы затем было бы дырой в системе безопасности.
Конечно, если у Вас есть корневой доступ, Вы могли бы просто удалить себя из группы и сделать
sudo su - $USER