Выполнить команду из другой группы

В Linux у меня есть следующее id:

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

Я хотел бы изменить свой эффективный гид на git так что все, что я создаю, будет принадлежать gid группа. Например touch testfile дает owner=username group=git

Как?

3 ответа

Решение

Вы можете изменить свою текущую группу, используя команду 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

Группы могут быть заблокированы или иметь пароль. Смотрите man-страницу для более подробной информации.

man newgrp

Если у вас есть подходящие разрешения sudo, вы можете запустить оболочку как новую группу

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 для замены вашей текущей оболочки на ту, что работает как группа git

exec sudo -g git /bin/bash

Во всем мире вы не можете - не без изменения основной группы пользователя.

Но для каждого каталога это достигается тривиально, устанавливая в каталоге бит setgid, и chownуказав указанный каталог в правильной группе.

Все, что создано под указанным каталогом, будет наследовать gid, независимо от того, кто его создал.

Другие вопросы по тегам