Red Hat系のシステム管理者向け資格をこれから取る方を救援する

# 目次

[1.はじめに](#はじめに)
[2.用意するもの](#用意するもの)
[3.ここ読めワンワン](#ここ読めワンワン)
[4.おわりに](#おわりに)

# はじめに

Red Hat系のシステム管理者向け資格をこれから取得予定の貴方に本記事を捧げる。

これだけは言っておく。受験料の約6万円を棒に振らないためにも、貴方は本記事を読むべきだ。
なお、正攻法でRed Hat社のウン万円もするセミナーを受け、公式のテキストを得ている方は、回れ右しても恐らく影響は無い。

私のこの怒りが冷めやらぬうちに、Red Hat社のシステム管理者ガイドを基に、某試験の罠について共有させていただく。

# 用意するもの

* CentOS 7、もしくは、RHEL7/8の仮想マシン  
  検証OSはCentOS 7 x86_64 7.6.1810
* Red Hat系の管理者向け資格を取りたい気持ち

# ここ読めワンワン

本手順を覚えていただくことで、rootパスワードの変更方法が分からず、試験開始・即帰宅する被害者を削減することが、本記事の狙いです。

なお本手順は、Red Hat社の[システム管理者のガイド](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/system_administrators_guide/sec-terminal_menu_editing_during_boot#proc-Resetting_the_Root_Password_Using_rd.break)ほぼそのままです。
そのうち`手順25.7 rd.breakを使用したrootパスワードのリセット方法`にスポットを当てて、書き下しています。
ただし、<font color="Red">**某資格の解答において不要と思われる説明は省いている**</font>ので、公式の全手順が気になる方は元記事まで。

1. ログイン可能な状態の仮想マシンを用意する
2. 仮想マシンを起動し、GRUB2ブート画面で`e`キーを押して編集画面に入る。
![スクリーンショット 2019-08-30 15.54.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47794/de338989-c7e3-0024-69db-a99674c75280.png "GRUB2ブート画面")
![スクリーンショット 2019-08-30 15.55.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47794/41051d00-b49d-74df-9103-eb9e19c88d4e.png "/boot/grub/grub.cfgその1")

    >**重要**
    >システムメッセージを有効にするには、rhgb パラメータと quiet のパラメータを削除(<font color="Red">**未検証、公式手順より**</font>)。

3. x86-64 BIOSベースの場合は`linux16`行、UEFIの場合は`linuxefi`行の末尾に`rd.break`パラメータを追加し、`Ctrl`+`x`で再起動。
![スクリーンショット 2019-08-30 15.57.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47794/802e4300-be23-39cc-8f60-15e9d89d046e.png "/boot/grub/grub.cfgその2")
![スクリーンショット 2019-08-30 15.59.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47794/8c2b69c5-5ae5-3d4f-dab9-dd8ef940d1ad.png "再起動後画面")
4. ファイルシステムはReadOnlyな`/sysroot/`がマウントされる。rootパスワードを変更するため、Writableで再マウント。
![スクリーンショット 2019-08-30 16.01.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47794/bb99073d-aeea-4074-b134-06007764a6a0.png "remount command")
5. ファイルシステムの`root`を変更すると、プロンプトが[Bourne shell (/bin/sh)](https://ja.wikipedia.org/wiki/Bourne_Shell)に変わる(骨じゃなかったんだ...)。
![スクリーンショット 2019-08-30 16.02.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47794/b4be4571-4e06-e27a-f1c4-5ab9909b060e.png "Bourne shell")
6. `passwd`コマンドで`root`パスワードを変更。
![スクリーンショット 2019-08-30 16.03.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47794/a4c776f9-5f2e-7813-20d1-ca09e7a019ba.png "passwd command文字化け")
7. (余談)`export LC_ALL=C`でロケールを変更したら文字化けが解消できる。メッセージが無駄に長かったのは、`password1`なんて脆弱なパスワードにしていたため笑
![スクリーンショット 2019-08-30 16.04.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47794/58d77a3c-ecb8-7560-0af1-fbaf34b8e8aa.png)
8. CentOS/RHEL7はデフォルトEnforcingでSELinuxを利用するため、`passwd`コマンドで新しく作成された`/etc/shadow`ファイルのコンテキストを再ラベルする必要がある。次回ブート時にコンテキストを再ラベルするため、`.autorelabel`を作成。
![スクリーンショット 2019-08-30 16.11.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47794/2a0ac6dc-003e-d9f3-5af4-00add3cbd63a.png "")
9. ファイルシステムをReadOnlyで再マウント(<font color="Red">**未検証、公式手順より**</font>)。
公式で詳細な説明はなかったが、`/sysroot/`を手順4でWritableに再マウントした状態を元に戻すため、雑にファイルシステム全体をマウントし直しているように見える。ファイルシステムのアクセス権的に本手順はやっておいたほうが無難だと思われる。
ファイルシステムに詳しい方、お時間あれば本手順の必要性をご教示下さい。

    ```
    sh-4.2# mount -o remount,ro /
    ```

10. `exit`コマンドを2度実行して初期化プロセスが再開し、仮想マシンを再起動。
![スクリーンショット 2019-08-30 16.14.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47794/1dcfc128-bca9-6b37-69cf-2078c4041c88.png "再起動")
![スクリーンショット 2019-08-30 16.18.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47794/386d98f3-eac6-841c-acce-75e6caffe97e.png "GUI画面")

    >**注記**
    >二度目の`exit`コマン実行時に再起動が始まる。
    >ファイル数が多いほどSELinuxコンテキストの再ラベルには時間がかかる。
    >再ラベルが完了すると、システムは自動的に再起動する。

+α. 下記コマンドにて、SELinuxポリシーの強制を再度有効化し、ポリシーの強制状態を確認するが吉(<font color="Red">**未検証、公式手順より**</font>)。

    ```
    ~]# setenforce 1
    ~]# getenforce
    Enforcing
    ```

# おわりに

公式ドキュメントとググリでの独学のみでは、Red Hat社の罠にかかることを身を持って体感しました。
また、今となってはうろ覚えだが、本手順を含む(?)公式のテキストらしきものを持っていた他の受験者は、サクサク進めているように見えたし、私のように試験開始後に即諦めていなかった記憶があります。

正直、公式ドキュメントを1から読み進めたとして、基本的にこの様な手順に巡り合わないと思います。公式（当時）では、インストールディスクによるパスワード変更を推奨してるにもかかわらず、こんな手順から試験が始まるし、そもそもサーバに入れなくなるようなアホなシステム管理者や引き継ぎをしない担当者はいないよね…いないよな？！

ただ、システム管理者としては、不慮の事故などサーバに入れなくなる時もあるだろうし、色んな方法は知っておくべきという学びは得られました。
が、絶対許さんし、今後centosしか使わんからな。

願わくば、本記事を読んだRed Hat系の管理者向け資格を取ろうと思っている方が、1人でも多く罠から救われれば幸いです。
何かお気づきの点があれば、ご指摘をお願いします。

### 参考資料

* [Root Users - How To Reset Root User Pass](https://www.rootusers.com/how-to-reset-root-user-password-in-centos-rhel-7/)
* [CentOS7 RHEL7 rootパスワード変更(rd.break利用)](https://qiita.com/cyberblack28/items/9ba9ff301ec6fba1e5f8)
* [マイナビニュース - 5分未満でrootパスリセット](https://news.mynavi.jp/article/20180503-root_pwchange/)
* [Stack Overflow - Linux difference between root shell “#” and “sh-4.2 #”](https://stackoverflow.com/questions/15015696/linux-difference-between-root-shell-and-sh-4-2)

### 2024/1/9追記

- 当時怒りのままに書き殴った恥ずかしい文面を一部削除/修正
- 目次のリンクを修正