はじめに
UNIX 系の OS では、ログイン中のユーザの所属グループを変更した場合、一度ログアウトしなければ変更が反映されません。
しかし、あるコマンドを使えば再ログインせずにログイン中のユーザの所属グループを変更し、その変更を反映させる方法があります。
この記事では、その方法を紹介します。
検証環境
| |
ログイン中のユーザの所属グループを変更しても直ちに設定が反映されない
実際に Linux 環境を使って検証してみます。
準備 : sudo 実行可能なテストユーザーを作成
最終的に以下のようなユーザーgenzouwを作成します。
- ユーザー :
genzouw - グループ :
genzouw - セカンダリグループ :
sudo
以下のコマンドを順番に実行していきます。
| |
上記のコマンドを実行すると、genzouwユーザーが作成されました。
sudo 実行可能なユーザーでセカンダリグループを変更
今度は genzouw ユーザーでセカンダリグループを追加してみます。
何でもいいで www-data グループをセカンダリグループに追加してみます。
| |
上記のコマンドを実行すると、genzouw ユーザーのセカンダリグループに www-data グループが追加されました。
この状態で id コマンドを実行すると、以下のようになります。
| |
先程セカンダリグループに追加したはずの www-data が見つかりません。
これを解消するための方法としてよく知られているのは、genzouw ユーザーをログアウトして再度ログインすることです。
| |
再度ログインした後、id コマンドを実行すると、以下のようになります。
| |
今度は www-data グループが表示されました。
このように、セカンダリグループを追加した後は、ログインしなおす必要があります。
ログインせずにセカンダリグループへのグループ追加を反映する方法
Linux では、newgrp コマンドを使用することで、ログインせずにセカンダリグループへのグループ追加を反映できます。
先ほどログインした操作の手前の状態まで戻ってみます。
| |
次に、newgrp コマンドを使用して、www-data グループを追加します。
| |
id コマンドを実行すると、以下のようになります。
| |
今度は www-data グループが表示されました。
newgrp を使ったときの問題点
一見便利そうな newgrp コマンドですが、注意しなければならないことがあります。
今回 newgrp コマンドを使用して www-data グループへの追加が直ちに行えたのは、 genzouw ユーザーが既に www-data に所属していたためです。
もし所属していないグループを指定した場合には、パスワードの入力を求められます。
| |
また、仮にパスワードを知っていたとしても newgrp コマンドを使用してグループを追加した場合、次回ログインしたときには追加したグループが解除されてしまいます。
更に、 newgrp コマンドの実行が成功すると、サブプロセスで新たにログインし直されるため、 exit しても同じようなシェルが表示されます。
| |
まとめ
newgrp コマンドを使用してセカンダリグループの追加を永続的に反映できません。
また、 exit コマンドを実行しても、同じようなシェルが表示されます。
そのため、結局は exit した後、再度ログインし直すのが確かな手順となります。
ひとこと
紹介しておきながら、ネタエントリとなってしまいました。
こういう方法もあるよ、ということを知っておくと便利かもしれません。