我需要测试存储库上的 Linux 组权限。如何在一个 shell 中临时删除我的一个组关联?
例如
如果我的组定义为:
% groups
foo bar baz
我怎样才能使它只返回foo bar
而不返回baz
?
答案1
有可能的。
查看此代码(有效的 C89,呵呵)我花了 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)
警告此代码无效!
虽然正如您在 id 的输出中看到的那样,它会降低权限,但它可能是危险的。Dixi。
答案2
我认为这是不可能的,因为文件(和 POSIX ACL)可以为某些组指定减性权限。允许人们逃离某个组将是一个安全漏洞。
当然,如果你有 root 权限,你可以简单地将自己从组中移除,然后执行
sudo su - $USER