6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IBM CloudAdvent Calendar 2024

Day 10

【IBM Cloud】cloud-initを使ってrootユーザーを無効化した仮想サーバーを作成する

Last updated at Posted at 2024-12-10

はじめに

IBM Cloudの仮想サーバーはデフォルトでrootログインが可能ですが、セキュリティ強化のため、rootユーザーを無効化して別のユーザーとして利用したいというニーズがあるかと思います。

IBM CloudのVPCはcloud-initを利用して仮想サーバーを構成しており、オーダー時に、このcloud-initにユーザーデータを送り込むことができます。
今回はこの機能を使って、IBM CloudでRed Hat Enterprise Linux 9.x の仮想サーバーをオーダーする際、以下の設定を行うcloud-config(YAML形式)の適用を試してみます。

  • rootユーザーのSSHログインを禁止する
  • root以外のユーザーを追加する

cloud-initは、クラウド環境や仮想マシン(VM)のインスタンス初期設定を自動化するためのOSSです。インスタンスが起動する際に実行され、設定やカスタマイズを行います。

1. cloud-configの作成

cloud-initで使用できる書式についてはこちらの記事で分かりやすく解説されています。

今回はcloud-configの以下のセクションに必要な情報を指定していきます。

  • users:システムユーザーの作成・設定や、SSH 公開鍵の登録やパスワード設定
  • write_files:特定のファイルを作成または編集
  • runcmd:起動後に実行するコマンドを指定

この他にも、必要なソフトウェアパッケージをインストールするpackageセクションや、言語やロケールを設定できるlocaleセクションなどを設定することができます。

#cloud-config
users:
  - name: foobar
    groups: [wheel]  # sudo 権限を付与
    shell: /bin/bash
    sudo: ["ALL=(ALL) NOPASSWD:ALL"]  # パスワードなしでsudoを使用可能
    ssh_authorized_keys:
      - "ssh-rsa AAAAB3Nza...SSH公開鍵..."  # foobarユーザー用の公開鍵

disable_root: true  # rootログインを無効化
ssh_pwauth: false  # SSHでのパスワード認証を無効化

write_files:
  - path: /etc/ssh/sshd_config.d/disable-root.conf
    content: |
      PermitRootLogin no  # rootのSSHログインを無効化
      PasswordAuthentication no  # パスワード認証を無効化

runcmd:
  - systemctl restart sshd  # sshdの設定変更を反映

2. IBM Cloudの仮想サーバー注文画面でcloud-configを適用

IBM Cloud VPC(Virtual Private Cloud)で仮想サーバーをオーダーする画面です。
仮想サーバーをデプロイする場所や、コア/メモリ、OSなどを指定していきます。
スクリーンショット 2024-12-09 23.27.16.png

このページの下部にAdvanced optionsを設定する箇所があり、その中にUser dataという項目があります。
ここに、先ほど作成したcloud-configをペースト、もしくはファイルをドラッグ&ドロップします。
スクリーンショット 2024-12-09 23.28.04.png

[Create virtual server]を押すと、仮想サーバーのオーダーが完了します。
数十秒で仮想サーバーがRunning状態になるので、CLIでアクセスしてみましょう。
スクリーンショット 2024-12-10 0.19.07.png

3. CLIでsshログインテスト

まず、cloud-configで指定したユーザー”foobar”としてログインできるか確認します。
このIBM Cloudアカウントでは仮想サーバーにはVPN経由でアクセスするルールになっているため、以下のコマンドでログインを試みていますが、仮想サーバーに浮動IP(グローバルIP)を付与している場合には、ssh <ユーザー名>@<グローバルIP>でログインできます。

ssh -i /Users/.../key-nakayama_rsa.prv foobar@10.xx.xx.xx

結果:foobarというユーザーでログインできました!

~ % ssh -i /Users/.../key-nakayama_rsa.prv foobar@10.xx.xx.xx
The authenticity of host '10.xx.xx.xx (10.xx.xx.xx)' can't be established.
ED25519 key fingerprint is SHA256:6go/wyh+8Vq2zHOZ0egBzkgbWXvA9nM9jEwUUFT9uT0.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.xx.xx.xx' (ED25519) to the list of known hosts.
Activate the web console with: systemctl enable --now cockpit.socket

Register this system with Red Hat Insights: insights-client --register
Create an account or view all your systems at https://red.ht/insights-dashboard
[foobar@cloud-init-test ~]$

次に、ユーザー"foobar"でsudoを使用できるかも確認します。
「/root」ディレクトリは、スーパーユーザーしか閲覧できないディレクトリです。
sudoを使用していない場合と使用した場合の両方でls /rootが実行できるか試してみます。

結果:sudoを使用してコマンド実行した場合のみ、/rootディレクトリを閲覧できました。

[foobar@cloud-init-test ~]$ ls /root
ls: cannot open directory '/root': Permission denied
[foobar@cloud-init-test ~]$ sudo ls /root
redhat_subscription.log

最後に、rootユーザーでログインしようとした時の挙動も確認します。
結果:Permission deniedでログインが拒否されていることがわかります。

 ~ % ssh -i /Users/.../key-nakayama_rsa.prv root@10.xx.xx.xx
root@10.xx.xx.xx: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

以上、IBM CloudでRHEL OSの仮想サーバーをオーダーする際の、cloud-initを利用した初期設定を試してみました。

4. 参考

6
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?