はじめに
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などを指定していきます。
このページの下部にAdvanced optionsを設定する箇所があり、その中にUser dataという項目があります。
ここに、先ほど作成したcloud-configをペースト、もしくはファイルをドラッグ&ドロップします。
[Create virtual server]を押すと、仮想サーバーのオーダーが完了します。
数十秒で仮想サーバーがRunning状態になるので、CLIでアクセスしてみましょう。
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を利用した初期設定を試してみました。