Назад | Перейти на главную страницу

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

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

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

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

Как?

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