执行另一个组的命令

执行另一个组的命令

在Linux中,我有以下内容id

uid=1005(username) gid=1005(username) groups=1005(username),33(www-data),1002(git)

我想将我的有效 gid 更改为,git以便我创建的所有内容都属于gid该组。touch testfile例如owner=username group=git

如何?

答案1

您可以使用新组 命令:

~$ id
uid=1000(bas) gid=1000(bas) groups=1000(bas),24(cdrom)
~$ newgrp - cdrom
~$ id
uid=1000(bas) gid=24(cdrom) groups=1000(bas),24(cdrom)
~$ touch foo && ls -l foo
-rw-r--r-- 1 bas cdrom 0 Jul 24 13:58 foo

群组可以被锁定或设置密码。请参阅手册页了解更多详细信息。

man newgrp

答案2

如果你具有适当的 sudo 权限,则可以以新组身份运行 shell

username    ALL=(:git) /bin/bash

/bin/bash这允许用户名运行username:git

id
uid=1005(test) gid=1005(test) groups=1005(test)

touch testfile
ls -l testfile
-rw-rw-r-- 1 test test 0 Jul 24 11:19 testfile

sudo -g git /bin/bash
id
uid=1005(test) gid=1003(git) groups=1005(test)
rm testfile
touch testfile
-rw-r--r-- 1 test git 0 Jul 24 11:21 testfile

你甚至可以使用 exec 将当前 shell 替换为以 git 组身份运行的 shell

exec sudo -g git /bin/bash

答案3

从全局来看,如果不改变用户的主要组,您就不能这样做。

但在每个目录的基础上,这可以通过在目录上设置 setgid 位并将chown所述目录归到正确的组来轻松实现。

在该目录下创建的任何内容都将继承 gid,无论创建它的用户是谁。

相关内容