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