Edited at

useradd / adduser

More than 5 years have passed since last update.

誤っていたら訂正願います。


useradd

ユーザを追加します、まる。

デフォルト動作が「原始的」です。

何も指定しないとデフォルトのシェルは/bin/shになったりします。

一方Debian系のadduser/bin/bashになる「ことが多い」はずです (後述)。

いわゆるUnix系OSで古くからあるコマンドのようです。Linux Standard Baseのレベルでは規定がありますので、Linuxの範囲では動作が同じと考えられます。

http://refspecs.linuxbase.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/useradd.html

また、File Hierarchy Standardにもこっそりuseraddについての言及が有ります (adduserはありません)。あくまで脚注相当でuseraddの要不要自体Optional未満の扱いっぽいので、仕様としては何の意味もないのですが、由緒正しいふるーいコマンド臭い雰囲気は感じます。

http://www.pathname.com/fhs/pub/fhs-2.3.html#FTN.AEN581


Systems that use the shadow password suite will have additional configuration files in /etc (/etc/shadow and others) and programs in /usr/sbin (useradd, usermod, and others).


Unix系全体で(APIで言う「POSIX標準」的なレベルで)統一した仕様があるかはちょっと良くわかりません。AIXにはよく似た同名コマンドがあります。

http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.cmds/doc/aixcmds5/useradd.htm

Solarisのマニュアルらしきものの日本語。これが正しいかは知りませんが

http://jp.fujitsu.com/platform/server/sparcenterprise/technical/command-reference/usr/usr01.html

ざっと見ると-mをつけてかつ-kをつけなかった際のホームディレクトリの扱いが富士通のページだけないんですが、果たして仕様は一致しているのでしょうか。

古いものを知らないので歴史的な事情については図りかねます。多分1995年よりは前にあったでしょう。

# 一旦この記事書いてから「しまったなぁ」と思った話として、POSIX系のプログラミングガイド確認出来てないってのがあります。多分useraddはそれを薄めに囲ってるだけだと予想。


adduser

ユーザを追加します、まる。

とりあえず私が知っているDebianとCentOSについてまず書きます


  • Debian ... Perlスクリプト。中でuseraddやgroupaddを巧みに呼びだす

  • CentOS ... useraddへのエイリアス、か、そもそも存在しない

(ざっとadduserってぐぐるとFreeBSDだとさらにシェルスクリプトの何かが出てきたりします。

http://www.freebsd.org/cgi/man.cgi?query=adduser&sektion=8 )

ここからはDebian系のadduserについて書きます。

インタラクティブなユーザ追加スクリプトで、住所を聞いてきたりもします。

動作を/etc/adduser.confで書き換えることができ、デフォルトでログインシェルが/etc/bashになるのはこの設定ファイルに書かれているからのようです。-kがない際のスケルトンディレクトリが/etc/skelになるのもこいつのせい。

なので、システム管理者がお茶目にも/etc/adduser.confを書き換えてデフォルトシェルを/bin/shに変えてたりすると、adduserでログインシェルが/etc/bashになると期待できなくなります。

#自分の環境ではzshにして/etc/skelをいじって……

スクリプトのCopyrightが1995年です。「比較的」新しい、かな?かな?

直観的には「高機能でミスが少なめになりやすい」的な印象を持つのですが、ただ、複数のUnix系OSをまたぐ際にこのスクリプトが存在することはあまり期待できません、というかざっくり見た感じPerlスクリプトとしてのadduserはDebian系特有の便利ツールです。名前似てるのに。

DebianとUbuntuを行き来しているのであればいいんですが、たいていadduserと打って(゚Д゚)って顔になるのって自分の中ではCentOSいじってる時です。

RedHat系ですとこれが暗黙にuseraddにsymlinkされてたりするケースもあるそうです。なおCentOS 6.5をサッと見た時にはadduserは存在自体がありませんので、混乱という意味では少し落ち着く。yum探してもないよ。


個人的な印象

自分の周りが比較的Debian系で固められているため、なっがいあいだadduserに全く疑問を持つことがなかったのですが、いざ各コマンドの起源やら他OSの対応状況やらを見ると、特にadduserの使用について少し身構えてしまう部分があります。

個人的に以前やられたのがグループ管理についての操作体系の違いでして。「useraddの-gと-Gの違いを説明してみろ」と質問されて、自分が正答出来ている気があまりしません。本来Unixでは所属できるグループってば1つなんでしたっけね……?

adduser user groupというショートカット的な機能がuseraddにはもちろんないのがある意味ハマりポイントでした。

他のディストリビューションを使うのなら似て非なるものはこれだけではないので、この2コマンドだけあげつらうのもどうかと思いますが……

#この範囲の狭い調査でも、/bin/shだってashかdashかの違いがあるという事実を知りましてちょっと驚きました。Debian系はashではなくdash。どのくらい致命的に響くかは不明。シェル芸の極地でも考えない限り見るのほとんどbashだもんなぁ……

調べている最中、Debian系ではadduserが「推奨」されている風味の説明を見た記憶がありますが定かではありません。もっとも普通はadduser使う気がします。

あと、きっと将来は/etc/skel下に自前の.zshrcを入れたりしま(せん)

おしまい。