リモートで/etc/passwdファイルを誤ってFTPで更新をかけたところ設定されているユーザー全てでログインができなくなった。(root含む)
サーバ自体はログイン済みのためサーバー本体にてrootのパスワード変更を試みるも変更できなかった。新規ユーザーの作成は問題なく実行できた。
rootでログインできない為、シングルユーザーモードでログインしてパスワード変更を試みるも変更できない。(AuthenticationFailureが表示)いろいろ試したところ、
サーバ本体にログインを試みたところ/bin/bashが見当たらないような表示
root権限でログインするにはどうしたらよいでしょうか
別ユーザでログイン後suでroot権限にしようとすると
「そのようなファイルやディレクトリはありません」
と表示されます
ちなみにまったく別のパスワードを入力すると
「パスワードが違います」
と表示されるので判別は出来ているようです。
どなたかお願いします!
>/bin/bashが見当たらないような表示
ではなく、loginシェルが解ってないのではないかと思います。
ftpで消した(書き換えた)のは /etc/passwd だけですよね?
文面から察するに、シングルユーザモードでログインは出来るのなら、試しに次のようなファイルを作成してから再度、rootでログインを試みてください。
/ここから /etc/passwd として保存、改行コードはLFで、パーミッションは一応644で。
root:x:0:0:root:/root:/bin/bash
/ここまで
上手く行くかは解りませんが・・・
どのように書き換えたのかは解りませんが、一応今の /etc/passwd もちゃんとバックアップとってからにして下さいね。
>判別は出来ているようです
蛇足ですが、パスワードを実際に格納してるのは、 /etc/shadowです。
少し前にtelnetで/etc/passwdファイルを確認したところ、
改行コードの^Mが全行に入っていました
CR+LF改行を行っている場合、vi等でそのファイルを見ると各行の末尾に「^M」が入ります。この改行タイプはWindowsの場合かと思われます。蛇足ですが、Mac等だとCR改行のみのはず。
/etc/passwd へのFTP転送は、Windowsマシン等からバイナリ形式等で行われたのでしょうか?その場合はwithgodさんも書かれているとおり、LF形式(UNIX系の改行形式)で転送する必要があります。
この場合shadowファイルへの対応は何か必要なのでしょうか?
shadowファイルは影響を受けてないと思いますので、対応は必要ないと思われます。(マシンの再起動等は行っていませんよね?)
それとvipwというのがあるのを知りました
これを使わなければいけなかったのでしょうか
vipwは/etc/passwdを多人数で編集しないようにロックをかけるコマンドです。編集機能自体はviと同じです。誰も他者が触らないのであれば、viコマンドで問題ないと思います。
なるほど良くわかりました。
/etc/passwdファイルをFTPでアップロード後、シングルユーザモードで所有者の変更を行い一度サーバーを落としています
現在は唯一新規作成したユーザー(root権限ではない)でのみログインできる状態です
>少し前にtelnetで/etc/passwdファイルを確認したところ、改行コードの^Mが全行に入っていました
>これが原因でシェル判別できずログインできないのが原因でしょうか?
そうですね。これが原因だと思われます。
passwdファイルの最後のshellを指定に^Mが入ってしまい、
^M付きのファイルを探しに行ってないと言われているのでしょう。
/etc/passwdファイルしか更新してないのであれば、
shadowは変更しないで大丈夫です。
passwdを更新するときは、vipwで更新した方が安全です。
vipwはviエディタのpasswdファイル更新用のコマンドで、
これで開くと同時に他からの更新をされないようファイルをロックします。
操作方法はviエディタそのままです。
どうしてもpasswdファイルの編集をWindowsなどで行うときは、
Terapadなど改行コードを選択して保存できるテキストエディタを使いましょう。
またFTPで戻すときも、同時にloginしてmoreやlessなどで、改行コードやパーミッションが正しいか必ず確認しましょう。
調べてみるとshadowファイルとのパスワードの食い違いの問題が良くかかれてますが、これはshadowファイルを変更した場合に起こることで今回は当てはまらないという見解でよいでしょうか
今回のトラブルでシステムファイルは絶対にviということがよーくわかりました
>調べてみるとshadowファイルとのパスワードの食い違いの問題が良くかかれてますが、
>これはshadowファイルを変更した場合に起こることで今回は当てはまらないという見解でよいでしょうか
そのとおりです。
shadowファイルはpasswdファイルのコピーで、パスワードを符号化してshadowファイルへ記録しています。
passwdファイルはアカウントを持っていれば誰でも見えるため、
パスワードが解析されないよう別のパーミッションのかかったファイルであるshadowファイルに保存しています。
passwdファイルをベースにpasswdを書きこんでいるため、片保方だけUserIDやGroupIDなどが変ってしまうときちんと一致が取れなくなってしまうので、どちらかの内容を変えたときは、もう一方も同じように更新してあげましよう。
userを追加・削除するだけならuseradd/userdelコマンドがお手軽です。
何度も答えてみて良いのかな?人力検索はてなは始めたばかりで、マナーとか良く解ってないのでマナー違反ならすいません(。。;
ファイルを誤ってFTPで更新をかけたところ
との事ですが、具体的に何を更新したんでしょうか?
ローカルに落としたのを、アップロードしただけの場合だと、それで
改行コードの^Mが全行に入っていました
というのはイマイチ考えにくいのですが、予想で考えると次のどちらかと思います。
#恐らく /bin/bash^M を起動シェルとして起動しようとしてこけてるんだと思います。
/etc/passwdの各エントリが正常であり、改行コードだけおかしい場合はWin上で直して転送したりするとまた同じ現象が起こるかもしれないので、Unix上で次のようにして直しましょう。
UnixとWinなど、複数のOS間でファイルのやり取りする場合は適切に改行コードを扱えるエディタと、FTPクライアントを使ったほうが良いですよ。
解決しました!
ありがとうございます
少し前にtelnetで/etc/passwdファイルを確認したところ、改行コードの^Mが全行に入っていました
これが原因でシェル判別できずログインできないのが原因でしょうか?
これだけ直せば解決するのか・・・現在直接サーバを使える場所にいないので対応は明日になりそうですが
この場合shadowファイルへの対応は何か必要なのでしょうか?
それとvipwというのがあるのを知りました
これを使わなければいけなかったのでしょうか