このサイトのトラブルシューティング

Oracle Cloud Infrastructure上のOracle Linuxインスタンスで権限の問題を解決するには、次の情報を確認します。

sudo to Root Userが「sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit」というエラーで失敗する。

opcユーザーとしてOracle Linuxインスタンスに接続し、rootユーザーに切り替えようとすると、次のエラーが表示されます。

[opc@<oracle-linux-instance-name> ~]$ sudo su - 

sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set

この問題は、ユーザーまたはプロセスがsudoバイナリの所有権および権限を変更し、/usr/bin/sudoファイルをrootが所有する必要があるため、バイナリを実行できない場合に発生します。

この問題を修正するには、sudoパッケージ内のファイルのユーザーおよびグループの所有権および権限を、RPMデータベースで定義されている元の値にリセットする必要があります。

rootユーザーとしての直接SSHログインは、セキュリティ上の理由から、Oracle Cloud Infrastructureインスタンスではデフォルトで無効になっています。ただし、インスタンスでroot SSHアクセスが明示的に有効になっている場合、またはrootパスワードを設定し、suを使用してrootアカウントに直接アクセスできる場合は、問題を直接修正できます。

root SSHが有効になっているか、rootパスワードを持っている場合:

  1. rootユーザーとしてインスタンスにSSH接続するか、suコマンドを使用してroot権限を取得します。
  2. 所有権をリセットします。
    rpm --setugids sudo
  3. 権限をリセットします。
    rpm --setperms sudo
  4. 権限を検証します。
    ls -l /usr/bin/*sudo*
    この出力は、sudoのroot所有権およびsetuidビットを示しています。たとえば:
    -rwsr-xr-x. 1 root root 151424 ... /usr/bin/sudo
  5. rootセッションを終了します。
  6. sudoコマンドを使用して、rootユーザーに切り替えて問題が解決されたことを確認します。
    sudo -s

root SSHアクセスが無効で、rootパスワードがない場合:

sudoバイナリは使用できないため、これらのコマンドをインスタンスから直接opcユーザーとして実行することはできません。レスキュー・インスタンスを使用してアクセスを回復するには、次の手順を使用します。

  1. コンソールを使用して、影響を受けるインスタンスを停止します。ナビゲーション・メニューを開き、「コンピュート」を選択します。「コンピュート」で、「インスタンス」を選択します。リカバリする必要があるインスタンスを選択します。
  2. インスタンスからブート・ボリュームのデタッチを行います。「ストレージ」で、ブート・ボリュームを選択します。メニューから「リソースIDのコピー」を選択します。後で使用するためにリソースIDを書き留めます。メニューから「ブート・ボリュームのデタッチ」を選択します。ブート・ボリュームをデタッチすることを確認します。
  3. 影響を受けるインスタンスと同じ可用性ドメインおよびコンパートメントに、使用可能な最小のシェイプのOracle Linux OSプラットフォーム・イメージを含むレスキュー・インスタンスを作成します。
  4. デタッチされたブート・ボリュームをレスキュー・インスタンスにアタッチします。
    1. レスキュー・インスタンスの詳細の「ストレージ」「アタッチされたブロック・ボリューム」で、「ブロック・ボリュームのアタッチ」を選択します。
    2. ボリュームOCIDを入力し、以前にコピーしたブート・ボリューム・リソースIDを指定します。
    3. 「読取り/書込み」アクセス・タイプの選択
    4. ボリュームを追加し、デバイスパスをメモします。
  5. opcユーザーとしてレスキュー・インスタンスに接続します。
  6. rootに切り替えます。
    sudo -s
  7. アタッチされたブロック・ボリュームのデバイスを特定します。
    lsblk
    または
    fdisk -l
    デバイスは、ブロック・ボリュームの追加時にメモしたデバイス・パスと一致します。
  8. マウント・ポイントを作成し、ルート・パーティションをマウントします。次に例を示します。
    mkdir /mnt/recovery
    mount /dev/sdb1 /mnt/recovery
  9. マウント・システム・ディレクトリのバインド:
    for dir in /dev /proc /sys /run; do mount --bind $dir /mnt/recovery$dir; done
  10. マウントされているファイル・システムにchrootします。
    chroot /mnt/recovery
  11. 所有権をリセットします。
    rpm --setugids sudo
  12. 権限をリセットします。
    rpm --setperms sudo
  13. chrootを終了します。
    exit
  14. ファイルシステムをアンマウントします。
    for dir in /dev /proc /sys /run; do umount /mnt/recovery$dir; done
    umount /mnt/recovery
  15. レスキュー・インスタンスでrootを終了します。
    exit
  16. レスキュー・インスタンスを停止します。
  17. ブート・ボリュームはレスキュー・インスタンスからデタッチします。
  18. ブート・ボリュームをブート・ボリュームとして元のインスタンスに再アタッチします。
  19. 元のインスタンスを起動し、opcユーザーとして接続します。
  20. sudoコマンドを使用して、rootユーザーに切り替えて、問題が解決されたことを確認します。
    sudo -s