Executar um comando de outro grupo

2

No Linux, eu tenho o seguinte id :

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

Gostaria de alterar meu código efetivo para git , para que tudo que eu crie pertencerá a gid group. Por exemplo. touch testfileowner=username group=git

Como?

    
por kolypto 24.07.2012 / 11:50

3 respostas

5

Você pode alterar seu grupo atual usando o comando newgrp :

~$ 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

Os grupos podem ser bloqueados ou ter uma senha. Veja a manpage para mais detalhes.

man newgrp
    
por 24.07.2012 / 14:00
2

Se você tem permissões sudo adequadas, você pode executar um shell como o novo grupo

username    ALL=(:git) /bin/bash

isso permite que o nome de usuário execute /bin/bash como 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

Você pode até usar exec para substituir seu shell atual pelo que está sendo executado como o grupo git

exec sudo -g git /bin/bash
    
por 24.07.2012 / 12:24
0

Globalmente, você não pode - não sem alterar o grupo principal do usuário.

Mas em uma base por diretório, isso é trivialmente alcançado configurando o bit setgid no diretório, e chown ing disse o diretório para o grupo correto.

Qualquer coisa criada abaixo do diretório mencionado herdará o gid, independentemente do usuário que o criou.

    
por 24.07.2012 / 11:55