概要
UNIX や Linux システムでは、ユーザーとグループはシステム上でのアクセス制御と権限管理の基本的な要素です。本記事では、ユーザーとグループに関する基本的な概念とコマンドについて解説します。
ユーザー
ユーザーはシステムにログインして操作を行う個人やプロセスを指します。各ユーザーには一意のユーザー ID (UID) が割り当てられます。
グループ
グループはユーザーをまとめて管理するための単位です。各グループには一意のグループ ID (GID) が割り当てられます。ユーザーは複数のグループに所属することができます。 UNIX や Linux システムでは、ユーザーはプライマリグループとセカンダリグループに所属することができます。
プライマリグループ
プライマリグループは、ユーザーに必ず割り当てられる基本のグループで、ユーザーのデフォルトの所属グループです。 ユーザーがファイルを新規作成する際、そのファイルの所有グループとして自動的に割り当てられます。
プライマリグループの確認方法:
id -gn <username>
- プライマリグループは常に 1 つのみ設定できます。
- 一般的に、ユーザー専用のグループ(プライベートグループ)が割り当てられます。
セカンダリグループ
セカンダリグループは、ユーザーが追加で所属するグループです。セカンダリグループは、ユーザーに特定のリソースへの追加アクセス権限を付与するために使用されます。
セカンダリグループの確認方法:
id -Gn <username>
- ユーザーは複数のセカンダリグループに所属することができます。
プライベートグループ
各ユーザー専用に自動的に作成されるグループです。ユーザー名と同じ名前を持つグループで、通常そのユーザーだけが所属します。
- 他のユーザーとグループを共有する必要がない場合に、ユーザーのプライマリグループとして使用されます。
ユーザーの管理
以下の表に、各コマンドの概要と使用例を整理しました。
コマンド | 概要 |
---|---|
useradd |
ユーザーをシステムに追加するためのコマンド。 |
userdel |
システムからユーザーを削除するためのコマンド。 |
adduser |
対話式でユーザーをシステムに追加するためのコマンド。 |
deluser |
対話式でシステムからユーザーを削除するためのコマンド。 |
usermod |
既存のユーザーアカウントを変更するためのコマンド。 |
chfn |
ユーザーの GECOS 情報を変更するためのコマンド。 |
chsh |
ユーザーのログインシェルを変更するためのコマンド。 |
chage |
ユーザーアカウントの有効期限を設定するコマンド。 |
getent |
ユーザーの情報をデータベースから取得するコマンド。 |
passwd |
ユーザーのパスワードを設定するコマンド。 |
ユーザーの追加 (useradd)
ユーザーの追加は useradd
コマンドで行います。
オプション | 説明 |
---|---|
-c |
ユーザーのコメントを指定します (例:フルネーム)。 |
-d |
ユーザーのホームディレクトリを指定します。 |
-e |
アカウントの有効期限を指定します (YYYY-MM-DD 形式)。 |
-f |
パスワードの有効期限が切れた後、アカウントが無効になるまでの日数を指定します。 |
-g |
プライマリグループを指定します。 |
-G |
セカンダリグループを指定します (カンマ区切りで複数指定可)。 |
-m |
ホームディレクトリを作成します。 |
-M |
ホームディレクトリを作成しません。 |
-N |
ユーザーのプライベートグループを作成しません。 |
-p |
暗号化されたパスワードを指定します。 |
-r |
システムアカウントを作成します。 |
-s |
ユーザーのログインシェルを指定します。 |
-u |
ユーザー ID を指定します。 |
-k |
スケルトンディレクトリを指定します (ホームディレクトリの初期内容)。 |
以下は、useradd
コマンド使用例です:
sudo useradd -m -s /bin/bash -G video,audio,sudo username
GECOS フィールド
GECOS
フィールドは、もともと「General Comprehensive Operating System」の略で、UNIX や Linux のシステムにおいてユーザーアカウントに関する追加情報を保存するためのフィールドです。
/etc/passwd
ファイルの各エントリに含まれるフィールドの 1 つで、通常はユーザーのフルネームや連絡先情報などを含むために使用されます。
GECOS
フィールドは通常、カンマ(,
)で区切られた情報を含みます。典型的な内容は次の通りです:
- フルネーム
- オフィスの部屋番号(オプション)
- オフィスの電話番号(オプション)
- 自宅の電話番号(オプション)
- その他の情報(オプション)
以下は、/etc/passwd
ファイルのエントリの例です:
ubuntu:x:1000:1000:John Doe,123,555-1234,555-6789,Additional Info:/home/ubuntu:/bin/bash
この例では、GECOS
フィールドに以下の情報が含まれています:
- フルネーム: John Doe
- オフィスの部屋番号: 123
- オフィスの電話番号: 555-1234
- 自宅の電話番号: 555-6789
- その他の情報: Additional Info
ユーザーを追加する際に、useradd
コマンドの -c
オプションを使用して GECOS
フィールドを設定できます。
sudo useradd -c "John Doe,123,555-1234,555-6789,Additional Info" <username>
また、chfn
コマンドであとから設定できます。
sudo chfn [option] <username>
オプション | 説明 | 使用例 |
---|---|---|
-f |
フルネーム(Full Name)を設定する | sudo chfn -f "username" <username> |
-r |
オフィス番号(Room Number)を設定する | sudo chfn -r "123" <username> |
-w |
仕事用電話番号(Work Phone)を設定する | sudo chfn -w "555-1234" <username> |
-h |
自宅電話番号(Home Phone)を設定する | sudo chfn -h "555-5678" <username> |
-o |
その他の情報(Other)を設定する | sudo chfn -o "Additional Info" <username> |
-u |
指定されたユーザーの GECOS フィールドを空にする | sudo chfn -u <username> |
スケルトンディレクトリ
Linux で新しいユーザーを作成するとき、スケルトンディレクトリ (/etc/skel
) にある内容が新しいユーザーのホームディレクトリにコピーされます。これにより、すべての新しいユーザーが同じ基本的なディレクトリ構造や設定ファイルを持つことができます。
/etc/skel
ディレクトリの内容には、例えば以下のようなファイルやディレクトリが含まれます:
/etc/skel/
├── .bash_logout
├── .bashrc
├── .profile
これらのファイルは新しいユーザーが作成されると、そのユーザーのホームディレクトリにコピーされます。例えば、新しいユーザー username
を作成した場合、そのホームディレクトリには次のような内容が含まれます:
/home/username/
├── .bash_logout
├── .bashrc
├── .profile
/etc/skel
ディレクトリをカスタマイズすることで、新しいユーザーのデフォルト設定を変更することができます。例えば、すべての新しいユーザーに特定のエイリアスや環境変数を設定したい場合は、/etc/skel/.bashrc
ファイルを編集します。
ホームディレクトリ
ホームディレクトリ(Home Directory)とは、各ユーザーに割り当てられた個別のディレクトリで、そのユーザーの個人ファイルや設定ファイルを保存する場所です。
username
ユーザーのホームディレクトリは通常/home/username
です。- システム管理者(root)のホームディレクトリは通常
/root
です。
現在のユーザーのホームディレクトリを確認するには、以下のコマンドを使用します:
echo $HOME
または、
cd ~
pwd
ユーザーのデフォルトシェル
Linux システムでは、ユーザーごとにデフォルトシェルを設定できます。 デフォルトシェルとは、ユーザーがログインしたときに自動的に起動されるコマンドラインインターフェイスのことです。 デフォルトシェルとは、以下のコマンドで確認できます。
grep ^<username> /etc/passwd
ユーザーのシェルは、chsh
コマンドを使って変更することができます。
chsh -s /bin/bash <username>
ユーザーの削除 (userdel)
ユーザーの追加は userdel
コマンドで行います。
オプション | 説明 |
---|---|
-f |
強制的にユーザーアカウントを削除します。このオプションは、ユーザーがログイン中でもアカウントを削除します。 |
-r |
ユーザーのホームディレクトリとメールスプールを削除します。 |
userdel
コマンドを使用すると、指定したユーザーアカウントを削除することができます。基本的な構文は次のとおりです。
sudo userdel <username>
このコマンドは、指定したユーザーアカウントをシステムから削除しますが、ユーザーのホームディレクトリやメールスプールは削除しません。
ホームディレクトリとメールスプールも削除する
ユーザーアカウントに加えてホームディレクトリやメールスプールも削除したい場合は、-r
オプションを使用します。
sudo userdel -r <username>
ユーザーがログイン中の場合
ユーザーが現在ログイン中の場合、userdel
コマンドはエラーを返すことがあります。この場合、先にそのユーザーのログインセッションを終了させる必要があります。pkill
コマンドを使用して該当ユーザーのセッションを終了させることができます。
sudo pkill -u <username>
sudo userdel <username>
その後、userdel
コマンドを実行してユーザーを削除します。
または、-f
オプションで強制的に削除することもできます。
sudo userdel -f <username>
ユーザー情報の変更 (usermod)
ユーザー情報の変更は usermod
コマンドで行います。
オプション | 説明 |
---|---|
`-c | ユーザーのコメントを変更します。 |
-d |
ユーザーのホームディレクトリを変更します。 |
-e |
アカウントの有効期限を設定します。 |
-G |
ユーザーを新しいセカンダリグループに追加します。 |
-aG |
ユーザーを既存のグループに追加します(-G オプションと併用)。 |
-l |
ユーザー名を変更します。 |
-L |
ユーザーアカウントをロックします。 |
-s |
ユーザーのデフォルトシェルを変更します。 |
-u |
ユーザー ID (UID) を変更します。 |
-U |
ユーザーアカウントのロックを解除します。 |
-p |
パスワードを設定します(暗号化された形式で)。 |
ユーザーのホームディレクトリを変更する:
sudo usermod -d /new/home/directory username
ユーザーのデフォルトシェルを変更する:
sudo usermod -s /bin/zsh username
ユーザーを新しいグループに追加する:
-aG
とした場合、既存のセカンダリグループに加えて、新たにnewgroup
に所属します。sudo usermod -aG newgroup username
一方、
-G
とした場合、ユーザーのセカンダリグループにnewgroup
を設定します。 ユーザーが元々所属していた他の補助グループはすべて上書きされますsudo usermod -G newgroup username
ユーザーアカウントをロックする:
sudo usermod -L username
ユーザーアカウントのロックを解除する:
sudo usermod -U username
ユーザー名を変更する:
sudo usermod -l newusername oldusername
アカウントの有効期限を設定する:
sudo usermod -e 2025-12-31 username
ユーザーアカウントのロック
ユーザーアカウントのロックとは、特定のユーザーがシステムにログインできないようにすることです。 Linux システムでユーザーアカウントをロックすることで、セキュリティを強化し、特定のユーザーがシステムへのアクセスを一時的または永久に制限することができます。
アカウントのロック方法
Linux では、usermod
コマンドまたは passwd
コマンドを使用してユーザーアカウントをロックすることができます。
usermod
コマンドを使用する方法
usermod
コマンドを使用してアカウントをロックするには、以下のように -L
オプションを使用します:
sudo usermod -L <username>
passwd
コマンドを使用する方法
passwd
コマンドを使用してアカウントをロックするには、以下のように -l
オプションを使用します:
sudo passwd -l <username>
アカウントのロック解除方法
ロックされたアカウントを解除するには、usermod
コマンドまたは passwd
コマンドを使用します。
usermod
コマンドを使用する方法
usermod
コマンドを使用してアカウントのロックを解除するには、以下のように -U
オプションを使用します:
sudo usermod -U <username>
passwd
コマンドを使用する方法
passwd
コマンドを使用してアカウントのロックを解除するには、以下のように -u
オプションを使用します:
sudo passwd -u <username>
ユーザーのパスワードを設定・変更する
passwd
コマンドを使用してユーザーのパスワードを設定または変更できます。
オプション | 説明 |
---|---|
-d |
ユーザーのパスワードを削除し、パスワードなしでログインできるようにします。 |
-e |
パスワードを即座に期限切れにし、次回ログイン時にパスワードの変更を強制します。 |
-l |
ユーザーアカウントをロックします。 |
-u |
ユーザーアカウントのロックを解除します。 |
自身のパスワードを変更する
自身のパスワードを変更する場合、管理者権限なしに変更できます。
passwd
このコマンドを実行すると、新しいパスワードの入力を求められます:
Enter new UNIX password:
Retype new UNIX password:
他のユーザーのパスワードを変更する
他のユーザーのパスワードを変更する場合は管理者権限が必要となります。
例:
sudo passwd <username>
コマンドまとめ
ユーザーアカウント作成時
項目 | コマンド | 例 |
---|---|---|
ユーザー名 | useradd <username> |
useradd username |
ユーザー ID | useradd -u <UID> <username> |
useradd -u 1001 username |
プライマリグループ | useradd -g <group> <username> |
useradd -g users username |
セカンダリグループ | useradd -G <group1>,<group2> <username> |
useradd -G wheel,dialout username |
ホームディレクトリ | useradd -d <path> <username> |
useradd -d /home/username username |
ログインシェル | useradd -s <shell> <username> |
useradd -s /bin/bash username |
アカウントの有効期限 | useradd -e <YYYY-MM-DD> <username> |
useradd -e 2025-12-31 username |
パスワードの有効期限 | useradd -f <days> <username> |
useradd -f 30 username |
コメント | useradd -c <comment> <username> |
useradd -c "Example User" username |
設定を変更する
項目 | コマンド | 例 |
---|---|---|
ユーザー名 | usermod -l <new_username> <username> |
usermod -l newname username |
ユーザー名 ID | usermod -u <UID> <username> |
usermod -u 1001 username |
プライマリグループ | usermod -g <group> <username> |
usermod -g users username |
セカンダリグループ (上書き) | usermod -G <group1>,<group2> <username> |
usermod -G wheel,dialout username |
セカンダリグループ (追加) | usermod -aG <group1>,<group2> <username> |
usermod -aG wheel,dialout username |
ホームディレクトリ | usermod -d <path> <username> |
usermod -d /home/username username |
ログインシェル | usermod -s <shell> <username> |
usermod -s /bin/bash username |
アカウントの有効期限 | usermod -e <YYYY-MM-DD> <username> |
usermod -e 2025-12-31 username |
パスワードの有効期限 | usermod -f <days> <username> |
usermod -f 30 username |
コメント | usermod -c <comment> <username> |
usermod -c "Example User" username |
GECOS (フルネーム) | usermod -c <GECOS> <username> |
usermod -c "Neko Bean" username |
GECOS (オフィスの部屋番号) | usermod -c <GECOS> <username> |
usermod -c "Room 123" username |
GECOS (オフィスの電話番号) | usermod -c <GECOS> <username> |
usermod -c "123-456-7890" username |
GECOS (自宅の電話番号) | usermod -c <GECOS> <username> |
usermod -c "098-765-4321" username |
GECOS (その他情報) | usermod -c <GECOS> <username> |
usermod -c "Additional Info" username |
パスワード | passwd <username> |
passwd username |
設定を確認
項目 | コマンド |
---|---|
ユーザー名 | whoami |
ユーザー名 ID | id -u <username> |
プライマリグループ | id -gn <username> |
セカンダリグループ | id -Gn <username> |
自身が所属しているグループ | groups |
ホームディレクトリ | getent passwd <username> | cut -d: -f6 |
ログインシェル | getent passwd <username> | cut -d: -f7 |
アカウントの有効期限 | chage -l <username> |
パスワードの有効期限 | chage -l <username> |
コメント | getent passwd <username> |
GECOS (フルネーム) | getent passwd <username> | cut -d: -f5 | cut -d, -f1 |
GECOS (オフィスの部屋番号) | getent passwd <username> | cut -d: -f5 | cut -d, -f2 |
GECOS (オフィスの電話番号) | getent passwd <username> | cut -d: -f5 | cut -d, -f3 |
GECOS (自宅の電話番号) | getent passwd <username> | cut -d: -f5 | cut -d, -f4 |
GECOS (その他情報) | getent passwd <username> | cut -d: -f5 | cut -d, -f5 |
パスワード情報 | sudo passwd -S <username> |
コメント