んじゃグループを確認しようと思ったらどうすんの?/etc/groupをcatするしかないの?と思って調べてみたら、ちゃんと確認方法ありました。
getent group hoge
getentコマンド自体はグループを確認するためのコマンドではなく、管理系のデータベース(groupとかpasswdとかhostsとか)から値を引っ張ってくるコマンドなのですが、単なるcatと違うのはネットワーク上の名前解決にも対応している事。なのでLDAP上に登録されてるユーザやグループ、DNSに問い合わせるべきホスト情報とかもgetentで取得できるのです。これは便利!
例えばgoogle.comの名前解決ならこんな感じ。
getent hosts google.com
nslookupでも同じ事出来るのですが、この手の(管理系の)データに同じインターフェースでアクセスできるのは分かりやすくてGood。sudo使った権限管理とかもやりやすそうですし。
で、これを調べているうちに面白いコマンドに出会いました。それがnewgrpコマンド。自分自身のプライマリグループを変えるためのコマンドです。
例えばこんなユーザがいたとしましょう。
$ id
uid=700(hogehoge) gid=700(hoge) 所属グループ=700(hoge),701(fuga)
uid=700(hogehoge) gid=700(hoge) 所属グループ=700(hoge),701(fuga)
このユーザがファイルを作成したら、当然ですが所有者はhogehoge:hogeになります。
$ touch hogefile
$ ls -l hogefile
-rw-r--r-- 1 hogehoge hoge 0 11月 22 10:40 hogefile
$ ls -l hogefile
-rw-r--r-- 1 hogehoge hoge 0 11月 22 10:40 hogefile
ここで、fugaグループにログイン(プライマリグループの変更)します。
$ newgrp fuga
$ id
uid=700(hogehoge) gid=701(fuga) groups=700(hoge),701(fuga)
$ id
uid=700(hogehoge) gid=701(fuga) groups=700(hoge),701(fuga)
プライマリグループがfugaに変更されている事が分かります。
もちろんファイルを作成したら、
$ touch fugafile
$ ls -l fugafile
-rw-r--r-- 1 hogehoge fuga 0 Nov 22 10:42 fugafile
$ ls -l fugafile
-rw-r--r-- 1 hogehoge fuga 0 Nov 22 10:42 fugafile
と、hogehoge:fugaが所有者になります。
権限を元に戻すには、exitすればOKです。(グループにログインしていたので)
さらに、自分の所属グループ以外であってもログインする事が可能です。
ここではpiyoというグループにログインしてみましょう。
$ newgrp piyo
パスワード:
$ id
uid=700(hogehoge) gid=702(piyo) groups=700(hoge),701(fuga),702(piyo)
パスワード:
$ id
uid=700(hogehoge) gid=702(piyo) groups=700(hoge),701(fuga),702(piyo)
自分が所属していないグループへのログインにはパスワードが必要になります。パスワードの設定されていないグループへのログインは出来ません。
では、この状態でファイルを作成してみましょう。
$ touch piyofile
$ ls -l piyofile
-rw-r--r-- 1 hogehoge piyo 0 Nov 22 10:46 piyofile
$ ls -l piyofile
-rw-r--r-- 1 hogehoge piyo 0 Nov 22 10:46 piyofile
すごーく当たり前の話ですが、hogehoge:piyoを所有者とするファイルが作成されました。
さて、ここで「グループに対するパスワードって何ぞ?」という疑問が湧いてくるかと思うのですが、これもちゃんとコマンドが用意されていました。
gpasswd piyo
普通はグループへのパスワード設定なんてしないですよね…newgrp知らないと意味分かんないですし。
ここまでグループがユーザと同じように扱えるなら、suのグループ版だってあるんじゃね?と思って調べたらやっぱりありました。
その名もsgコマンド。(超そのまんま)
$ sg fuga -c "touch sgfugafile"
$ ls -l sgfugafile
-rw-r--r-- 1 hogehoge fuga 0 11月 22 10:59 sgfugafile
$ ls -l sgfugafile
-rw-r--r-- 1 hogehoge fuga 0 11月 22 10:59 sgfugafile
これはもう解説不要ですね。- をつけると環境の再初期化をするってのもsuと同じなのですが、環境を設定してる.profileなり.bashrcなりってユーザ単位で設定されますよね?グループの場合 - がどう効いてくるのか今ひとつピンと来ていないのですが…まぁいい事にします。
この辺きちんと意識して使うと、ついつい甘くなりがちな管理者権限の局所化ってのがよりうまい感じに出来るのかもしれません。ちょっと色々試してみたいなこれ。
以下のサイトを参考にさせていただきました。(ありがとうございます!)
Linux グループ一覧の確認と/etc/group ファイル
http://kazmax.zpp.jp/linux_beginner/etc_group.html
getentコマンドでユーザ情報を確認
OpenGroove : http://open-groove.net/linux-command/getent/
Studio ODIN - blog風小ネタ集 > newgrp コマンドでグループを変更する
http://www.odin.hyork.net/write/write0311.html