Linuxでユーザの情報を確認しようと思ったら
idコマンド。
んじゃグループを確認しようと思ったらどうすんの?
/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)
このユーザがファイルを作成したら、当然ですが所有者は
hogehoge:hogeになります。
$ touch 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)
プライマリグループが
fugaに変更されている事が分かります。
もちろんファイルを作成したら、
$ touch 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)
自分が所属していないグループへのログインにはパスワードが必要になります。パスワードの設定されていないグループへのログインは出来ません。
では、この状態でファイルを作成してみましょう。
$ touch 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
これはもう解説不要ですね。
- をつけると環境の再初期化をするってのも
suと同じなのですが、環境を設定してる
.profileなり
.bashrcなりってユーザ単位で設定されますよね?グループの場合
- がどう効いてくるのか今ひとつピンと来ていないのですが…まぁいい事にします。
この辺きちんと意識して使うと、ついつい甘くなりがちな管理者権限の局所化ってのがよりうまい感じに出来るのかもしれません。ちょっと色々試してみたいなこれ。
以下のサイトを参考にさせていただきました。(ありがとうございます!)
Linux グループ一覧の確認と/etc/group ファイルhttp://kazmax.zpp.jp/linux_beginner/etc_group.htmlgetentコマンドでユーザ情報を確認OpenGroove :
http://open-groove.net/linux-command/getent/Studio ODIN - blog風小ネタ集 > newgrp コマンドでグループを変更するhttp://www.odin.hyork.net/write/write0311.html