本記事ではLinuxを使っているユーザー向けにユーザーを作成したり削除したり、既存ユーザーの情報を変更する方法を解説します。
Linuxには大きく分けてDebian系とRedHat系の2種類のディストリビューションが存在し、それぞれ管理方法が異なる箇所があります。
そのため両方のディストリビューションを考慮して分かりやすく解説していきます。
なお、Debian系とはDebian Linux、Ubuntu Linuxなどを指し、RedHat系とはRedHat Enterprise Linux、CentOS Stream、AlmaLinux、RockyLinux、Fedoraなどを指します。
ユーザーを作成する
adduerとuseraddの違い
Linuxにはユーザーを追加するコマンドとして「adduser」と「useradd」が用意されていますが、どちらを使っても問題ありません。
adduser
はSystem Vで追加されたコマンドでuseradd
はBSDで追加されたコマンドです。Linuxでは互換性のためどちらのコマンドも使えるようになっています。
注意点としてDebian系Linuxはuseradd
とadduser
が別のプログラムとして用意されていますが、RedHat系Linuxのadduser
はuseradd
にシンボリックリンクを張っています。そのためRedHat系Linuxではadduser
はuseradd
と同じコマンドです。
古くからのUNIXユーザーの方は余計な表示が出力されずスクリプト内でも使いやすいuseradd
の方が好みかも知れません。また、複数のディストリビューションを使う方は混乱を避けるためuseradd
だけ使う方がトラブルを避けられるでしょう。
Debian系Linuxではadduserを推奨していますが、初心者の方は対話的なuseraddの方が間違いが少ないという配慮だと思います。
adduserでユーザーを追加する
RedHat系Linuxを利用している場合、adduserコマンドはuseraddと同じなので「useraddでユーザーを追加する」をご覧ください。
引数にユーザー名を指定するだけでユーザーを追加できます。対話的に進むのでパスワードを2回入力します。
root@ubuntu:~# adduser foo Adding user `foo' ... Adding new group `foo' (1001) ... Adding new user `foo' (1001) with group `foo' ... Creating home directory `/home/foo' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for foo 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] y root@ubuntu:~#
ユーザーIDを指定してユーザーを作成する
ユーザーIDを指定したい場合はuid
オプションを使います。
root@ubuntu:~# adduser --uid 1234 foo Adding user `foo' ... Adding new group `foo' (1234) ... Adding new user `foo' (1234) with group `foo' ... Creating home directory `/home/foo' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for foo 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] y root@ubuntu:~#
ユーザーIDが1234となっている事を確認します。
root@ubuntu:~# id foo uid=1234(foo) gid=1234(foo) groups=1234(foo) root@ubuntu:~#
useraddでユーザーを追加する
Debian系Linuxのuseraddは自動的にホームディレクトリを作成しないので、ディレクトリを作成する「-m」オプションを付けています。RedHat系Linuxは自動的にホームディレクトリが作成されます。
引数にユーザー名を指定するだけでユーザーを追加できます。パスワードは設定されません。
[root@rocky9 ~]# useradd -m foo [root@rocky9 ~]#
ユーザー追加時にパスワードを設定する
パスワードを指定してユーザーを追加するには-p
オプションを使います。
[root@rocky9 ~]# useradd -m -p MyPassword foo [root@rocky9 ~]#
ユーザーIDを指定してユーザーを作成する
ユーザーIDを指定したい場合は-u
オプションを使います。
[root@rocky9 ~]# useradd -m -u 1234 foo [root@rocky9 ~]#
パスワードも同時に設定できます。
[root@rocky9 ~]# useradd -m -u 1234 -p MyPassword foo [root@rocky9 ~]#
ユーザーを削除する
deluserとuserdelの違い
deluser
はSystem Vで追加されたコマンドでuserdel
はBSDで追加されたコマンドです。
Debian系Linuxではdeluser
とuserdel
の両方を使えますが、RedHat系Linuxはuserdel
のみ使えます。
deluserでユーザーを削除する
引数にユーザー名を指定すればユーザーを削除できます。
root@ubuntu22:~# deluser foo Removing user `foo' ... Warning: group `foo' has no more members. Done. root@ubuntu22:~#
しかしホームディレクトリは残ったままになります。
root@ubuntu22:~# ls /home/ foo root@ubuntu22:~#
ユーザー削除時にホームディレクトリを削除する
ユーザー削除時にホームディレクトリを削除するには--remove-home
オプションを使います。
root@ubuntu22:~# deluser --remove-home foo Looking for files to backup/remove ... Removing files ... Removing user `foo' ... Warning: group `foo' has no more members. Done. root@ubuntu22:~#
これでホームディレクトリを削除できます。
関連するすべてのファイルを削除する
削除したいユーザーが作成したファイルや関連するファイルをすべて削除したい場合は--remove-home
オプションを使います。
root@ubuntu22:~# deluser --remove-all-files foo Looking for files to backup/remove ... /usr/sbin/deluser: Cannot handle special file /proc/1/task/1/fd/0 /usr/sbin/deluser: Cannot handle special file /proc/1/task/1/fd/1 /usr/sbin/deluser: Cannot handle special file /proc/1/task/1/fd/2 … root@ubuntu22:~#
userdelでユーザーを削除する
引数にユーザー名を指定すればユーザーを削除できます。
[root@rocky9 ~]# userdel foo [root@rocky9 ~]#
しかしホームディレクトリは残ったままになります。
ホームディレクトリとメールスプールを削除する
ユーザー削除時にホームディレクトリとメールスプールを削除するには-r
オプションを使います。
[root@rocky9 ~]# userdel -r foo [root@rocky9 ~]#
UIDを指定してファイル・ディレクトリを探したり削除したりする方法
ユーザー削除時にディレクトリやファイルを削除し忘れることがあるでしょう。また、削除漏れがあるかも知れません。
そのような場合、find
コマンドを使うとUIDを指定してファイルやディレクトリを探すことができます。
[root@rocky9 ~]# find / -uid 1001 2>/dev/null /tmp/foo /var/spool/mail/foo /home/foo /home/foo/.bash_logout /home/foo/.bash_profile /home/foo/.bashrc /home/foo/.bash_history [root@rocky9 ~]#
ファイルやディレクトリが存在していて、すべて削除したい場合は-exec rm -rf "{}"
を付ける事によって削除できます。
[root@rocky9 ~]# find / -uid 1001 -exec rm -rf "{}" \; 2>/dev/null [root@rocky9 ~]#
削除したファイルが分かるように出力したい場合はrm
コマンドに-v
オプションを付けます。
[root@rocky9 ~]# find / -uid 1001 -exec rm -rfv "{}" \; 2>/dev/null '/var/spool/mail/foo' を削除しました '/home/foo/.bash_logout' を削除しました '/home/foo/.bash_profile' を削除しました '/home/foo/.bashrc' を削除しました removed directory '/home/foo' [root@rocky9 ~]#
ユーザー情報を変更する
ユーザー情報を変更するにはusermod
コマンドを使います。
ホームディレクトリを変更する
ホームディレクトリを変更するには-d
オプションを使います。
[root@rocky9 ~]# usermod -d /home/foo2 foo [root@rocky9 ~]#
ただし、この方法は/etc/passwdを更新しますがホームディレクトリは元のままです。
[root@rocky9 ~]# grep foo /etc/passwd foo:x:1001:1001::/home/foo2:/bin/bash [root@rocky9 ~]#
[root@rocky9 ~]# ls /home/ foo [root@rocky9 ~]#
ホームディレクトリを移動する
ホームディレクトリを新ディレクトリに移動するには-d
オプション使用時に-m
オプションを追加します。
[root@rocky9 ~]# usermod -m -d /home/foo2 foo [root@rocky9 ~]#
[root@rocky9 ~]# ls /home/ foo2 [root@rocky9 ~]#
ユーザーIDを変更する
ユーザーIDを変更するには-u
オプションを使います。
[root@rocky9 ~]# usermod -u 1234 foo [root@rocky9 ~]#
別のユーザーと同じIDに変更する
基本的に既存のUIDと重複することはできません。
[root@rocky9 ~]# usermod -u 1000 foo usermod: UID '1000' は既に存在します [root@rocky9 ~]#
意図的に別のユーザーIDと重複させたい場合は-o
オプションを追加します。
同じUIDにする影響が分からない場合は実施しないでください
[root@rocky9 ~]# usermod -o -u 1000 foo [root@rocky9 ~]#
グループIDを変更する
グループIDを変更するには-g
オプションを使います。グループは既に存在している必要があります。
[root@rocky9 ~]# usermod -g 1000 foo [root@rocky9 ~]#
別のグループに追加する
主グループはそのままにしておき、サブグループとして別のグループに追加したい場合は-G
オプションを使います。
[root@rocky9 ~]# usermod -G 1000 foo [root@rocky9 ~]#
これで別のグループに追加されます。
[root@rocky9 ~]# id foo uid=1001(foo) gid=1001(foo) groups=1001(foo),1000(bar) [root@rocky9 ~]#
ただし、この状態で再度別のグループに追加しようとすると元のグループから削除されます。
[root@rocky9 ~]# usermod -G 0 foo [root@rocky9 ~]# id foo uid=1001(foo) gid=1001(foo) groups=1001(foo),0(root) [root@rocky9 ~]#
このようにGID 1000から抜けてしまいました。GID 0と1000の両方に所属させたい場合は-G
オプションに-a
オプションを追加します。
[root@rocky9 ~]# usermod -a -G 1000 foo [root@rocky9 ~]#
GID 0に所属している状態で上記のコマンドを実行すると、次のようにGID 01000の両方に所属します。
[root@rocky9 ~]# id foo uid=1001(foo) gid=1001(foo) groups=1001(foo),0(root),1000(bar) [root@rocky9 ~]#
サブグループから削除する
サブグループから削除したい場合は-G
オプションで主グループを指定します。
[root@rocky9 ~]# id foo uid=1001(foo) gid=1001(foo) groups=1001(foo),0(root),1000(bar) [root@rocky9 ~]#
以下のコマンドでサブグループ(GID 0と1000)から抜けます。
[root@rocky9 ~]# usermod -G 1001 foo [root@rocky9 ~]#
所属グループを確認すると、GID 0 と1000から抜けている事が分かります。
[root@rocky9 ~]# id foo uid=1001(foo) gid=1001(foo) groups=1001(foo) [root@rocky9 ~]#
パスワードを変更する
カレントユーザーでパスワードを変更する場合は単にpasswd
コマンドを実行します。
[root@rocky9 ~]# passwd ユーザー root のパスワードを変更。 新しい パスワード: 新しい パスワードを再入力してください: passwd: すべての認証トークンが正しく更新できました。 [root@rocky9 ~]#
別のユーザーのパスワードを変更したい場合はユーザー名を引数に付けます。これはrootユーザーのみ実行可能です。
[root@rocky9 ~]# passwd foo ユーザー foo のパスワードを変更。 新しい パスワード: 新しい パスワードを再入力してください: passwd: すべての認証トークンが正しく更新できました。 [root@rocky9 ~]#
usermodでも-p
オプションを使うとパスワードを変更できます。引数にパスワードを指定できるのでバッチ処理ではusermodが便利です。
[root@rocky9 ~]# usermod -p MyPassword foo [root@rocky9 ~]#
ログインシェルを変更する
カレントユーザーでログインシェルを変更する場合は単にchsh
コマンドを実行します。
[root@rocky9 ~]# chsh root のシェルを変更します。 新しいシェル [/bin/bash]: /bin/sh シェルを変更しました。 [root@rocky9 ~]#
別のユーザーのパスワードを変更したい場合はユーザー名を引数に付けます。これはrootユーザーのみ実行可能です。
[root@rocky9 ~]# chsh foo foo のシェルを変更します。 新しいシェル [/bin/bash]: /bin/sh シェルを変更しました。 [root@rocky9 ~]#
usermodでも-sオプションを使うとログインシェルを変更できます。バッチ処理でログインシェルを変更する場合はusermodが便利です。
[root@rocky9 ~]# usermod -s /bin/sh foo [root@rocky9 ~]#
ログインユーザー名を変更する
ログインユーザー名は-l
オプションで変更できます。
[root@rocky9 ~]# usermod -l foo2 foo [root@rocky9 ~]# id foo2 uid=1001(foo2) gid=1001(foo) groups=1001(foo) [root@rocky9 ~]#
ホームディレクトリなどに変更はないので、必要であれば適宜変更してください。
ユーザーをロックする
ユーザーをロックするには-L
オプションを使います。
[root@rocky9 ~]# usermod -L foo
ユーザーをロックするとリモートログインできなくなります。
$ ssh 192.168.0.3 -l foo foo@192.168.0.3's password: Permission denied, please try again.
/etc/shadowファイルでもロックされていることが分かります。以下のように、ロックされたユーザーのパスワードの先頭に「!」が追加されます。
[root@rocky9 ~]# grep foo /etc/shadow foo:!asojfo0i2wjrfoiewjfiw0hjefri02ojfaiosewdfjios:19638:0:99999:7::: [root@rocky9 ~]#
ユーザーのロックを解除するには-U
オプションを使います。
[root@rocky9 ~]# usermod -U foo [root@rocky9 ~]#
まとめ
ユーザー管理はここで解説したコマンド・オプションで十分対応できるはずです。
Linuxには複数のディストリビューションがあり、Debian系とRedHat系では一部コマンドが異なる場合があるので、そこだけ注意してください。