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