blog

passwdファイルとshadowファイル

Linux講座

2015.06.10

passwdファイルとshadowファイル

こんにちは。

関東が梅雨入りですね。
気温が下がるのは嬉しいのですが、洗濯物が乾きにくい&ランニング出来ない。
でちょっと嫌な季節です。
しかも梅雨明けすれば大の苦手な夏・・・。
憂鬱度が増しますね(´Д⊂)

昨日はグループとユーザに関する授業を行っていました。

その際に生徒さんから出てきた質問。

『何故/etc/passwdファイルや/etc/groupファイルはviで直接編集してはいけないのか』
『/etc/shadowファイルは何の為にあるのか』
教科書には
『passwdファイルはviで直接編集するのではなく、usermod、userdelなどのコマンドを使用して管理する事』
との記述のみ…。

そこで、それらの理由について深堀りしていこうと思います。
そもそもの話しですが、/etc/passwdファイルとは、ユーザの定義が記述されてるファイルです。

owl:x:500:500::/home/owl:/bin/bash

↑この様に。
1ユーザにつき一行ずつ情報が記述されています。

useraddコマンドでユーザを作成すると、このファイルにアカウント情報が定義され、
userdelコマンドでユーザを削除すると、ファイルからユーザの定義が削除されます。

そこで『例えばviでpasswdファイルを開いて、owlユーザの定義の部分を削除してしまっても良いのではないか』と。
そんな感じで生徒さんから質問が来たんですね。
はい、気持ちはとても理解できます。
コマンドを複数覚えるよりviコマンド一つで全部出来てしまうのであれば苦労しないですものね。

で、これは結果的に言いますと【出来てしまう】んです。
しかし、【それはすべきでは無い】との記述。
その理由としては複数ありますが、その一つとして【誤った編集をしてしまうとログインできなくなる可能性がある】というものが挙げられます。

viのコマンドは手動で編集操作を行います。
ですので、【本来削除しようと思っていなかった箇所まで削除してしまう可能性がある】んですね。

もし、他のユーザの定義部分を削除してしまうと最悪そのユーザがログインできなくなる事もあります。
なので安全面で考えて直接編集すべきではない。という意味合いになっています。

因みに、『viで編集するな』と言っておきながらviでpasswdファイルを開く【vipw】というコマンドが存在しています。

ダメッ!って言いながらもそんなコマンドを用意するなんて…と思うかもしれませんが、
こちらも安全面を考えて用意されているコマンドです。

こちらのコマンドはroot権限でしか実行できないコマンドなのですが、
vipwの利点は『このコマンドを使用してpasswdファイルを開いている間は他のユーザがpasswdファイルを編集する事ができない』という点です。

ここで『他のユーザがpasswdファイルを編集できない』と表現していますが、これは
『一般ユーザがpasswdコマンドを使用して自分のパスワードを変更する事が出来ない』と言い換える事が出来ます。
passwdコマンドはsetuidビットが付いているので一般ユーザでも管理者権限でコマンドを実行できます。
パスワードを変更していると言う事は、『ユーザの定義を変更している=passwdファイルを編集している』という事になります。

しかし、rootユーザがpasswdファイルを編集している最中に他の一般ユーザがファイルの中身を編集してしまうと、競合が発生して整合性が取れなくなる可能性があります。

ですので、vipwコマンドでpasswdファイルを開きますと自動的にロックがかかるようになっており、
その間はユーザがパスワードを変更できないようになっているんですね。

どうしてもviでファイルを編集したいのであればvipwで実行するようにしてください。

それから次の質問
『shadowファイルは何の為にあるの?』

/etc/shadowファイルとはユーザのパスワードを暗号(ハッシュ)化して保存しているファイルです。
ユーザのパスワードは以前はpasswdファイルに暗号化させて保存していました。

owl:x:500:500::/home/owl:/bin/bash

上記の二つ目のカラム【x】と表記されている所に記載されていました。
passwdファイルのパーミッションを確認してみますと
-rw-r–r–. 1 root root 1410  6月  9 18:22 2015 /etc/passwd

一般ユーザでも中を閲覧する事が可能ですね。
いくら暗号化しているとは言え、解析すれば他のユーザのパスワードが分かってしまいます。
だからと言ってこのファイルのパーミッションを000などにする訳にもいきません。
例えばidコマンド。実行したユーザのUIDやGIDなどを標準出力するコマンドですが、このpasswdファイルの中を読んで実行しています。
ですので、一般ユーザに読み込みの権限を与えていないと実行できなくなってしまうんですね。
その為、パスワードだけを別ファイル(shadowファイル)に移し、かつそれを暗号化して【二重にセキュリティをかけて】いるのです。
shadowファイルのパーミッションを確認してみますと…

———-. 1 root root 1042  6月  9 21:34 2015 /etc/shadow
ディストリビューションによって違いはありますが、
CentOSでのパーミッションは000となっています。
しかしrootユーザでファイルの閲覧が出来ますので、実際は400の状態ですね。
自分もまだまだ勉強中ではありますが、生徒さんからこういった素朴な疑問が出てくると
『そういえば何でだろう?』と気付かされる事が多々あります。
そして調べてみると面白いですね。
やっぱりLinuxって奥が深いです。

SHARE

最新記事

無料相談する

INTERNOUS,inc. All rights reserved.