奇妙なことに、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
何度も試してみましたが、結論はこうです。
- 正しいパスワードを入力すると、「zshを実行できません:ファイルまたはディレクトリがありません」というメッセージが表示されます。
- enterパスワードを誤って入力すると、2〜6回入力するまで何も表示されません。
これは私が単に「正しいパスワード」を忘れていないことを意味するようです。しかし、どのようにルートにアクセスできますか?
の項目は/etc/passwd
次のとおりです。
root:x:0:0:root:/root:zsh
答え1
努力する: cd /usr/bin; su
。これはzshに絶対パスを提供していないためです。既存のディレクトリに変更すると、su
一部のシステムで動作します。一例:PWD
zsh
% 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
。次に、パスのスペルが間違っていないか、ファイルが存在するか、正しい権限が設定されていることを確認します(r
eadとeecutex
)。パスが間違っている場合は、
zsh
実行可能ファイルがある場所を確認してください。type zsh
次に、
su
ルートの正しいシェルパスを使用してください/bin/zsh
。たとえば、次のようになります。su -s /bin/zsh -
chsh
最後に、デフォルトのシェルを次に変更するために実行します。/bin/zsh