このセクションでは自宅サーバーとしてLinuxを扱ううえで役に立つ基本操作基礎知識テクニックについて初心者/ビギナー向けに解説します。
お便利サーバー.com+相互リンクサイト内をキーワードで検索
LinuxOSの使いこなし術

LinuxOSを使いこなす

クライアントOSとの違い

絶対パスと相対パス

"パスが通っている"とは?

"/"と"."と".."の意味

"."(ドット)ファイルについて

ワイルドカードと正規表現

コマンドの強制終了

コマンド操作の補完機能

コマンド操作の履歴機能

リダイレクトとパイプ

属性とパーミッション〜その1

属性とパーミッション〜その2

アカウント情報ファイルの操作

ランレベルについて

システムが起動しないときは

ハードディスクの増設

アプリケーションの導入法


ユーザー管理コマンドの働きを知る大切さとは

通常 WBEL CentOS 上で ユーザーアカウント を作成したり削除したりするときには useradd userdel などの コマンド を用います。

また既存のユーザーアカウントのパスワードの設定や変更を行ったりするときには、 passwd コマンドを利用するのが普通です。

ユーザー管理に用いるこれらの重要なコマンドは、その役割から想像されるような複雑な作業をしているわけでも、覗き見ることができないような謎の データベース に情報を書き込んでいるわけでもありません。

実はこれらのコマンドは、

1. テキスト ファイル"/etc/passwd"と"/etc/shadow"へのユーザーアカウント情報の書き込みと修正。

2.ホームディレクトリとメールの空ファイルの作成または削除。

という、単純な作業をしているに過ぎません。

つまり、これらの設定ファイルを nanoエディタ で書き換えたり、 mkdir コマンドや cp コマンド、などを使ってディレクトリやファイルを操作したりすることで自由にユーザーアカウントの情報を変更することができます。

もちろんこれらの設定はきちんとした書式とルールに基づいて行わなければなりませんから、操作ミスをすると最悪の場合「ログイン不能」に陥ることになりますから慎重に作業する必要があります。

しかし、例えばアカウントの状況を確認したい場合や、ユーザーアカウントにフルネームを付けたい場合などには、コマンドを利用するよりも判りやすく、簡単に作業することができます。

また、これらの仕組みを理解することでユーザー管理を自由自在に行うことができるようになりますので、是非マスターしたいものです。

アカウント情報ファイル"/etc/passwd"

百聞は一見にしかず。とりあえず "/etc/passwd" の中身をのぞいてみましょう。 nanoエディタ で開く nanoエディタでファイルを開く か、 cat コマンド "/etc/passwd" の内容を表示してみてください。

"/etc/passwd" は任意のユーザーアカウントで閲覧可能ですが、書き換えができるのは root アカウントだけになっています。

インストール されている アプリケーション の内容によって異なりますが、大体以下のようになっているはずです。

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
rpm:x:37:37::/var/lib/rpm:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
rpc:x:32:32:Portmapper RPC user:/:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin
pcap:x:77:77::/var/arpwatch:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
webalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologin
squid:x:23:23::/var/spool/squid:/sbin/nologin
xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin
named:x:25:25:Named:/var/named:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
gdm:x:42:42::/var/gdm:/sbin/nologin
desktop:x:80:80:desktop:/var/lib/menu/kde:/sbin/nologin
canna:x:39:39:Canna Service User:/var/lib/canna:/sbin/nologin
wnn:x:49:49:Wnn Input Server:/var/lib/wnn:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash

tanaka:x:500:500:TaroTanaka:/home/tanaka:/bin/bash
suzuki:x:501:501::/home/suzuki:/bin/false
nakai:x:502:502::/home/nakai:/bin/false

"/etc/passwd" の中では、一つの アカウント は一行で記述され、内容は ":(コロン)" で隔てられた7つの項目に順番で記録されています。

この中で オレンジ で表示している部分は、インストールされているアプリケーションが利用する システムアカウント です。

例えば、 "named" DNSサーバー である BIND を実行するためのシステムアカウント namedの実行に用いるシステムアカウントについて "apache" は、 Webサーバー である Apache に対してホームページ閲覧のために接続する クライアント が一時使用するシステムアカウント httpd.confのUsersディレクティブについて です。

システムアカウントはこのように最初から決まった用途でアカウント名とアクセス権限が設定されていますので、内容を書き換えると不具合の原因になりますからそのままにしておきます。

一方の、 太字 の部分が ユーザーアカウント です。

useradd コマンドで新規ユーザーの登録が行われると、このような新しい行が追加され、 userdel コマンドが実行されると、該当するユーザーアカウントの行が削除されることになります。

その設定内容を以下に示します。

/etc/passwdの書式
"/etc/passwd"の書式

一番左の "アカウント名" は、その名のとおりuseraddコマンドで指定したアカウント名です。

"/etc/shadow" は、 root アカウント以外は閲覧も書き換えもできないようになっています。

"ダミーパスワード" は、本来パスワードを記述する部分ですが、 WBEL CentOS では セキュリティ を高めるために実際のパスワードは後述する "/etc/shadow" に記録されるようになっていて、この "/etc/passwd" ファイルの中には "x" とダミーが記述されるだけになっています。

"ユーザーID番号" は、そのユーザーに割り当てられている識別番号で、useraddコマンドを実行するときに特に指定をしなければ500から始まる番号が自動的に割り振られるようになっています。識別番号ですからこれはユーザーアカウント名と同様に ユニーク でなければなりません。

この コンテンツ では触れませんが、グループに関する設定ファイルは "/etc/group" です。
書式は "/etc/passwd" に準ずる簡単なものですので、見れば意味はわかると思います。

"グループID番号" は、ユーザーアカウントが所属するグループのID番号です。 デフォルト ではユーザーアカウントと同じ名前のグループが作成され、ユーザーアカウントはそのグループの唯一のユーザーとして登録されるようになっていますから、特別なことをしない限りこの番号は "ユーザーID番号" と同じになっているはずです。

"コメント" は、通常そのユーザーアカウントに関する説明を記述します。

このパラメータはシステムの動作には何も影響を与えませんから自由に設定することができます。

普通にuseraddコマンドでユーザーを追加しても、この部分は何も設定されませんから、通常は以下のように空欄になっているはずです。

suzuki:x:501:501::/home/suzuki:/bin/false
例えば、システムがメールを送信するときの「送信元の名前」や、 Samba で用いる pdbedit コマンド pdbeditコマンドについて などがユーザー情報を表示するときに利用します。

これは必須のパラメータではありませんから、強いて設定する必要はありません。

ただ、いくつかのアプリケーションでは、このパラメータを参照して「詳細なユーザー情報」として表示することがありますし、ユーザーアカウントの数が増えてくるとその利用者が誰だったかわからなくなってしまうことがありますから、必要に応じてユーザーアカウントの利用者のフルネームを設定しておくとよいでしょう。

ホームディレクトリはuseraddコマンドを実行すると自動的に作成されます。

"ホームディレクトリ" には、そのユーザーアカウントの ホームディレクトリ パス が設定されています。

ホームディレクトリはそのユーザーアカウントのデータを保管する用途以外に、そのユーザーアカウントが利用するアプリケーションの初期設定ファイルを ドットファイル で格納する場所でもあります。

従って、このパラメータを不用意に変更すると動作に不具合が起こることがありますので注意してください。

"デフォルトのシェルプログラム" は、実機や SSHクライアント から ログイン するときに起動される シェル プログラムの種類です。

デフォルトでは "/bin/bash" が設定されます。

例えば ksh tcsh など、他の UNIX OS でよく利用されるシェルが準備されています。
これらは機能や操作方法などが bash とは少し異なります。

WBELやCentOSにはbashの他にいくつか違う種類のシェルを利用することができますが、 LinuxOS ではbash以外のシェルが CUI プロンプト として利用されるケースは稀で、インターネットや解説書では通常bashでの操作が前提になっています。もしシェルを違う種類のものに変更してしまうと、それらの豊富な情報が参照できなくなってしまいますので、変更しないほうが得策でしょう。

さて、クライアント向けに発行するのユーザーアカウントは、メールの受信ボックス、あるいは Webサーバー 用の貸スペースや Samba でのファイル共有などのために 間接的に しか利用しないのが最近のサーバーの運用スタイルになっています。

ユーザーがシェルで サーバー に直接ログインしてコマンドを操作する、とういう旧来の運用スタイルは非常に稀になっています。

つまり実際には、管理者(つまり自分自身)以外が利用するユーザーアカウントに対して "デフォルトのシェルプログラム" のパラメータを設定することはまず意味をなしません。

SSHクライアントからのログインに対しては、 "/etc/ssh/sshd_config" "AllowUsers" キーワードを設定 /etc/ssh/sshd_configのAllowUsersキーワードの設定 することで制限することができますが、もちろん実機の直接操作を制限することはできません。

従ってこういうケースでは万が一のトラブルを防ぐ意味で、シェルによるログインの可能性のないユーザーアカウントに対しては、

suzuki:x:501:501::/home/suzuki:/bin/false

のように書き換え、「デフォルトのログインシェルは なし 」と設定を変更しておくと安心です。

このページの先頭へ↑

"/etc/default/useradd"〜useraddのデフォルト

上のパートで、

シェル で直接 ログイン する可能性のない ユーザーアカウント には、 "/etc/passwd" の設定行を書き換えてログインできないようにしておきましょう。」

と説明しました。

しかし、追加するユーザーアカウントの大部分にログイン権限を与えないとすると、 useradd コマンド を実行するたびに "/etc/passwd" "デフォルトのシェルプログラム" の部分を

"/bin/bash" → "/bin/false"

に書き換えなければならないのでとても面倒です。

実はuseraddコマンドは、その実行の際に "/etc/default/useradd" という テキスト ファイルを参照し、その内容に基づいて新規のユーザーアカウントを設定します。

つまり、このテキストファイルの内容を予め修正しておけば、useraddコマンドの実行時の振る舞いを変更することができるというわけです。

以下に デフォルト "/etc/default/useradd" の内容を示します。

INACTIVE EXPIRE は、パスワードやアカウントの有効期限の設定です。ここでは説明を割愛しますが、とりあえず 「無期限」 に設定されていると理解してください。
CREATE_MAIL_SPOOL CentOS5 から追加されたオプションです。 no を設定するとユーザー作成時には"/var/spool/mail/"以下にメール保存ファイルが作成されず、最初のメールを受信したときに作成されるようになります。
# useradd defaults file
GROUP=100  ←アカウント名と同じグループ名を指定しないときのグループID
HOME=/home  ←設置ざれるホームディレクトリのパス
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash  ←デフォルトで使用するシェル
SKEL=/etc/skel  ←デフォルトでホームディレクトリのコピーするファイルのパス
CREATE_MAIL_SPOOL=yes  ←ユーザー作成時に"/var/spool/mail/"にメール保存ファイルを作成

これを、

# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/false
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

のように修正すると、useraddで追加されるすべてのユーザーアカウントに対して 「シェルによるログインを許可しない」 という設定が自動で行われることになります。

この "/etc/default/useradd" でもう一つ注目すべき設定は、

SKEL=/etc/skel

の部分です。

ここで指定されている "/etc/skel" というディレクトリには、 bash の初期設定ファイルである .bashrc bashの初期設定ファイルについて などが格納されていて、useraddコマンドが実行されるときに作成されるユーザーカウントの ホームディレクトリ 以下にコピーされます。

例えばユーザーアカウントを発行する目的が Webサーバー の貸スペースや、 Samba クライアント としてであれば、ホームディレクトリ以下に必ず "public_html" "samba_dir" などの専用ディレクトリを作成しなければなりませんが、これをいちいちコマンド操作で作成するのは面倒です。

そこで root アカウントから、

[root@web1 ~]# mkdir /etc/skel/public_htmlEnter mkdirコマンドについて
[root@web1 ~]# mkdir /etc/skel/samba_dirEnter
[root@web1 ~]#

のようにコマンドを操作して、 "/etc/skel" 以下に、予めこれらのディレクトリを作成しておけば、useraddコマンドを実行したときに、ホームディレクトリ以下に同じディレクトリが自動的に作成されるようになります。

このページの先頭へ↑

パスワード情報ファイル"/etc/shadow"

WBEL CentOS では、パスワードや ユーザーアカウント の有効期限の情報など、 ユーザーの ログイン に関するデータは "/etc/shadow" に記録されています。

パスワードが記録されているわけではないのに、ファイル名が "/etc/passwd" なのは、もともとはパスワードが記録されていたファイルだからです。
今でも従来のUNIX系OSとの整合性を保つために、パスワードが記録されたくなった今でもそのままのファイル名が使われています。

本来 UNIX 系の OS では、 "/etc/passwd" 上でユーザーアカウント情報とともにパスワード情報まで保管していました。

しかし、ユーザーアカウント名や ホームディレクトリー パス デフォルト ログイン シェル の種類などの比較的頻繁に参照したい情報と、本来頻繁に見せるべきではないパスワード情報が同じファイル上に存在するのは セキュリティ と利便性のどちらにも問題があるため、現在の多くの LinuxOS ディストリビューション ではWBELやCentOSと同様に別々のファイル上に記録されるようになっているというわけです。

従ってユーザーアカウントの一般情報である "/etc/passwd" は一般ユーザーでも閲覧可能になっているのに対し、機密情報である "/etc/shadow" には root ユーザーのみの読み書き権限しか与えられていません。

以下に、 "/etc/shadow" の一部を掲載します。

root:$1$TyhU.xOF$.Z804PF.Q1XiyRq.YjXsl1:13288:0:99999:7:::
bin:*:13288:0:99999:7:::
daemon:*:13288:0:99999:7:::
adm:*:13288:0:99999:7:::
lp:*:13288:0:99999:7:::
sync:*:13288:0:99999:7:::
shutdown:*:13288:0:99999:7:::
 中略
wnn:!!:13288:0:99999:7:::
postfix:!!:13288:0:99999:7:::
mysql:!!:13288:0:99999:7:::
postgres:!!:13288:0:99999:7:::

tanaka:$1$xPIV2O12$L7dF8JF.0TJnZiL1SIiFs.:13301:0:99999:7:::
suzuki:$1$Lpx5x.Xf$vL8dmmRc/0sXYNgPmCxY4.:13301:0:99999:7:::
nakai:!!:13301:0:99999:7:::

"/etc/shadow" の中では、一つの アカウント は一行で記述され、内容は ":(コロン)" で隔てられた9つの項目に順番で記録されています。

この中で オレンジ で示している部分は、 システムアカウント に関する記述です。

そして 太字 で示している部分が ユーザーアカウント に関する記述となります。

useradd コマンドで新規ユーザーの登録が行われると、このような新しい行が追加され、 userdel コマンドが実行されると、該当するユーザーアカウントの行が削除されることになります。

その設定内容を以下に示します。

/etc/shadowの書式
"/etc/shadow"の書式

一番左の "アカウント名" は、useraddコマンドで指定したアカウント名です。 "/etc/passwd" "アカウント名" と必ず1対1で対応します。

"暗号化されたパスワード" には、設定したパスワードそのものではなく、パスワードから MD5 で求められた暗号化パスワードが記録されています。

ユーザーがログインするときや、メールを受信するときなどに、 プロンプト からタイプされたり、クライアントから送られたりするパスワードとの照合に用いられる部分です。

暗号化されていますからここで見ることのできる文字列から元のパスワードを求めることはできません。

ただし解読は不可能でも、暗号化された文字列をそのまま転用することはできます。

例えば tanaka の暗号化パスワードを suzuki の該当部分にそのまま記述すると、 suzuki tanaka と同じパスワードでログインしなければならなくなるというわけです。

useraddコマンドで作成されたユーザーアカウントは、 passwd コマンドでパスワードが設定されるまではログインできません。 この場合、

nakai:!!:13301:0:99999:7:::

のようにパスワードの部分には "!!" と記述されています。

これを、

nakai::13301:0:99999:7:::

と完全に空白にしてしまうと、「パスワードなしでログインを許可」となってしまい、誰でも自由にログイン可能になってしまいますので注意してください。

"パスワードの最終更新日" は、パスワードが設定、あるいは更新された日を1970年1月1日からの経過日数で示したものです。

root アカウントからpasswdコマンドを実行する場合には、この制限は受けません。

"パスワードの変更可能期間" は、passwdコマンドでパスワードを変更できる日数の間隔です。デフォルトは "0" ですから、いつでも何度でもパスワードの変更ができます。

つまり、 "パスワードの最終更新日" + "パスワードの変更可能期間" が明日以降を示す場合にpasswdコマンドが実行できなくなるわけです。

例えばこれを "30" とすると、パスワードの変更は30日に一回しかできなくなります。

このパラメータはユーザー自身にパスワード変更を任せる場合に、必要以上にパスワードを変更させたくない場合に設定しますが、 構築中のLinuxサーバー のように、管理者がパスワードの管理をすべて行う場合にはデフォルトの "0" ままでかまいません。

つまり、 "パスワードの最終更新日" + "パスワードの有効期限" が明日以降を示す場合にパスワードが利用できなくなるわけです。

"パスワードの有効期限" は、設定したパスワードがそのまま変更せずに利用できる日数を示します。 "パスワードの最終更新日" からこの日数を経過すると、そのパスワードが利用できなくなります。

デフォルトの "99999" は「無期限に有効」をあらわします。例えば "365" と設定するとパスワードの有効期限は一年となり、ユーザーは最後のパスワード変更から一年が経過する前にパスワードを変更しなければならなくなります。

つまりこのパラメータは、ユーザーに対して「定期的なパスワード変更」を強制したい場合に設定するものですから、ユーザーにパスワード管理を任せない 構築中のLinuxサーバー ではデフォルト "99999" のままで構いません。

"パスワード切れ予告日数" は、"パスワードの有効期限"が来る前に、プロンプト上で「もうすぐパスワードの期限が来る」という予告を始める日数です。

デフォルトは "7" ですから、パスワード期限が切れる一週間前から予告が行われ、ユーザーに対してパスワード変更を促すことになります。

しかしながら、 構築中のLinuxサーバー ではユーザーがシステムにログインするような運用を行いませんから、ユーザーはそのメッセージを受け取ることができませんし、それ以前にパスワードにも有効期限を設けませんから、このパラメータは事実上機能しません。

結局のところ、 公開サーバー と自宅内 ファイルサーバー の運用が中心の、現在 構築中のLinuxサーバー では、この "/etc/shadow" を操作するケースはあまりないといえます。

しかしながら、 構築中のLinuxサーバー が比較的多くのユーザーを抱えるようになったとき、そして何らかの理由で サーバー機 の再構築を行わなければならなくなったとき、この "/etc/shadow" のバックアップをとっておけば、各々のユーザーのパスワードがわからなくなったとしてもコピー&ペーストで簡単に元のパスワードに設定しなおすことができるようになりますから、覚えておいて損はありません。

このサイトは既に更新を終了していますが、今のところ店じまいの予定はありません。 リンクフリー ですので、趣味や勉強のためでしたら、引用、転用、コピー、朗読、その他OKです。このサイトへのリンクについては こちら をご覧ください。
Powered by Apache
”Linux”は、Linus Torvalds 氏の各国における登録商標です。”Red Hat”及びRed Hatのロゴおよび Red Hat をベースとしたすべての商標とロゴは、各国におけるRed Hat, Inc. 社の商標または登録商標です。その他のプログラム名、システム名、製品名などは各メーカー、ベンダの各国における登録商標又は商標です。
www.centos.org - The Community ENTerprise Operating System