newgrp コマンドでグループを変更する

Linux に newgrp というグループを変更するコマンドがあります。

このコマンド、設定ファイルなどを変更するコマンドではなく su コマンドのように一時的に状態を変更するコマンドです。

まずグループについてですが、 Linux のユーザは 次の例のように複数のグループに属することができます。

$ id

uid=501(hoge) gid=502(develop) groups=497(manage),502(develop)

id コマンドで出力される groups は、補助グループと呼ばれる ユーザが属しているグループです。
gid の方は、一次グループと呼ばれ、ファイルを作成したときは このグループの権限が設定されます。

次のコマンドで、一次グループを変更することができます。

$ newgrp manage
$ id

uid=501(hoge) gid=497(manage) groups=497(manage),502(develop)

ファイルを作成するとグループが変わっているのがわかります。

$ ls -l

-rw-r--r--  1 hoge develop         0 2010-06-01 22:55 a.txt
-rw-r--r--  1 hoge manage          0 2010-06-01 22:56 b.txt

次の場合、newgrp するときにパスワードの入力が求められます。

  • ユーザにはパスワードがなくグループにはある
  • ユーザがグループのメンバーではなくグループにパスワードがある

su コマンド同様、root の場合はパスワードの入力が不要です。

newgrp すると su と同様に新しいシェルが起動します。

$ pstree

init┬
    ├
    ├sshd─sshd─bash─pstree

$ newgrp manage
$ pstree

init┬
    ├
    ├sshd─sshd─bash─bash─pstree

su コマンドと同様に環境を初期化するには "-" を指定します。

$ newgrp - manage

また、sg という newgrp とほぼ同機能のコマンドもあります。
newgrp との大きな違いとして、su コマンドと同様に "-c" オプションでコマンドを実行することができます。

$ sg --help
usage: sg group [[-c] command ]

ちなみに、sg コマンドは newgrp のシンボリックリンクのようです。

$ ls -l /usr/bin/newgrp /usr/bin/sg

-rwsr-xr-x  1 root root 27080 Mar  8  2004 /usr/bin/newgrp
lrwxrwxrwx  1 root root     6 Jan 20  2004 /usr/bin/sg -> newgrp

Google サイト内検索

Amazonアソシエイト