こんにちは。Enjoy IT Life管理人の仁科(@nishina555)です。
チーム開発の現場では『root権限を持たない一般ユーザーでサーバーにログインし、sudo権限を持つユーザーにスイッチしてからサーバー上で作業する』という手法が一般的です。
例えばsudo権限を持つユーザーをwebuser
とする場合、sudo su - webuser
もしくはsu - webuser
でユーザー変更をします。
sudo su - webuser
の場合はsudo
を実行する一般ユーザーのパスワードが、su - webuser
の場合はwebuser
のパスワードが必要となります。
sudo su - webuser
であれば、webuser
のパスワードを知らなくてもユーザー変更ができるのでセキュアですが、sudoを一般ユーザーでも実行できてしまうという問題点があります。
そこで今回は『ユーザー変更の時のみsudo権限が与えられた一般ユーザー』および『sudo権限をもつユーザー』の作成手順について紹介します。
なお、検証サーバーはConoHaのVPS、検証OSはCentOS8.1を利用します。
目次
実装の方針
CentOSにはwheel
と呼ばれるsudo権限を持つグループがあらかじめ用意されています。そこでsudo権限を持つユーザーを新しく作成し、wheel
グループに所属させるようにします。
また、『sudo権限を持つユーザーに変更できる』というグループを新しく作成し、一般ユーザーはそちらに所属させるようにします。
今回はwebuser
をwheel
グループに、nishina
をwebadmins
というグループに所属させたいと思います。
サーバーログイン
グループ・ユーザー作成はrootユーザーで実行します。
$ ssh -l root [IPアドレス]
グループを作成・編集する
まずは各ユーザーが所属するグループの作成とsudo権限の編集を行います。
一般ユーザー用グループ
一般ユーザーが所属するwebadmins
のグループを作成します。
[root]
### グループ作成
$ groupadd webadmins
### グループの確認
$ getent group webadmins
→ 結果が表示されればOK
次にsudoの設定ファイルである/etc/sudoers
の編集を行います。
ファイルはvisudo
コマンドで編集します。
[root]
$ visudo
### webuserへの変更のみパスワードなしで実行できるように許可
%webadmins ALL=(ALL) NOPASSWD: /bin/su - webuser, /bin/su webuser
sudo実行用グループ
wheel
グループ自体はすでに存在しているため、グループ作成はスキップし、/etc/sudoers
の編集を行います。
visudo
を実行し、以下の%wheel
から始まる行をアンコメントします。
[root]
$ visudo
-#%wheel ALL=(ALL) ALL
+%wheel ALL=(ALL) ALL
もし、パスワード不要でsudoを実行させたい場合は以下の行をアンコメントします。
-#%wheel ALL=(ALL) NOPASSWD: ALL
+%wheel ALL=(ALL) NOPASSWD: ALL
ユーザー作成
ユーザーを作成し、先ほど用意したグループに所属させます。
一般ユーザー
[root]
### ユーザー作成
$ useradd -m nishina
### パスワード変更
$ passwd nishina
### webadminsグループにnishinaを追加
$ usermod -G webadmins nishina
# -G: グループへの追加(上書き)
### ユーザー情報確認
$ id nishina
→ webadminsグループに所属していればOK
uid=1000(nishina) gid=1001(nishina) groups=1001(nishina),1000(webadmins)
sudo権限付きユーザー作成
[root]
#### ユーザー作成
$ useradd -m webuser
### パスワード変更
$ passwd webuser
### ユーザー情報確認
$ id webuser
### wheelグループにwebuserを追加
$ usermod -G wheel webuser
# -G: グループへの追加(上書き)
### 確認
$ id webuser
→ wheelグループに所属していればOK
uid=1001(webuser) gid=1002(webuser) groups=1002(webuser),10(wheel)
動作確認
それぞれのユーザーに適切な権限が付与されているか確認します。
[root]
$ su - nishina
[nishina]
$ sudo su - webuser
→ webuserに変更できればOK
[webuser]
$ sudo su - root
→ rootに変更できればOK
一般ユーザーでSSH接続ができるか確認しておきましょう。
$ ssh -l nishina [IPアドレス]
→ サーバーに接続できればOK
まとめ
以上で「root権限を持たない一般ユーザーでサーバーにログインし、sudo権限を持つユーザーにスイッチしてからサーバー上で作業する」という環境を構築する手順の紹介を終わります。
- sudo権限の管理はvisudoで行う
- ユーザーの作成はuseraddで行う
- 所属グループの変更はusermodで行う
- ユーザーの所属グループの確認はidで行う
この記事がいいなと思いましたらツイッター(@nishina555)のフォローもよろしくお願いします!