bashからzshに切り替えた後にroot権限を取得する方法は?

bashからzshに切り替えた後にroot権限を取得する方法は?

奇妙なことに、bashからzshに切り替えた後、rootにアクセスできません。

normalusername私は通常、権限の低い一般ユーザー(ユーザー名は)としてログインし、「su」を使用してrootとしてログインします。みんな大丈夫です。ただし、ルートシェルをbashからzshに切り替えた後にsuを介してログインしようとすると、次の結果が表示されます。

normalusername@(none):~$ su
Password: (enter the correct password)
Cannot execute zsh: No such file or directory

MacでrootとしてSSH経由で直接接続すると、次のような結果が表示されます。

localhost:~ myname$ ssh -lroot 106.186.120.20
[email protected]'s password: (enter the correct/incorrect password)
Permission denied, please try again.

正しいパスワードを入力したかどうかにかかわらず、引き続き表示されます。

そのため、意図的に一般ユーザーに間違ったパスワード「su」を入力して、次のような結果を得ました。

normalusername@(none):~$ su
Password: (entered a wrong password and pressed enter)
(pressed enter)
su: Authentication failure

間違ったパスワードを入力しましたが、何も表示されず、2回入力したところ結果が出enterました。su: Authentication failure

何度も試してみましたが、結論はこうです。

  1. 正しいパスワードを入力すると、「zshを実行できません:ファイルまたはディレクトリがありません」というメッセージが表示されます。
  2. enterパスワードを誤って入力すると、2〜6回入力するまで何も表示されません。

これは私が単に「正しいパスワード」を忘れていないことを意味するようです。しかし、どのようにルートにアクセスできますか?

の項目は/etc/passwd次のとおりです。

root:x:0:0:root:/root:zsh

答え1

努力する: cd /usr/bin; su。これはzshに絶対パスを提供していないためです。既存のディレクトリに変更すると、su一部のシステムで動作します。一例:PWDzsh

% su
Password:
su: zsh: No such file or directory
% cd /usr/local/bin
% su
Password:
# print $OSTYPE
freebsd10.0
#

答え2

あなたのコメント/etc/passwd

root:x:0:0:root:/root:zsh

これは間違った項目です。シェルは実行可能ファイルのフルパスでなければならず、ログインプログラムは$ PATH検索を実行しません。

一般的な方法では、rootアカウントにログインすることはできません。たとえば、sudo vipwアカウントにsudo権限がある場合は、sudoを使用してコマンドを呼び出すことができます。これは、ターゲットアカウントのログインシェル設定をバイパスする唯一の一般的な方法です。

sudoerでない場合は、rootアカウントで自分自身をロックしている可能性があります。システムを修理するにはコンソールアクセスが必要です。シングルユーザーモードで起動(参照:システム管理者(root)でコマンドを実行する方法)と/etc/passwd含めるように編集

root:x:0:0:root:/root:/bin/zsh

(システムでzshへの正しいパスを使用してください)。

一部の管理者が設定アカウントUIDは0ですが、他のシェルを使用します(通常は静的にリンクされたバイナリ、例:ウエストバンド、これらの誤った設定があってもルートログインを許可します(最も一般的な誤った設定は通常のシェルで破損した共有ライブラリです)。

今後この問題を回避するには、直接編集するのではなく、コマンドを使用してchshユーザーシェルを変更してください/etc/passwd。ファイルを編集する必要が/etc/passwdある場合、またはファイルへのrootアクセス権を取得する必要がある場合は、端末でrootシェルを開いたままにしてrootとしてログインできることを確認するまで閉じないでください。

答え3

  • 現在のシェルを確認してください

    grep '^root:' /etc/passwd
    

    行の末尾に、ルートが使用するシェルのフルパスを表示する必要があります(例:)/bin/zsh。次に、パスのスペルが間違っていないか、ファイルが存在するか、正しい権限が設定されていることを確認します(readとeecute x)。

  • パスが間違っている場合は、zsh実行可能ファイルがある場所を確認してください。

    type zsh
    
  • 次に、suルートの正しいシェルパスを使用してください/bin/zsh。たとえば、次のようになります。

    su -s /bin/zsh -
    
  • chsh最後に、デフォルトのシェルを次に変更するために実行します。/bin/zsh

関連情報