ふつうにadduser
でやると、いろいろ聞かれるのでスクリプト中では使いづらい。
# adduser test Adding user `test' ... Adding new group `test' (1000) ... Adding new user `test' (1000) with group `test' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for test Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n]
これは、2つのオプションを使うことで回避できる。パスワードは--disabled-password
か--disabled-login
をつけると聞かれなくなる。住所とかを聞いてくるのは--gecos ""
を指定するといい。
# adduser --disabled-password --gecos "" test Adding user `test' ... Adding new group `test' (1000) ... Adding new user `test' (1000) with group `test' ... The home directory `/home/test' already exists. Not copying from `/etc/skel'.
ただし、これだとパスワードでログインはできない。別途パスワードを設定する必要がある。という時に使えるのがchpasswd
で、こんな感じでユーザ名:パスワード
を渡すと使える。
# printf 'test:password123' | chpasswd
でもこれだとパスワードが丸見えなのでよろしくない。ので、--encrypted
というオプションを指定する。これは、パスワードそのものではなくてパスワードハッシュを渡すオプション。
パスワードハッシュは/etc/shadowに入っているやつで、例えば上で設定したpassword123
は以下のようになっている。
# grep test /etc/shadow test:$6$.mmXVfRt$m5U1uip5K4R0oS/DRvaG22UwfInAAwjCJEF2uhaYJXtiu/p7braVYGuTyBS3qF.2KmYTo6vqMHjfNXdJNWfw0.:17047:0:99999:7:::
このパスワードの形式はcrypt(3)
に書かれている
$id$salt$encrypted then instead of using the DES machine, id identifies the encryption method used and this then determines how the rest of the password string is interpreted. The following values of id are supported: ID | Method ───────────────────────────────────────────────────────── 1 | MD5 2a | Blowfish (not in mainline glibc; added in some | Linux distributions) 5 | SHA-256 (since glibc 2.7) 6 | SHA-512 (since glibc 2.7)
(http://man7.org/linux/man-pages/man3/crypt.3.html)
つまり、
$6$.mmXVfRt$m5U1uip5K4R0oS/DRvaG22UwfInAAwjCJEF2uhaYJXtiu/p7braVYGuTyBS3qF.2KmYTo6vqMHjfNXdJNWfw0.
は、$
で区切った3つの部分に分かれていて、
$6$.mmXVfRt$m5U1uip5K4R0oS/DRvaG22UwfInAAwjCJEF2uhaYJXtiu/p7braVYGuTyBS3qF.2KmYTo6vqMHjfNXdJNWfw0. - -------- -------------------------------------------------------------------------------------- ID salt encrypted password
ということらしい。これを手動で生成するにはmkpasswd
というコマンドを使う。よくわからないけどUbuntu 16.04だとwhoisパッケージに入ってました。--method
で暗号化方式を選択して、--salt
でsaltを指定する。
# apt install whois (略) # mkpasswd --method=SHA-512 --salt='.mmXVfRt' password123 $6$.mmXVfRt$m5U1uip5K4R0oS/DRvaG22UwfInAAwjCJEF2uhaYJXtiu/p7braVYGuTyBS3qF.2KmYTo6vqMHjfNXdJNWfw0.
で、これをchpasswd --encrypted
に渡せばいい。
printf 'test:$6$.mmXVfRt$m5U1uip5K4R0oS/DRvaG22UwfInAAwjCJEF2uhaYJXtiu/p7braVYGuTyBS3qF.2KmYTo6vqMHjfNXdJNWfw0.' | chpasswd --encrypted
まあSHA512とはいえsalt付きのハッシュなので、さすがにこれを公開の場所に置くのはちょっとなーという感じもあって実際使えるのかは微妙なんですが、とりあえず調べたことは書き残しとこうと思って書いた系の記事です。たぶんパスワードに頼らないのが正解。