xengineer’s diary

結果、メモ的な内容になっています。

useraddとadduserとgroupaddとaddgroupの秘事

全然大したことじゃないんだけどね。

linuxに触れた事がある人なら、この秘事が一度は気になったことがあるはず!

僕は気になったことないけど。ついさっき気になったので調べてみた次第です。

気になってから打ってみたコマンドとその結果たちが以下だーーーーー!!!

あーれ!きゅーずぃーーーーーん!!!(古)

あ、その前に。

root@wordpress02:~#cat /etc/issue
Ubuntu 12.04 LTS \n \l

です。

気を取り直して、、、

ぐーーっど・がすとろのみーーーーー!(一回もみたことない)

root@wordpress02:~# which addgroup
/usr/sbin/addgroup
root@wordpress02:~# file /usr/sbin/addgroup
/usr/sbin/addgroup: symbolic link to `adduser'
root@wordpress02:~# which adduser
/usr/sbin/adduser
root@wordpress02:~# file /usr/sbin/adduser
/usr/sbin/adduser: a /usr/bin/perl script, ASCII text executable
root@wordpress02:~# which groupadd
/usr/sbin/groupadd
root@wordpress02:~# file /usr/sbin/groupadd
/usr/sbin/groupadd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xd2c9e28771ae1c99b242c23dd7648b9727fde877, stripped
root@wordpress02:~# which useradd
/usr/sbin/useradd
root@wordpress02:~# file /usr/sbin/useradd
/usr/sbin/useradd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x04b3f08924906fb1f1ef8752694414ab8bab3d9a, stripped
root@wordpress02:~# grep useradd /usr/sbin/adduser
    my $useradd = &which('useradd');
    &systemcall($useradd, '-d', $home_dir, '-g', $ingroup_name, '-s',
    my $useradd = &which('useradd');
    &systemcall($useradd, '-d', $home_dir, '-g', $ingroup_name, '-s',
    # useradd without -p has left the account disabled (password string is '!')

つまりだね、

useradd ← ちゃんとしたバイナリ
adduser ← useraddのラッパっぱ
groupadd ← ちゃんとしたバイナリ
addgroup ← adduserへのsymbolyc link

ふーん。なるほどー。
えーーーーーー。なんか最後のだけ「????」なんですけどw

ちょっと意地悪なコマンドを実行してみよう・・・addgroupに、--uidを渡してみる。

root@wordpress02:~# addgroup --uid 11111 testuser
Adding group `testuser' (GID 1003) ...
Done.
root@wordpress02:~# adduser --uid 11111 testuser
adduser: The group `testuser' already exists.
root@wordpress02:~# grep testuser /etc/group
testuser:x:1003:

あら・・・なんだか・・・よくわからん挙動だわこれ・・・
adduserはそもそもperlスクリプトということなので、中身探検してみる。

(略)
# detect the right mode
my $action = $0 eq "addgroup" ? "addgroup" : "adduser";
if (defined($found_sys_opt)) {
  $action = "addsysuser" if ($action eq "adduser");
  $action = "addsysgroup" if ($action eq "addgroup");
}
(略)

入り口で振り分けてます。
で、もっとよくみると、中では、groupaddも使ってる、と。
ということで、Ubuntu12.04LTSでは、groupadd/useraddが本体で、
adduserはそのラッパー、addgroupはラッパーですらない、
ということがわかりましたとさ。

ちゃんちゃん。