SSブログ

【Ubuntu 11.04】パスワードに関して:パスワードを忘れた場合の対処、sudo をパスワード無しにする、パスワードの生成について [ubuntu]

つい先日、下記の記事にsudoでパスワードを問い合わせ無しにする方法が載っていました。

http://unixmen.com/linux-commands/1771-how-to-avoid-sudo-password-prompt-

ただし、上記記事の通りにやるとUbuntu 11.04(Natty)では、ほぼトラブルになります。それと、sudoを使う時に楽ですが、セキュリティは甘くなります。Ubuntuマシンを自分しか触れない状況以外は、やらない方が良いです。(やらないで下さい。と言ってもいいくらい)

※一応、手順を一番最後の所に記述しておきます。

上記の方法をやってsudoが出来なくなったり、パスワードを忘れた時の為などに、パスワードに関する事を書いておきます。

 

<<sudoresをいじってsudo出来なくなった場合 >>

始めに示したURLの方法でsudoの時にパスワードを問い合わせないようにしようとすると、/etc/sudoersのパーミッションを変更するので、その後sudoをしても下記のようなエラーが出ます。(下記はsudo apt-get updateをした例)

natty@narwhal:~$ sudo apt-get update
sudo: /etc/sudoers is mode 0740, should be 0440
sudo: no valid sudoers sources found, quitting

ところで、Ubuntuはsuはデフォルトでは出来ないようになってます。なので sudoもできないしsuも出来ないので/etc/sudoersのバーミッションを戻せないと言う事になります。

そこで、 シングルユーザーモードでパーミッションを変更します。

1) Grubメニューを出す

他のOSがある場合は自動的に出ますが、出ない場合はShiftキーを押しながらパソコンを起動します。すると下図のメニューが出ます。

SS-passwd-003.JPG

そしたら、(recoverey mode)と書いてあるのを選んで起動します。

2) rootでログイン

起動プロセスが進むと、最後の方で下図が出ます。

SS-passwd-001.JPG

「root Drop to root shell prompt」を選んでエンターキーを押します。すると、下図のようにrootのプロンプトが出るはずです。

SS-passwd-004.JPG

※ubuntu1104の部分はホスト名なので、各自が設定したものが出ます。それとrootにパスワードを付けた方は、このようにはなりません。後で説明します。

3) パーミッションの変更

/etc/sudoersの記述に誤りがある方は、

root@ubuntu11.04:~# vi /etc/sudoers

で記述を直して下さい。

そしたら、下記でパーミッションを戻します。

root@ubuntu11.04:~# chmod 440 /etc/sudoers

後は rebootコマンド(リブート)shutdown -h nowコマンド(シャットダウン)で終了して下さい。次回からsudoが出来るはずです。

 

<< パスワードを忘れた時の対処 >>

★デフォルトのままの方★

rootにパスワードを付けていない方が対象です。

1) シングルユーザモードで立ち上げる

前述の <<sudoresをいじってsudo出来なくなった場合 >>の「1) Grubメニューを出す」と「2)rootでログイン」の手順を行って、rootのシェルプロンプトを出して下さい。

2) passwdファイルの確認

下記のコマンドを入力して下さい。

root@ubuntu11.04:~# less /etc/passwd

すると最初の行が下図のはずです。

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

このファイルの構造は「:」で区切られていて、

ユーザ名:パスワード:ユーザーID:グループID:説明:ホームディレクトリ:ログインシェル

となっています。 ただし、パスワードの欄が「x」だとシャドーパスワードが使われます。Ubuntu11.04ではシャドーパスワードがデフォルトなので、全てxが付いています。

上記を踏まえて、自分のID(下記の例ではnatty)もパスワード欄「x」が付いているか調べて下さい。

natty:x:1000:1000:natty,,,:/home/natty:/bin/bash

3) パスワードを一時的に削除

シャドーパスワードファイルを編集してパスワードを一時的に削除します。

下記のコマンドでシャドーパスワードファイルを開きます。

vi /etc/shadow

自分のID(パスワードを忘れたID)を探して(下記の例ではnatty)、赤色を付けたコロンに挟まれた青色の文字を削除します。

natty:$6$Uk9Sabb7$f0GgNbsjy/KpjW45t8D.LTaJCSzx3.svsw3K55C
JyWfPGFrReN7dm99SFWXHQqaSkkIb2RsN1dG09EF04kvLs0
:15154:
0:99999:7:::

すると下記のようになります。

natty::15154:0:99999:7:::

そしたらセーブします。これでパスワードが削除されます。

4) マルチユーザーに移行

rootプロンプトが出た状態でctrl+d を押すと、下図になります。

SS-passwd-005.JPG

そうしたら、今度は「resume Resume normal boot」を選んで起動します。

そして、ログインプロンプトが出たら、自分のID(先ほどパスワードを削除したID)を入力してエンターキーを押します。するとパスワードが聞かれることなくプロンプトが出るはずです。

SS-passwd-006.JPG

※今までのスクリーンショットとホスト名が変わっているのは気にしないでください。

5) 新しいパスワードを付ける。

下記を入力してパスワードを設定して下さい。※LANG=Cを設定したのは文字化けするからです。

natty@ubuntu11.04:~$ LANG=C
natty@ubuntu11.04:~$ passwd

SS-passwd-007.JPG

successfullyと出れば成功です。今度からここで設定したパスワードが使われます。

※sudo less /etc/shadow で見ると今度は自分のIDの所にまだ文字列が入っているはずです。

あとは sudo reboot なり sudo shutdown -h now なりして下さい。

 

★rootにパスワードを付けた方★

sudo passwdとかやって、rootにパスワードを付けた方は、シングルユーザモード で立ち上げても下図になります。つまり、rootパスワードを聞かれます。

SS-passwd-002.JPG

rootパスワードも忘れてしまった場合は、まだ試していません。

ただ、理屈上、下記の方法でできるのではと思っています。

1)Live CD(ext4がマウントできてLinuxならなんでもよい)で起動して、マウントします。(ここでマウントポイントを/mntとします。)

2) /mnt/etc/shadowのrootと自分のIDのパスワードを★デフォルトのままの方★の「3) パスワードを一時的に削除」と同じ方法でパスワードを一時的に削除します。

3) Live CDを抜いて、リカバリーモードで再起動します。そして自分のIDで入ります。

4) ★デフォルトのままの方★の「5) 新しいパスワードを付ける。」を行います。

5) sudo passwd root -l と入力して、rootに直接入れない様に(デフォルトに戻す作業)します。

ただ、2)のマウントしてパスワードを削除した時に、/etc/shadowファイルのパーミッション、ユーザ、グループがどうなるかが、ちょっと不安ですが・・・それさえ何とかなれば大丈夫だと思うのですが。。。。

その他、パスワードの生成の仕組みやsudo時にパスワードを入力しないで済むようにする方法が知りたい方は、広告の下の「続きを読む」を押してください。(既に開いている方もいると思います。) 

 ←指紋認証USBメモリ

    指紋認証USBメモリって意外と高い。
    でも、高くてもデータの紛失のリスクを考えると
    買う人いるんだろうな~
    私には縁の無い物かも・・・

 

 

 

 

<< パスワード生成について >>

Ubuntu 11.04 (natty)では、SHA-512という方式が取られています。また、パスワードを生成するコマンドはmkpasswdというコマンドです。

/etc/shadowのファイルを見ると、下記の様になっています。

natty:$6$Uk9Sabb7$f0GgNbsjy/KpjW45t8D.LTaJCSzx3.svsw3K55C
JyWfPGFrReN7dm99SFWXHQqaSkkIb2RsN1dG09EF04kvLs0
:15154:
0:99999:7:::

この青字の部分を細かく説明すると、始めの$で3つの部分に区切られてます。

$6$Uk9Sabb7$f0GgNbsjy/KpjW45t8D.LTaJCSzx3.svsw3K55CJyWfPG
FrReN7dm99SFWXHQqaSkkIb2RsN1dG09EF04kvLs0

6の数字はSHA-512を示しています。5ならSHA-256です。

次の青字、 Uk9Sabb7をソルトと言います。これが違う事によって全く同じパスワードでも青い文字と緑の文字が違います。逆に言えば、パスワードが同じでソルトが同じなら全く同じ文字列になります。

実際にmkpasswdを使った例を示します。下記は12345678というパスワードをsha-512で変換します。

mkpasswd -m sha-512 12345678

すると、例えば下記の様に出来ます。この時は、ソルトはPCがランダムに発生させます。

$6$YibyhETvmrV5eUJn$ig7bS0qy6TeHB1WVC7U9Ze7R9bwSPcRlRJ
znva9C/4DUbTyYhbpnjln1nHLNAuQUjI7ZdsqIgFsv7V0vdAlYX/

次に、下記の様に入力します。すると上の、文字列と全く同じはずです。各自のubuntuで下記をコピーして、端末に張り付けてみて下さい。それでも上と同じ文字列になるはずです。

mkpasswd -m sha-512 12345678  YibyhETvmrV5eUJn

つまり、passwdコマンド等でパスワードを設定した時には、下記が呼び出されて、その結果が/etc/shadowに書き込まれます。

mkpasswd -m sha-512 <パスワード>

ログイン時には、下記が実行されて(ソルト部分は/etc/shadowから持ってくる)この出力が、/etc/shadowのパスワード部分と文字列が一致すればログイン出来るという仕組みです。

mkpasswd -m sha-512 <パスワード> <ソルト>

また、どのUbuntuでも(というかSHA-512なら同じはず)同じ文字列が生成できるので、NISでパスワードが管理出来るわけです。

 

<< パスワードの一括設定 >>

複数のユーザがいる時にパスワードを一括設定するのにpasswdコマンドをいちいち入力して行くのは面倒です。

そこで、前述のmkpasswdコマンドを使います。

sudo usermod -p `mkpasswd -m sha-512 <パスワード>` <ユーザ名>

上記のコマンドでパスワードを設定できます。この時、パスワードの再入力もありません。(ここまでは私が確認済みです)

ですので、ユーザ名とパスワードの一覧を作っておけば、sedとかでスクリプトを作ってroot権限で実行すればできるはずです。

 

<< ログインのロックと解除 >>

Ubuntuではデフォルトで、rootユーザでログイン出来ません。

/etc/shadowを見ると、最初の行が下記のようになっているはずです。

root:!:15007:0:99999:7:::

このマークが付いていると直接ログイン出来ません。これを変更するコマンドは

sudo passwd <ユーザ名> -u

なのですが、パスワードが付いてないと、

sudo passwd root -u

passwd: パスワードをアンロックするとパスワードのないアカウントができます。
このアカウントのパスワードをアンロックするには usermod -p でパスワードを
設定すべきです。

と出ます。

逆にログイン出来ないようにロックする場合は、下記です。(最後はエル)

sudo passwd <ユーザ名> -l

但し、間違っても1つしかユーザIDが無くて、そのIDをロックしないように。万が一、やってしまったら、 << パスワードを忘れた時の対処 >>を行って下さい。 

ちなみに、<< パスワード生成について >>や<< ログインのロックと解除 >>とcronを利用して、「何日以内に初期パスワードから変更していない人はログインできなくする」とか「何日間(曜日毎)とかパスワードを変えていない人は新しいパスワードに自動的に変更」とかいう仕組みを作れるわけです。

 

<< sudo時にパスワードを入力しないで済む方法 >>

この方法は危険度が理解出来ていない方は非推奨です。

この記事の冒頭で記述した下記ですが、シングルユーザモードで行って下さい。

http://unixmen.com/linux-commands/1771-how-to-avoid-sudo-password-prompt-

手順としては、

1) シングルユーザモードで起動する。

記事の始めの方に書いた<<sudoresをいじってsudo出来なくなった場合 >>の1)及び2)でシングルユーザモードで起動してrootプロンプトを出して下さい。

2) sudoresのパーミッション変更

chmod 740 /etc/sudores

3) sudoresのエディット

vi /etc/sudores

下記の行を探します。

%admin ALL=(ALL) ALL

これを下記に書き直してセーブします。

%admin ALL=(ALL) NOPASSWD: NOPASSWD: ALL

4) sudoresのパーミッションを戻す

chmod 440 /etc/sudores

あとはリブートするかシャットダウンして終わりです。

そうすると、次回起動時(通常の起動)から

sudo apt-get update

とかやってもパスワードを聞かれずに、いきなり実行されます。

 ←セキュリティソフト

    有名なNorton。この前lenovo購入したから
    何入れるか迷ってる。
    アマゾンの評価見ると、性能は悪くないが
    ダウンロード版を購入しない方がいいという意見がある。
    私は、ソフトを買う時、現物CD-ROMが無いと
    ダメなタイプなので、どんなソフトでも
   ダウンロード版を購入することは、まず無いです。


nice!(0)  コメント(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。