このサイトのトラブルシューティング
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パスワードを持っている場合:
rootユーザーとしてインスタンスにSSH接続するか、suコマンドを使用してroot権限を取得します。- 所有権をリセットします。
rpm --setugids sudo - 権限をリセットします。
rpm --setperms sudo - 権限を検証します。
この出力は、
ls -l /usr/bin/*sudo*sudoのroot所有権およびsetuidビットを示しています。たとえば:-rwsr-xr-x. 1 root root 151424 ... /usr/bin/sudo - rootセッションを終了します。
sudoコマンドを使用して、rootユーザーに切り替えて問題が解決されたことを確認します。sudo -s
root SSHアクセスが無効で、rootパスワードがない場合:
sudoバイナリは使用できないため、これらのコマンドをインスタンスから直接opcユーザーとして実行することはできません。レスキュー・インスタンスを使用してアクセスを回復するには、次の手順を使用します。
- コンソールを使用して、影響を受けるインスタンスを停止します。ナビゲーション・メニューを開き、「コンピュート」を選択します。「コンピュート」で、「インスタンス」を選択します。リカバリする必要があるインスタンスを選択します。
- インスタンスからブート・ボリュームのデタッチを行います。「ストレージ」で、ブート・ボリュームを選択します。メニューから「リソースIDのコピー」を選択します。後で使用するためにリソースIDを書き留めます。メニューから「ブート・ボリュームのデタッチ」を選択します。ブート・ボリュームをデタッチすることを確認します。
- 影響を受けるインスタンスと同じ可用性ドメインおよびコンパートメントに、使用可能な最小のシェイプのOracle Linux OSプラットフォーム・イメージを含むレスキュー・インスタンスを作成します。
- デタッチされたブート・ボリュームをレスキュー・インスタンスにアタッチします。
- レスキュー・インスタンスの詳細の「ストレージ」の「アタッチされたブロック・ボリューム」で、「ブロック・ボリュームのアタッチ」を選択します。
- ボリュームOCIDを入力し、以前にコピーしたブート・ボリューム・リソースIDを指定します。
- 「読取り/書込み」アクセス・タイプの選択
- ボリュームを追加し、デバイスパスをメモします。
opcユーザーとしてレスキュー・インスタンスに接続します。- rootに切り替えます。
sudo -s - アタッチされたブロック・ボリュームのデバイスを特定します。
または
lsblkデバイスは、ブロック・ボリュームの追加時にメモしたデバイス・パスと一致します。fdisk -l - マウント・ポイントを作成し、ルート・パーティションをマウントします。次に例を示します。
mkdir /mnt/recovery mount /dev/sdb1 /mnt/recovery - マウント・システム・ディレクトリのバインド:
for dir in /dev /proc /sys /run; do mount --bind $dir /mnt/recovery$dir; done - マウントされているファイル・システムにchrootします。
chroot /mnt/recovery - 所有権をリセットします。
rpm --setugids sudo - 権限をリセットします。
rpm --setperms sudo - chrootを終了します。
exit - ファイルシステムをアンマウントします。
for dir in /dev /proc /sys /run; do umount /mnt/recovery$dir; done umount /mnt/recovery - レスキュー・インスタンスでrootを終了します。
exit - レスキュー・インスタンスを停止します。
- ブート・ボリュームはレスキュー・インスタンスからデタッチします。
- ブート・ボリュームをブート・ボリュームとして元のインスタンスに再アタッチします。
- 元のインスタンスを起動し、
opcユーザーとして接続します。 sudoコマンドを使用して、rootユーザーに切り替えて、問題が解決されたことを確認します。sudo -s