su -s '/bin/bash' /etc/passwd でシェルを引き続き使用します。

su -s '/bin/bash' /etc/passwd でシェルを引き続き使用します。

/etc/passwdでルートシェルを手動で編集しましたが、タイプミスがありました。雪だるまとして、私のボックスにはsudoユーザーがいません。

だから私は次のことを試み、次のような結果を得ました。

$ su -s '/bin/bash chsh root' root
Password: 
Cannot execute /usr/bin/scrrn: No such file or directory

(私がしたことを見ましたか?)。

私はマンページでこれがまさにこれだと思います。

If the target user has a restricted shell (i.e. the shell field of
this user's entry in /etc/passwd is not listed in /etc/shells),
then the --shell option or the $SHELL environment variable won't be
taken into account, unless su is called by root.

たぶん私の質問はsu -sに関するものではないはずですが、ここから始めることができます。

答え1

1つの可能性は、シングルユーザーモードでシステムを起動するか、リカバリブートUSBフラッシュドライブ(ディストリビューションによって異なります)を使用して誤字を修正することです。/etc/passwd

多くのLinuxシステムでは、パラメータ化されたカーネルを実行するようにGRUBブートローダに指示できますinit=/bin/bash。これを行うと、もう一度編集できます。注意深いあなたの/etc/passwd

ところで、正しいことはシェルを変更することですが、実際にはそうしたくありchshません。chsh/usr/bin/screenroot

(他のuid 0とシェルアカウントを作成できます/usr/bin/screen。それが賢明かどうかはわかりません...)

最後によく読んでください数(1):

-s--shell=

         Run the specified shell instead of the default.

したがって、以下を実行する必要があります/bin/su -s /bin/bash/bin/bash chsh rootいいえ実行可能ファイルのパス(次のようにすることができます)実行(2)-d をシェルとして使用)、シェルがリストにない場合、ルートには影響しません。/etc/shells

また試すことができます/usr/bin/sudo SHELL=/bin/bash -s

答え2

@Basile Starynkevitchに50%のクレジットを渡すか、彼が別の答えを書いたことを願っています。彼の提案の一つが私を正しい道に導いてくれたからです。

1 - @Basile Starynkevitchが言ったように、マシンを起動でき、GRUBで「e」を押して起動オプションを編集しました。 "linux"で始まる行にパラメータを追加しました。

init=/bin/bash

ルートbashシェルで起動します。進展!

2 - ファイルシステムが読み取り専用でマウントされているため、ファイルシステムのルートとしてまだ何も編集できません(GRUBからそのオプションを削除しましたが、理由は調査していません)。したがって、次のように入力する必要があります。

# mount -o remount,rw /

その後、次の手順に進むことができます。

3 - /etc/passwdファイルの編集

@Basile Starynkevitchが言ったように:

しかし、シェルを変更する正しい方法はchshです。

彼は正しい。しかし、私は今しました。

# vi /etc/passwd

なぜなら私は通常同じ愚かなことを二度はしないからだ。

関連情報