ADDUSER(8)

名称
adduser - 新しいユーザを加えるためのコマンド

書式
adduser [-CENhq] [-G groups] [-L login_class] [-d partition] [-f file] [-g login_group] [-k dotdir] [-m message_file] [-s shell] [-u uid_start] [-w type]

解説
adduser ユーティリティは新しいユーザを加えるための、 pw(8) コマンドを利用して実装されたシェルスクリプトです。 パスワード, グループ, シェル等のデータベースをチェックし、 passwd/group の登録を行い、 ホーム ディレクトリとドットファイルを作成し、 新しいユーザに歓迎メッセージを送ります。 2 つの動作モードをサポートします。 すなわち、 1 度に 1 人ずつのユーザを追加するコマンドラインでの対話モードと、 新規ユーザのリストをファイルで与えてユーザの介在無しに 動作するバッチモードです。

制限事項

username
    ログイン名です。 pw(8) が受け付けるログイン名に制限されます。 一般に、英小文字と数字のみ使用可能です。 長さは 16 文字までです。 この制限の理由は、歴史的な物です。 美的な理由からこの制限を破りたいとする人々はいつもいましたが、 UNIX における基本的なパラメータを変更するほどの重要な理由ではありま せんでした。 <utmp.h> ファイル内の UT_NAMESIZE パラメータを変更し、全てを再コンパイルすることで、変更できますが、 コンパイル済みのプログラムや名前の 8 文字制限を前提としたソースコード、 そして NIS については、問題が起こるでしょう。 NIS のプロトコルは、 ユーザ名を 8 文字と定めています。電子メールアドレスとして、もっと長い ログイン名を必要とする場合には、別名を /etc/mail/aliases ファイルに定義することができます。

full name
    典型的には gecos フィールドとして知られ、 通常はユーザの完全な名前を格納します。 さらに、コンマで区切った値のリスト、 例えば職場の番号や職場と家の電話番号を格納可能です。 名前にアンパサンドが含まれる場合、 他のプログラムが表示するときに、 これを先頭を大文字にしたログイン名で置き換えます。 ‘’: (コロン) は、使えません。

shell
    シェルデータベースに定義されている有効なシェル (/etc/shells) だけが有効です。 さらに、シェルのベース名だけが必要であり、フルパスは必要ではありません。

UID 自動生成されますが、自分で指定することもできます。 ただし、32000 よりも小さい数字でなければなりません。

GID/login group
    自動生成されますが、自分で指定することもできます。 ただし、32000 よりも小さい数字でなければなりません。

password
    空のパスワード、パスワード無効化、ランダム生成パスワード、 素のテキストで指定するパスワードのいずれかを選択可能です。 パスワードは crypt(3) を利用して暗号化されます。

一意なグループ
ひょっとして、あなたは、この方法ではできても他のほとんどの方法ではう まく行かないことがあるのを見逃しているかもしれません。個々のユーザを そのユーザ独自のグループに入れることで、 通常の 022 の代りに umask を 002 としておいても 安全になり、ホームディレクトリにファイルを作っても、他の人にファイル を読まれる心配がなくなります。

共有場所を作るためには、 (freefall における cvs や ncvs のように) UID/GID を別に設けて、ユーザを個別にその新しいグループに入れることで、 その場所へのアクセスを可能とすべきです。

この uid/gid の管理モデルは、たくさんのユーザをグループにまとめるよ り柔軟性があり、共有場所で仕事をする時に umask をいじり回さずにすみ ます。

この方法をほぼ 10 年間使っていますが、ほとんどの場合に使えることがわ かり、じゃまになったことはありませんでした。 (Rod Grimes)

設定
adduser ユーティリティは設定情報を /etc/adduser.conf から読み取ります。 このファイルが存在しない場合、規定のデフォルトを使用します。 このファイルは手で編集可能ですが、 -C コマンドライン引数を使用する方が安全です。 この引数を使用すると、 adduser は対話的入力を開始し、問い合わせに対する回答を /etc/adduser.conf に保存し、ユーザデータベースを変更せずに確認しつつ終了します。 コマンドラインで指定したオプションは、このファイルに保存したものに優先します。

オプション

-C  新規設定ファイルを作成して終了します。 このオプションは -f と排他です。

-d partition
    ホームパーティション。 ユーザディレクトリを見付けるデフォルトパーティションです。

-E  アカウントを無効化します。 このオプションは、文字列 “*LOCKED*” をパスワードフィールドの前に付けることで、アカウントをロックします。 アカウントのアンロックは、スーパユーザが次の pw(8) コマンドコマンドを使用して行います:

        pw unlock [name | uid]

-f file
    生成するアカウントのリストを file から得ます。 file が “-” の場合、リストを標準入力から得ます。 このオプションが指定された場合、 adduser はバッチモードで動作し、ユーザ入力を求めません。 あるアカウント処理中にエラーが発生した場合、 メッセージを標準エラーに書き込み、次のアカウントに取り組みます。 入力ファイルの書式は後述します。

-g login_group
    通常は、ログイングループが指定されない場合、 ユーザ名と同じであると仮定されます。 このオプションは、 login_group をデフォルトとします。

-G groups
    追加グループ。 このオプションは、ユーザに付与する追加グループを指定します。 ユーザは、ログイングループに加え、これらのグループのメンバです。

-h  オプションの要約を表示して、終了します。

-k directory
    directory のファイルを新規ユーザのホームディレクトリへコピーします。 dot.foo は .foo にリネームされます。

-L login_class
    デフォルトログインクラスを設定します。

-m file
    file の歓迎メッセージを送ります。 file に no を指定すると、新規ユーザへメッセージを送りません。 メッセージファイルが adduser スクリプトの内部変数を参照可能であることに注意してください。

-N  デフォルト設定ファイルを読み取りません。

-q  最小のユーザフィードバック。 特に、ランダムパスワードは標準出力にエコーされません。

-s shell
    新規ユーザのデフォルトシェル。 shell 引数は、シェルのベース名であることが必要であり、フルパスであっては なりません 。 シェルが正当なシェルであるとみなされるためには、 /etc/shells に含まれるか、特殊シェル nologin であることが必要です。

-u uid
    uid から開始する UID を使用します。

-w type
    パスワードタイプ。 どのようなタイプのパスワードを生成するかを、 adduser ユーティリティはユーザに許しています。 type 引数は以下の値のうちのいずれかです:

    no  パスワードの無効化。 暗号化文字列の代りに、パスワードフィールドは単一の ‘*’ 文字になります。 スーパユーザが手動でパスワードを有効化するまで、ユーザはログインできません。

    none
        空文字列をパスワードとして使用します。

    yes ユーザが提供した文字列をパスワードとして利用します。 対話モードでは、ユーザはパスワード入力を求められます。 バッチモードでは、最後 (10 番目) のフィールドがパスワードだとみなされます。

    random
        ランダム文字列を生成し、これをパスワードとします。 パスワードは標準出力へエコーされます。 さらに、 randompass 変数を介して、ファイルへ含めることが可能です。

フォーマット
-f オプション使用時には、アカウント情報は特定の書式で格納する必要があります。 空行または ‘#’ で開始する行は無視されます。 他のすべての行は、コロン (‘’): で区切られた 10 個のフィールド (後述) から成ります。 コマンドラインオプションは、これらの値に優先しません。 パスワードフィールドのみが、 ‘’: 文字を文字列の一部として持つことができます。

    name:uid:gid:class:change:expire:gecos:home_dir:shell:password

name
    ログイン名。 このフィールドは空であってはなりません。

uid 数値のログインユーザ ID。 このフィールドが空の場合、自動生成されます。

gid 数値のプライマリグループ ID。 このフィールドが空の場合、ユーザ名と同じ名前のグループが生成され、 その GID が使用されます。

class
    ログインクラス。 このフィールドは空であっても構いません。

change
    パスワードエージング。 このアカウントのパスワードを変更する日付を表現します。 このフィールドの書式は、 pw(8) への -p 引数のものと同じです。 これは dd-mmm-yy[yy] であり、 dd は日、 mmm は数値またはアルファベットの月で “10” や “Oct” 、 yy[yy] は 4 桁または 2 桁の年です。 現在の日付からの相対で時を指定したい場合、次の書式を使用します: +n[mhdwoy] 。 ここで、 n は数値であり、この後に分・時間・日・週・月・年を続け、 これらけの期間が経過したらパスワードが変更されねばならないことを示します。 このフィールドを空にすることで、この機能をオフにできます。

expire
    アカウントの満了。 このフィールドは、アカウントの満了日を表現します。 指定した日付より後にはアカウントは使用できません。 このフィールドの書式は、パスワードエージングのものと同じです。 このフィールドを空にすることで、この機能をオフにできます。

gecos
    ユーザの完全な名前と追加情報。

home_dir
    ホームディレクトリ。 このフィールドが空の場合、 ホームパーティションにユーザ名を追加することで自動生成されます。

shell
    ログインシェル。 このフィールドは、有効なログインシェルのフルパスを含むことが必要です。

password
    ユーザパスワード。 このフィールドは素のテキスト文字列を含み、 ユーザデータベースに置かれる前に暗号化されます。 パスワードタイプが yes であり、このフィールドが空の場合、 このアカウントは空のパスワードになるものとみなされます。 パスワードタイプが random でありこのフィールドが空では ない 場合、この内容がパスワードとして使用されます。 -p オプションが引数 no または none と共に使用された場合、このフィールドは無視されます。 このフィールドを ‘’: で終端させないように。 これはパスワードの一部とみなされてしまいます。

関連ファイル
/etc/master.passwd
    ユーザのデータベース
/etc/group
    グループのデータベース
/etc/shells
    シェルデータベース
/etc/login.conf
    ログインクラスデータベース
/etc/adduser.conf
    adduser 用の設定ファイル
/etc/adduser.message
    adduser 用のメッセージファイル
/usr/share/skel
    ログインディレクトリの雛型
/var/log/adduser
    adduser のログ記録ファイル

関連項目
chpass(1), passwd(1), aliases(5), group(5), login.conf(5), passwd(5), shells(5), pw(8), pwd_mkdb(8), rmuser(8), vipw(8), yp(8)

歴史
adduser ユーティリティは FreeBSD 2.1 から導入されました．

作者
-nosplit マニュアルページと Perl による元のスクリプトは Wolfram Schneider <wosch@FreeBSD.org> が書きました。 追加機能を持つ、Bourne シェルスクリプトで書かれた置き換えスクリプトと、 これに伴なうマニュアルページの更新を Mike Makonnen <mtm@identd.net> が行いました。

バグ
$username や $randompass といった変数を新規ユーザへ送るメッセージ中で adduser が正しく展開できるために、 メッセージファイルの各行をシェルで評価する必要があります。 これは、メッセージファイル中にシェルコマンドを格納可能であることを意味します。 adduser ユーティリティは、攻撃者がこの機能を使用する可能性を柔らげるために、 root ユーザ所有の root ユーザのみが書き込み可能なファイル以外を評価する ことを拒否します。 さらに、シェル特殊文字やオペレータは、 メッセージファイルで使用する場合、エスケープする必要があります。

また、パスワードエージングとアカウント満了時は、 現在のところバッチモードでのみ設定可能です。 対話モードでもユーザが設定可能となるべきです。