【CentOS】sudo権限を持つユーザーにパスワード無しで変更する方法

インフラ

こんにちは。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権限を持つユーザーに変更できる』というグループを新しく作成し、一般ユーザーはそちらに所属させるようにします。

今回はwebuserwheelグループに、nishinawebadminsというグループに所属させたいと思います。

サーバーログイン

グループ・ユーザー作成は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

リモートサーバーに公開鍵認証でssh接続するための手順

まとめ

以上で「root権限を持たない一般ユーザーでサーバーにログインし、sudo権限を持つユーザーにスイッチしてからサーバー上で作業する」という環境を構築する手順の紹介を終わります。

今回のまとめ
  • sudo権限の管理はvisudoで行う
  • ユーザーの作成はuseraddで行う
  • 所属グループの変更はusermodで行う
  • ユーザーの所属グループの確認はidで行う

この記事がいいなと思いましたらツイッター(@nishina555)のフォローもよろしくお願いします!