web-dev-qa-db-ja.com

別のグループからコマンドを実行する

Linuxでは、次のidがあります。

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

有効なgidをgitに変更して、作成するすべてのものがgidグループに属するようにします。例えば。 touch testfileowner=username group=gitを与えます

どうやって?

2
kolypto

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 newgrp
5
basvdlei

適切なSudo権限がある場合は、新しいグループとしてシェルを実行できます

username    ALL=(:git) /bin/bash

これにより、ユーザー名は/bin/bashusername: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
2
user9517

グローバルに、ユーザーのプライマリグループを変更せずに行うことはできません。

ただし、ディレクトリごとに、これはディレクトリのsetgidビットを設定し、そのディレクトリを正しいグループにchowningすることで簡単に実現できます。

上記のディレクトリの下に作成されたものはすべて、それを作成したユーザーに関係なく、gidを継承します。

0
adaptr