ルートシェルが誤って変更されました。有効なシェルに戻すにはどうすればよいですか?


19

間違って入った

chsh -s /usr/bin 

の代わりに

chsh -s /bin/bash 

そして今、私はルートシェルにログインできません、どうすればルートとして手動でbashシェルを起動できますか?


どのようなコンテキストでこれを行いましたか。現在の端末では、ユーザーのデフォルトシェルは?
jgr208

sudoグループにユーザーがいないのですか?
ルイFリベイロ

3
動作しsudo vipwますか?
ルイFリベイロ

1
@RuiFRibeiroはい、感謝しました。そのファイルのデフォルトのルートシェルを変更できることを知りませんでした
-ChiseledAbs

1
この場合は必要ありませんが、ルートを含む大災害をうっかり作成してしまった場合は、通常、マシンをシングルユーザーモードにして問題を修正し、マルチユーザーモードに戻ることができます。
ボードライダー

回答:


29

rootにはアクセス権がありませんが、sudoグループのユーザーは引き続き特権コマンドを実行できます。エラーはsudoではなく、sudo chshコマンドの他の場所(chshエラーなど)にあるようです。

そのため、sudoは明らかに動作しています。

passwdファイルは次の方法で編集できます。

sudo vipw

そして、ルートシェルは手動で変更されました。

/etc/passwd通常の最初の行)

root:x:0:0:root:/root:/bin/bash

FOMの男はvipw

vipwおよびvigrコマンドは、それぞれファイル/ etc / passwdおよび/ etc / groupを編集します。-sフラグを使用すると、これらのファイルのシャドウバージョン/ etc / shadowと/ etc / gshadowをそれぞれ編集します。プログラムは、ファイルの破損を防ぐために適切なロックを設定します。


3
私は知らなかったvipwvigr、ありがとう!私はいつも使用しましたsudo vim /etc/passwd

3
visudo sudo.ws/man/1.8.15/visudo.man.htmlに も興味があるかもしれません。@ tac
ルイFリベイロ

3
またはsudo -e、任意の編集に対してこのロック編集機能を実行します。
小次郎

16

別のアカウントにアクセスできると仮定した場合の別のオプションは、次を使用してデフォルトのシェルを手動でオーバーライドすることですsu --shell=/bin/bash

-s、--shell = SHELL
/ etc / shellsで許可されている場合はSHELLを実行します

これの主な利点は、別の特権アカウントではなく、別のアカウントへのアクセスのみを必要とすることです。


8

セキュリティ上の理由から、ログイン、テキストやグラフィックやユーティリティなどのかどうかについてはsu、およびsudoすべてのターゲットユーザのシェルを介してこれらのコマンドを実行して別のユーザーとして、コマンドを実行することができます。ターゲットユーザーのシェルが機能していない場合は、結果が表示されています:-(

まだ機能しているルートシェルがどこかで実行されている場合、またはsetuid-rootバイナリのようなもの、またはこれをバイパスできるものがある場合を除き、レスキューシステムまたはライブイメージを使用して問題をリブートして修正するのが最善の策です。

レスキューシステムを起動し、実際のシステムのルートファイルシステムをどこかにマウントします(例:)、/mnt/foo編集/mnt/foo/etc/passwdしてシェルを修正します。保存してアンマウントすれば完了です。


奇妙なことに、これを行うと、/ etc / passwdファイルがプレーンテキストではなくハッシュ内にあるとどうなりますか?
jgr208

1
/etc/passwd平文ではありませんか?少なくとも10年はそういうものを見たことがない。一部のシステムではまだそれが問題ですか?とにかく、私chroot /mnt/foo chsh -s /bin/bashはその場合にトリックをするかもしれないと思いますか?
セラダ

説明した問題は一度もありませんでしたが、/ etc / passwdがプレーンテキストでない必要があるロックダウンシステムで作業し、ハッカーなどがアクセスを取得した場合にシステムをさらに侵害することを回避します。うーん、うまくいくかもしれませんが、実際に動作するかどうかを確認する必要がないことを願っています
jgr208

ユーザーアカウントからsudoを使用して/ etc / passwdを編集できましたが、このファイルでシェルが定義されていることを知りませんでした、ありがとう
-ChiseledAbs

@ChiseledAbsああ、そうでしたか?問題を解決できて良かったです。私はそれがあなたを許すとは思わなかった。
セラダ

6

init=/bin/bashカーネルコマンドラインに追加し(grubでブートする場合は、を押しeてブートエントリを編集します)、パスワードを入力しなくてもrootとしてbashシェルが実行されます。ルートファイルシステムはおそらく読み取り専用でマウントされる可能性が高いため、最初に再マウントする必要があります。その後、でシェルを元に戻すことができますchsh


4

sudo usermod -s /bin/bash jdoe

シェル変わりますjdoeのをしますbash。その後sudo egrep jdoe /etc/passwd、確認できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.