Netassist Blog

UbuntuのUser Managementを色々試してみる

こんにちは、技術部のfです。
以前、RHEL6、7におけるパスワードの設定を色々試してみましたが、
今回はUbuntuのUser Managementの記事の内容を色々試してみようと思います。

Ubuntu公式のドキュメントはこちらになります。

利用環境は以下の通りです。

# cat /etc/issue
 Ubuntu 20.04.1 LTS \n \l

まず、中項目の Adding and Deleting Users について。

Ubuntuや他のDebianベースのディストリビューションでは
アカウント管理にadduserパッケージの使用を推奨している、とあります。

ただ、CentOS環境の場合だと、そもそもuseraddとadduserの違いを
意識することはあまりないかと思います。

下記はCentOS8環境での実行結果ですが、adduserはシンボリックリンクが貼られており、
実体はuseraddとなっていました。

# which adduser useradd | xargs ls -l
lrwxrwxrwx 1 root root      7 11月  9  2019 /usr/sbin/adduser -> useradd
-rwxr-xr-x 1 root root 241752 11月  9  2019 /usr/sbin/useradd

ちなみにCentOS7や、先日EOLを迎えたCentOS6でも上記と同様の結果が返ってきます。
その為、CentOS環境ではuseradd、adduserどちらでも実行結果は変わらないことになります。

次に、Ubuntu環境でも同様にそれぞれのコマンドのファイルをlsで見てみます。

# which adduser useradd | xargs ls -l
-rwxr-xr-x 1 root root  37785 Apr 16  2020 /usr/sbin/adduser
-rwxr-xr-x 1 root root 147160 May 28  2020 /usr/sbin/useradd

CentOSとは違い、シンボリックリンクは貼られておらず、
ファイルサイズも異なっています。

では、実際にUbuntu環境でuseraddを実行し、作成したユーザに切り替えてみます。

# useradd test01

# su - test01
su: warning: cannot change directory to /home/test01: No such file or directory
$

作成したユーザに切り替えようとしたところ、ホームディレクトリが存在しないとの
警告が出てしまいました。

manコマンドでuseraddのDESCRIPTIONの項目を見てみると、オプションによっては
新しいユーザのホームディレクトリを作成する、とあります。

-m、もしくは–create-homeオプションを指定することでホームディレクトリも
作成してくれるようなので、今度は-mを指定してuseraddを実行してみます。

# useradd -m test02

# ls -A /home/test02
.bash_logout  .bashrc  .profile

ホームディレクトリが作成されており、/etc/skel ディレクトリ内のファイルもコピーされています。

useraddには-Mというオプションもあり、これは/etc/login.defsで
CREATE_HOMEがyesに設定されていた場合でも
ホームディレクトリを作成しないようにする為のオプションとあります。

つまり、逆にuseraddでホームディレクトリをデフォルトで作成するようにしたい場合は、
/etc/login.defsで設定をしておけば良いということになりますね。

ということで実際に/etc/login.defsに追記してみます。

# vi /etc/login.defs
CREATE_HOME     yes

この状態で、useraddでユーザを作成すると
-mオプションを指定せずともホームディレクトリが作成されるようになりました。

# useradd test03

# ls -A /home/test03
.bash_logout  .bashrc  .profile

次にadduserでユーザを作成してみます。

# adduser test04
 Adding user test04' ... Adding new grouptest04' (1005) …
 Adding new user test04' (1005) with grouptest04' …
 Creating home directory /home/test04' ... Copying files from/etc/skel' …
 New password:
 BAD PASSWORD: The password is shorter than 8 characters
 Retype new password:
 passwd: password updated successfully
 Changing the user information for test04
 Enter the new value, or press ENTER for the default
         Full Name []: Full_Name
         Room Number []: Room_Number
         Work Phone []: Work_Phone
         Home Phone []: Home_Phone
         Other []: Other
 Is the information correct? [Y/n] Y

上記のように、パスワードとユーザ情報(Full NameからOtherの箇所)を
対話形式で設定することができます。
ちなみに今回は簡単なパスワードを入力している為、「BAD PASSWORD」として
警告メッセージが出力されていますが、設定自体は問題なくできました。

/etc/passwd を見ると、ユーザ情報はコメントとして記録されているようです。
もちろん空欄の状態でも登録できます。

# grep test04 /etc/passwd
test04:x:1005:1005:Full_Name,Room_Number,Work_Phone,Home_Phone,Other:/home/test04:/bin/bash

ただ、パスワードを一緒に設定してくれるのはいいけど、
ユーザ情報の設定はいらない…という時、5回もENTERキーを押すのは正直面倒くさいです。

manのマニュアルを見ると、このユーザ情報は–gecosオプションで指定することができるようです。

adduser will copy files from SKEL into the home directory and prompt for finger (gecos) information and a password.
The gecos may also be set with the --gecos option.

下記のように–gecosオプションで空欄(ダブルクォーテーションで括るだけ)を
指定して実行してみます。

# adduser --gecos "" test05
 Adding user test05' ... Adding new grouptest05' (1006) …
 Adding new user test05' (1006) with grouptest05' …
 Creating home directory /home/test05' ... Copying files from/etc/skel' …
 New password:
 BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary word
 Retype new password:
 passwd: password updated successfully
 
# grep test05 /etc/passwd
test05:x:1006:1006:,,,:/home/test05:/bin/bash

これだと、設定するパスワードの入力のみ求められ、ユーザ情報の入力は必要ありませんでした。
特にこれらの情報を入力する必要がない時は、このオプションを指定すると
少し楽になりますね。

ちなみに、useraddで作成したユーザのログインシェルはデフォルトで/bin/shですが、
adduserの場合は/bin/bashとなっています。CentOS系のデフォルトは/bin/bashです。

# grep "test0[15]" /etc/passwd
test01:x:1002:1002::/home/test01:/bin/sh
test05:x:1006:1006:,,,:/home/test05:/bin/bash

useraddは-Dオプションを指定するとデフォルト値を表示することができ、
更に-sを指定するとログインシェルのデフォルト値を変更することができます。

# useradd -D -s /bin/bash

# useradd -D | grep -i shell
SHELL=/bin/bash

ユーザ作成だけで思った以上の量になってしまいました。
Password Policyあたりの内容はまた今度の機会にでも。


それではまた。