簡単!Ubuntuへのユーザー追加手順を徹底解説

簡単!Ubuntuへのユーザー追加手順を徹底解説

はじめに:なぜUbuntuで新しいユーザーを追加する必要があるのか?

現代のコンピューティング環境において、セキュリティと効率的なシステム運用は非常に重要な要素です。特に、サーバーとして利用されることの多いUbuntuのようなLinuxシステムでは、複数のユーザーがシステムを利用したり、特定のタスクを実行したりすることが一般的です。しかし、すべてのユーザーがシステム全体に対する無制限の権限(root権限)を持つべきではありません。

新しいユーザーを追加し、それぞれに適切な権限を付与することは、以下の点で非常に重要です。

  1. セキュリティの向上: rootユーザーはシステムに対する全ての権限を持ちます。もしrootアカウントが侵害されると、システム全体が危険にさらされます。通常の作業にはroot権限を必要としない標準ユーザーを使用することで、潜在的な被害を最小限に抑えることができます。また、各ユーザーに固有のアカウントを持たせることで、誰がどのような操作を行ったかを追跡しやすくなります。
  2. 権限の分離: ユーザーごとにアクセスできるファイルや実行できるコマンドを制限できます。これにより、誤って重要なシステムファイルを変更したり削除したりするリスクを減らせます。例えば、ウェブサーバーのファイルを管理するユーザー、データベースを操作するユーザー、通常のアプリケーションを使うユーザーなど、役割に応じて権限を分けられます。
  3. カスタマイズ: 各ユーザーは自分自身のホームディレクトリを持ち、個別の設定(デスクトップ環境、シェルの設定ファイル、アプリケーションの設定など)を保存できます。これにより、他のユーザーの設定に影響を与えることなく、自分好みの環境を構築できます。
  4. 管理の効率化: 複数の人が同じシステムを利用する場合、それぞれが個別のアカウントを持つことで、ログイン状態の管理、リソースの使用状況の把握などが容易になります。

Ubuntuを含むLinuxシステムにおけるユーザー管理は、これらの理由からシステム管理の基本中の基本と言えます。この記事では、「簡単!」をキーワードに、初心者の方でも迷うことなくUbuntuに新しいユーザーを追加できるように、基本的なコマンドラインでの手順から、より詳細な設定、GUIでの方法、さらにはユーザー管理に関連する重要な概念やトラブルシューティング、セキュリティ上の考慮事項まで、約5000語を費やして徹底的に解説します。

さあ、Ubuntuでのユーザー管理の世界へ踏み込みましょう!

前提知識:Linuxのユーザーとグループ、権限システム

Ubuntuでユーザーを追加する前に、Linuxにおける「ユーザー」と「グループ」、そしてそれらがどのように「権限」と結びついているのか、基本的な概念を理解しておきましょう。これは、ユーザーを追加するだけでなく、追加したユーザーに適切な権限を与える上で不可欠な知識です。

ユーザー (Users)

システム上で操作を行う主体です。各ユーザーは一意の識別子(UID – User ID)を持っています。UID 0は常にrootユーザー(システム管理者)に割り当てられています。通常、システムによって使用されるシステムユーザー(UID 1-999 ※Ubuntuの新しいバージョンでは1-499)と、人間が対話的に利用する一般ユーザー(UID 1000以上)に大別されます。

グループ (Groups)

複数のユーザーをまとめたものです。各グループは一意の識別子(GID – Group ID)を持っています。ファイルやディレクトリに対する権限を設定する際に、個々のユーザーではなくグループに対して権限を与えることで、複数のユーザーにまとめて権限を付与したり剥奪したりすることが容易になります。ユーザーは一つ以上のグループに所属できます。ユーザーを作成すると、通常はそのユーザー名と同じ名前の「プライマリグループ」が自動的に作成され、そのユーザーがそのグループの唯一のメンバーとなります。これとは別に、「セカンダリグループ」にも所属できます。

権限 (Permissions)

Linuxのファイルシステムでは、ファイルやディレクトリに対して、誰がどのような操作をできるかという権限が細かく設定されています。権限は以下の3つの主体に対して設定されます。

  • 所有者 (Owner): そのファイルやディレクトリを作成したユーザーです。
  • グループ (Group): そのファイルやディレクトリに関連付けられたグループのメンバーです。
  • その他 (Others): 所有者でもなく、関連付けられたグループのメンバーでもない全てのユーザーです。

それぞれの主体に対して、以下の3種類の操作権限を設定できます。

  • 読み取り (Read – r): ファイルの内容を読んだり、ディレクトリ内のファイル一覧を表示したりする権限です。
  • 書き込み (Write – w): ファイルの内容を変更したり、ディレクトリ内に新しいファイルを作成したり、既存のファイルを削除・移動したりする権限です。
  • 実行 (Execute – x): ファイルを実行したり(プログラムの場合)、ディレクトリに移動したり(ディレクトリの場合)する権限です。

これらの権限は通常、rwxrwxrwx のような10文字の文字列で表現されます。最初の1文字はファイルタイプ(-はファイル、dはディレクトリなど)を示し、続く3文字が所有者、次の3文字がグループ、最後の3文字がその他のユーザーに対する権限を示します。例えば、rw-r--r-- は、所有者は読み書き可能、グループメンバーは読み取りのみ可能、その他のユーザーも読み取りのみ可能、という権限を示します。

権限は数値(8進数)でも表現されます。r=4, w=2, x=1 として、各主体の権限の合計値で表します。例えば、rwx4+2+1=7rw-4+2+0=6r--4+0+0=4 となります。したがって、rwxr-xr-x という権限は数値では 755 と表現されます。

新しいユーザーを作成すると、そのユーザーは通常、自分自身のホームディレクトリ(例: /home/username)の所有者となり、そのディレクトリに対してフル権限(rwx)を持ちます。また、そのホームディレクトリはユーザーのプライマリグループに関連付けられ、グループメンバーにも権限が設定されます。

sudo コマンド

Ubuntuでは、セキュリティ上の理由から、通常はrootユーザーで直接ログインしません。システム管理に必要なroot権限で実行する必要があるコマンドは、sudoコマンドを前につけて実行します。sudoは “substitute user and do” あるいは “super user do” の略で、許可されたユーザーが、自分のパスワードを入力することで、一時的に他のユーザー(デフォルトではroot)としてコマンドを実行できるようにする仕組みです。

新しいユーザーにシステム管理を任せる場合、そのユーザーをsudoコマンドを使用できる特定のグループ(Ubuntuでは通常sudoまたはadminグループ)に追加する必要があります。これにより、そのユーザーは必要に応じてroot権限を借用してシステム管理タスクを実行できます。

ログインシェルとホームディレクトリ

新しいユーザーを作成する際に、ログインシェルホームディレクトリが割り当てられます。

  • ログインシェル: ユーザーがシステムにログインした際に最初に実行されるプログラムです。コマンドを受け付けて実行する役割を担います。Ubuntuのデフォルトはbashですが、zshfishなど、他のシェルを指定することも可能です。
  • ホームディレクトリ: ユーザー固有のファイルや設定が保存される場所です。通常は/home/ディレクトリ以下にユーザー名と同じ名前のディレクトリ(例: /home/alice)として作成されます。ユーザーはこのディレクトリに対する完全な読み書き権限を持ちます。

これらの基本的な概念を理解していれば、ユーザー追加の手順や、追加したユーザーに対する設定変更の意味がより深く理解できるようになります。

基本的なユーザー追加手順:コマンドライン編

Ubuntuでユーザーを追加する最も一般的で柔軟な方法は、コマンドライン(ターミナル)を使用することです。主に二つのコマンド、adduseruseraddがあります。これらは似ていますが、機能や使い方に違いがあります。まずは、より簡単でインタラクティブなadduserコマンドから見ていきましょう。

1. adduser コマンドを使う方法

adduserコマンドは、Debian系のディストリビューション(Ubuntuも含む)で推奨されている高レベルなユーザー管理ツールです。ユーザー作成に必要な一連のタスク(ホームディレクトリ作成、パスワード設定、プライマリグループ設定など)を対話形式で自動的に実行してくれます。

基本的な構文:

bash
sudo adduser [新しいユーザー名]

このコマンドを実行するには、root権限が必要です。そのため、通常は既存のsudo権限を持つユーザーでログインし、sudoを前につけて実行します。

実行例と手順:

新しいユーザーとして「alice」を追加する例を見てみましょう。

bash
sudo adduser alice

Enterキーを押すと、以下のような出力が表示され、対話形式で設定が進みます。

Adding user `alice' ...
Adding new group `alice' (1001) ...
Adding new user `alice' (1001) with group `alice' ...
Creating home directory `/home/alice' ...
Copying files from `/etc/skel' ...
New password:

  1. ユーザー名の確認とグループの作成: adduserは指定したユーザー名(ここではalice)で新しいユーザーアカウントを作成しようとします。同時に、通常はそのユーザー名と同じ名前の新しいグループ(ここではalice)を作成し、そのグループを新しいユーザーのプライマリグループとして割り当てます。ユーザーとグループには、システムが自動的に利用可能なUID/GIDを割り当てます(この例ではUID 1001, GID 1001)。
  2. ホームディレクトリの作成: デフォルトでは、ユーザーのホームディレクトリが/home/[ユーザー名](ここでは/home/alice)として作成されます。
  3. /etc/skelからのファイルのコピー: /etc/skelディレクトリは「スケルトン」ディレクトリと呼ばれ、新しいユーザーのホームディレクトリにデフォルトでコピーされる設定ファイルやディレクトリが置かれています。例えば、シェルの設定ファイル(.bashrc, .profileなど)が含まれています。これにより、新しいユーザーはログインしてすぐに基本的なシェル環境を利用できます。
  4. パスワードの設定: ここで新しいユーザーのパスワードを設定します。「New password:」というプロンプトが表示されたら、設定したいパスワードを入力します。入力時には画面に文字が表示されない(アスタリスクなども出ない)のが一般的です。
    New password:
    Retype new password:

    確認のため、もう一度同じパスワードを入力します。パスワードが一致し、システムのパスワードポリシーを満たしていれば、パスワード設定は成功します。パスワードポリシー(最低文字数、大文字小文字数字記号の使用など)はシステムの設定によって異なります。強力で覚えやすいパスワードを設定しましょう。
  5. ユーザー情報の入力: パスワード設定後、adduserは追加のユーザー情報(氏名、部屋番号、電話番号など)を尋ねます。これらの情報は/etc/passwdファイルの「コメント」または「GECOSフィールド」と呼ばれる部分に格納されます。入力は任意です。入力したくない場合は、Enterキーを連続して押してスキップできます。
    Enter new UNIX password:
    Retype new UNIX password:
    passwd: password updated successfully
    Changing the user information for alice
    Enter the new value, or press ENTER for the default
    Full Name []: Alice Smith <- 氏名を入力
    Room Number []: <- エンターでスキップ
    Work Phone []: <- エンターでスキップ
    Home Phone []: <- エンターでスキップ
    Other []: <- エンターでスキップ
    Is the information correct? [Y/n]
  6. 情報の確認: 入力した情報が表示され、「Is the information correct? [Y/n]」と尋ねられます。内容が正しければYまたはyを入力してEnterキーを押します。間違っている場合はNまたはnを入力すると、再度情報の入力プロンプトに戻ります。

これで、ユーザー「alice」の追加とパスワード設定は完了です。非常に簡単ですね!

2. useradd コマンドを使う方法

useraddコマンドは、より低レベルなユーザー管理ツールです。adduserと比較すると、デフォルトではホームディレクトリを作成したり、パスワード設定を促したりしません。その代わり、多くのオプションがあり、ユーザー作成の各ステップを細かく制御したい場合に適しています。

基本的な構文:

bash
sudo useradd [オプション] [新しいユーザー名]

useradd単体で実行しても、多くの場合、ユーザーアカウントのエントリが/etc/passwdに追加されるだけで、ログインに必要なホームディレクトリやパスワードは設定されません。そのため、useraddを使用した場合は、通常は後続のステップが必要です。

よく使うオプション:

  • -m, --create-home: ホームディレクトリを作成します。これを指定しないとホームディレクトリは作成されません。/etc/skelの内容もコピーされます。
  • -s シェル, --shell シェル: ユーザーのログインシェルを指定します(例: /bin/bash, /bin/sh, /bin/zsh, /usr/sbin/nologinなど)。指定しない場合、システムのデフォルトシェル(通常は/bin/shまたは/bin/bash)が使われます。
  • -g グループ名, --gid グループ名: ユーザーのプライマリグループを指定します。指定しない場合、同名のグループが作成されるか、デフォルトのグループ(通常はGID 100またはそれ以上)が割り当てられます。
  • -G グループ名1,グループ名2,..., --groups グループ名1,グループ名2,...: ユーザーを追加するセカンダリグループを指定します。カンマ区切りで複数指定できます。
  • -c コメント, --comment コメント: /etc/passwdのGECOSフィールドに格納されるコメント(氏名など)を指定します。
  • -d ホームディレクトリ, --home ホームディレクトリ: ユーザーのホームディレクトリのパスを指定します。-mオプションと組み合わせて使用します。
  • -u UID, --uid UID: ユーザーに割り当てるUIDを指定します。通常はシステムに自動で割り当てさせるのが推奨されます。
  • -r, --system: システムユーザーとして作成します。UIDがシステムユーザー用に予約された範囲(通常1-999、新しいUbuntuでは1-499)から割り当てられます。

実行例と手順:

ユーザー「bob」をホームディレクトリ付きで作成し、シェルを/bin/bashに設定する例を見てみましょう。

bash
sudo useradd -m -s /bin/bash bob

このコマンドを実行しても、adduserのようにパスワードやユーザー情報の入力プロンプトは表示されません。ユーザーアカウントは作成されましたが、パスワードが設定されていないため、このままではログインできません。

パスワードの設定:

useraddでユーザーを作成した後は、別途passwdコマンドを使ってパスワードを設定する必要があります。

bash
sudo passwd bob

実行すると、パスワード入力プロンプトが表示されます。

New password:
Retype new password:
passwd: password updated successfully

これで、ユーザー「bob」が作成され、パスワードも設定されました。

adduseruseraddの使い分け:

  • adduser: より簡単で初心者向けです。ホームディレクトリ作成、グループ作成、パスワード設定、情報入力などを対話形式で自動で行ってくれます。特別な設定が不要な一般的なユーザーを追加する場合に便利です。
  • useradd: より低レベルで、オプションを細かく指定できます。スクリプトで自動的に大量のユーザーを作成する場合や、デフォルトとは異なる詳細な設定(UID、特定のグループへの所属、特定のホームディレクトリなど)を行いたい場合に適しています。ただし、ホームディレクトリ作成やパスワード設定を別途行う必要があることに注意が必要です。

特に理由がなければ、まずはadduserコマンドを使うのがおすすめです。

ユーザー情報の確認:どこに情報が格納されるのか?

ユーザーを追加すると、その情報はシステムのいくつかの重要な設定ファイルに格納されます。これらのファイルの内容を理解することは、ユーザー管理の仕組みを深く理解するために役立ちます。ただし、これらのファイルを手動で編集することは、構文エラーなどによってシステムが起動不能になるリスクがあるため、通常は専用のコマンド(adduser, useradd, usermod, deluserなど)を使用することが強く推奨されます。

主なユーザー関連の設定ファイルは以下の通りです。

/etc/passwd

システム上の全ユーザーアカウントに関する基本情報が格納されています。このファイルは全てのユーザーが読み取り可能ですが、パスワードそのものは含まれていません。各行が一つのユーザーアカウントに対応し、以下のフィールドがコロン(:)で区切られて並んでいます。

username:password_placeholder:UID:GID:GECOS:home_directory:login_shell

  • username: ユーザー名です。システム内で一意である必要があります。
  • password_placeholder: パスワードハッシュが格納されている/etc/shadowファイルを参照することを示すプレースホルダです。通常はxが表示されます。
  • UID: ユーザーのユニークなユーザーIDです。
  • GID: ユーザーのプライマリグループのグループIDです。
  • GECOS: Full Name, Room Number, Work Phone, Home Phoneなどの追加情報(コメント)を格納するフィールドです。adduserで入力した情報がここに入ります。
  • home_directory: ユーザーのホームディレクトリへの絶対パスです。
  • login_shell: ユーザーがログインした際に実行されるデフォルトシェルへの絶対パスです。

例(一部):

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
syslog:x:104:108::/home/syslog:/usr/sbin/nologin
alice:x:1001:1001:Alice Smith,,,:/home/alice:/bin/bash <- adduserで作成したユーザー
bob:x:1002:1003::/home/bob:/bin/bash <- useraddで作成したユーザー(コメントなし、GIDは別の例)

/usr/sbin/nologinがシェルとして設定されているユーザーは、対話的なシェルログインができません。システムサービスなどのアカウントでよく使用されます。

/etc/shadow

ユーザーパスワードのハッシュ、パスワードの有効期限、アカウントのロック情報など、セキュリティ上非常に重要な情報が格納されています。このファイルはrootユーザーのみが読み取れる権限に設定されています。各行が一つのユーザーアカウントに対応し、以下のフィールドがコロン(:)で区切られて並んでいます。

username:password_hash:last_change:min_days:max_days:warning_days:inactive_days:expiry_date:reserved

  • username: 対応するユーザー名です。
  • password_hash: パスワードのハッシュ値です。これが空欄の場合、パスワードが設定されていません。特別な文字列(例: *!)はアカウントがロックされていることを示します。
  • last_change: 1970年1月1日からの日数で、最後にパスワードが変更された日を示します。
  • min_days: パスワードを変更してから次に変更できるまでの最小日数です。
  • max_days: パスワードの有効期限(変更してから有効な最大日数)です。この日数を超えるとパスワードの変更が強制されます。
  • warning_days: パスワードの有効期限が切れる何日前にユーザーに警告を開始するかを示す日数です。
  • inactive_days: パスワードの有効期限が切れた後、アカウントがロックされるまでの猶予日数です。
  • expiry_date: 1970年1月1日からの日数で、アカウント全体が完全に無効になる日付です。
  • reserved: 将来の使用のために予約されているフィールドです。

例(一部):

root:$y$j.T$.......$...........:19368:0:99999:7:::
daemon:*:18626:0:99999:7:::
alice:$y$j.T$.......$...........:19368:0:99999:7::: <- aliceのパスワードハッシュなど
bob:$y$j.T$.......$...........:19368:0:99999:7::: <- bobのパスワードハッシュなど

パスワードハッシュは非常に長く、元のパスワードを推測するのは困難ですが、ブルートフォース攻撃に対する防御のため、min_days, max_daysなどを設定して定期的なパスワード変更を促すのがセキュリティ上のベストプラクティスです。

/etc/group

システム上の全グループに関する基本情報が格納されています。このファイルは全てのユーザーが読み取り可能です。各行が一つのグループに対応し、以下のフィールドがコロン(:)で区切られて並んでいます。

groupname:password_placeholder:GID:members

  • groupname: グループ名です。システム内で一意である必要があります。
  • password_placeholder: グループパスワードが格納されている/etc/gshadowファイルを参照することを示すプレースホルダです。通常はxが表示されます。
  • GID: グループのユニークなグループIDです。
  • members: そのグループに所属しているユーザー名(カンマ区切り)のリストです。ただし、ユーザーのプライマリグループとして設定されているグループは、通常このリストには表示されません。このリストは、そのグループがユーザーのセカンダリグループとして設定されている場合に表示されます。

例(一部):

root:x:0:
daemon:x:1:
syslog:x:108:
alice:x:1001: <- aliceのプライマリグループ
bob:x:1003: <- bobのプライマリグループ(adduserとGIDの例が異なるのは、useraddは既存のGIDを再利用することがあるため)
adm:x:4:syslog,alice <- aliceがadmグループにも所属している例
sudo:x:27:alice,bob <- aliceとbobがsudoグループに所属している例

/etc/gshadow

グループパスワード(ほとんど使われません)や、グループの管理者リストが格納されています。rootユーザーのみが読み取れる権限に設定されています。各行が一つのグループに対応し、以下のフィールドがコロン(:)で区切られて並んでいます。

groupname:password_hash:administrators:members

  • groupname: 対応するグループ名です。
  • password_hash: グループパスワードのハッシュ値です(ほとんど使われません)。
  • administrators: そのグループの管理者ユーザー名(カンマ区切り)のリストです。これらのユーザーは、グループパスワードを知らなくてもnewgrpコマンドなどで一時的にそのグループの権限を得ることができます。
  • members: そのグループに所属しているユーザー名(カンマ区切り)のリストです。/etc/groupmembersフィールドと同じ内容です。

これらのファイルを手動で確認するには、catlessコマンドを使用します。ただし、/etc/shadow/etc/gshadowはroot権限が必要です。

bash
cat /etc/passwd
sudo cat /etc/shadow
cat /etc/group
sudo cat /etc/gshadow

id コマンド

特定のユーザーのUID、プライマリグループGID、および所属する全グループの情報を確認するには、idコマンドが便利です。

bash
id [ユーザー名]

ユーザー名を指定しない場合は、現在ログインしているユーザーの情報が表示されます。

例:

bash
id alice

出力例:

uid=1001(alice) gid=1001(alice) groups=1001(alice),4(adm),27(sudo)

これは、ユーザーaliceのUIDが1001、プライマリグループがGID 1001のaliceグループ、そしてセカンダリグループとしてGID 4のadmグループとGID 27のsudoグループに所属していることを示しています。

groups コマンド

特定のユーザーがどのグループに所属しているか(プライマリグループとセカンダリグループ)を確認するには、groupsコマンドも使えます。

bash
groups [ユーザー名]

ユーザー名を指定しない場合は、現在ログインしているユーザーのグループが表示されます。

例:

bash
groups alice

出力例:

alice adm sudo

idコマンドの方がUID/GIDも表示されるため、より詳細な情報が得られます。

グループ管理:ユーザーに権限を与える基盤

前述のように、Linuxの権限管理はユーザーだけでなくグループも重要な要素です。新しいユーザーを追加したら、必要に応じて適切なグループに追加することで、ファイルやディレクトリ、デバイスなどに対するアクセス権限を付与したり、sudoコマンドの使用を許可したりします。

グループの追加

新しい目的のために特別なグループが必要な場合は、グループを作成できます。

構文:

bash
sudo addgroup [新しいグループ名]

例: ウェブサーバーのファイルを管理するためのwebmasterグループを作成する。

bash
sudo addgroup webmaster

これにより、/etc/groupに新しいエントリが追加され、システムは利用可能なGIDを割り当てます。

ユーザーを既存のグループに追加

新しいユーザーを既存のグループ、あるいは先ほど作成した新しいグループに追加するには、いくつかの方法があります。

方法1: adduserコマンド(ユーザーとグループ両方に使える)

adduserコマンドは、ユーザーだけでなく、既存のユーザーを既存のグループに追加するためにも使用できます。

bash
sudo adduser [ユーザー名] [グループ名]

例: ユーザーalicewebmasterグループに追加する。

bash
sudo adduser alice webmaster

出力例:

Adding user `alice' to group `webmaster' ...
Adding user alice to group webmaster
Done.

このコマンドは、指定したユーザーを、指定したグループのセカンダリメンバーとして追加します。

方法2: usermodコマンド

usermodコマンドはユーザーアカウントの様々な属性を変更するためのツールですが、グループへの追加にも使用できます。

既存のセカンダリグループを維持しつつ、新しいグループを追加する場合:

bash
sudo usermod -aG [グループ名] [ユーザー名]

  • -a, --append: ユーザーを指定したグループに「追加」します。このオプションを付けないと、ユーザーは指定したグループ以外の全てのセカンダリグループから削除されてしまいます。
  • -G, --groups: ユーザーが所属するセカンダリグループを指定します。

例: ユーザーbobwebmasterグループに追加する(既存のグループから削除しないように注意)。

bash
sudo usermod -aG webmaster bob

ユーザーのセカンダリグループを、指定したグループのリストで完全に置き換える場合(注意:既存のセカンダリグループから削除されます):

bash
sudo usermod -G [グループ名1,グループ名2,...] [ユーザー名]

例えば、bobのセカンダリグループをwebmasterだけにしたい場合:

bash
sudo usermod -G webmaster bob

しかし、通常は -aG オプションを使って既存のグループに新しいグループを追加することが多いでしょう。

方法3: gpasswdコマンド

gpasswdコマンドはグループファイルを管理するためのツールで、ユーザーのグループ追加・削除に特化しています。

bash
sudo gpasswd -a [ユーザー名] [グループ名] # ユーザーをグループに追加
sudo gpasswd -d [ユーザー名] [グループ名] # ユーザーをグループから削除

例: ユーザーalicewebmasterグループに追加する。

bash
sudo gpasswd -a alice webmaster

グループ追加の反映について:

ユーザーをグループに追加しても、その変更は次回ログイン時に反映されます。現在ログイン中のセッションで追加したグループの権限をすぐに使いたい場合は、一度ログアウトしてから再度ログインするか、newgrpコマンドを使用する必要があります。newgrp [グループ名]コマンドを実行すると、そのグループのプライマリグループとして新しいシェルセッションを開始します(一時的なもので、シェルを閉じると元のプライマリグループに戻ります)。ただし、セカンダリグループへの追加権限は、新しいシェルセッションを開始せずとも、exec su -l [ユーザー名]で自分自身としてログインし直す方法が確実です。

ユーザーをグループから削除

ユーザーを特定のグループから削除するには、deluserまたはgpasswdコマンドを使用します。

方法1: deluserコマンド

deluserコマンドは、ユーザーアカウント全体の削除だけでなく、ユーザーを特定のグループから削除するためにも使用できます。

bash
sudo deluser [ユーザー名] [グループ名]

例: ユーザーalicewebmasterグループから削除する。

bash
sudo deluser alice webmaster

方法2: gpasswdコマンド

bash
sudo gpasswd -d [ユーザー名] [グループ名]

例: ユーザーbobwebmasterグループから削除する。

bash
sudo gpasswd -d bob webmaster

グループの削除

不要になったグループは削除できます。グループを削除しても、そのグループに所属していたユーザーや、そのグループがプライマリグループだったユーザーアカウントは削除されません。

構文:

bash
sudo delgroup [グループ名]

例: webmasterグループを削除する。

bash
sudo delgroup webmaster

もし削除しようとしているグループが、まだ何らかのユーザーのプライマリグループとして設定されている場合、delgroupコマンドはエラーを出すか、グループ削除には成功するものの/etc/passwd内の当該ユーザーのGIDが有効なグループを指さなくなる可能性があります。このような状況を避けるためには、事前にそのグループをプライマリグループとするユーザーのプライマリグループを変更しておく必要があります(usermod -g 新しいグループ名 ユーザー名)。しかし、通常adduserでユーザーを作成すると、そのユーザーと同名のグループが作成され、それがプライマリグループとなるため、その場合はユーザーアカウントを削除しない限り、そのグループは削除できません(deluser --remove-home ユーザー名を実行すると、ユーザーアカウントと、それがプライマリグループだったグループの両方が削除されます)。

権限管理:Sudoerの設定

新しいユーザーにシステム管理タスクを実行させたい場合、そのユーザーにsudoコマンドを使用する権限を与える必要があります。これは、ユーザーをsudoグループ(あるいは古いシステムではadminグループ)に追加することで実現するのが一般的です。

sudoグループに追加する

ユーザーをsudoグループに追加するには、前述のグループ追加コマンドのいずれかを使用します。最も簡単なのはadduserを使う方法です。

bash
sudo adduser [ユーザー名] sudo

例: ユーザーalicesudo権限を与える。

bash
sudo adduser alice sudo

これにより、ユーザーalicesudoグループのメンバーとなります。この変更は、aliceが次回ログインしたときに有効になります。ログインし直した後、aliceは自分のパスワードを入力することで、sudoコマンドを使ってroot権限でコマンドを実行できるようになります。

確認するには、id alice または groups alice コマンドで、sudoグループに所属していることを確認します。

sudoersファイルについて

sudoコマンドの動作を制御する設定ファイルは/etc/sudoersです。このファイルには、どのユーザー(またはグループ)が、どの端末から、どのユーザーとして、どのコマンドを、パスワードが必要か不要かで実行できるか、といった詳細なルールが記述されています。

このファイルを手動でテキストエディタ(nanoviなど)で直接編集することは絶対に避けてください。構文エラーがあると、システム全体のsudoコマンドが機能しなくなり、root権限が必要な作業(システムの復旧作業など)が一切できなくなる可能性があります。

sudoersファイルを安全に編集するには、必ずvisudoコマンドを使用します。

bash
sudo visudo

visudoはデフォルトのエディタ(通常はnanovi)で/etc/sudoersファイルを開きます。編集を保存して終了すると、visudoは自動的にファイルの構文チェックを行います。構文にエラーがなければファイルが保存されますが、エラーがある場合は警告が表示され、修正する機会が与えられます。

/etc/sudoersファイルの最後に、以下のような行があるはずです(コメントアウトされているかもしれません)。

“`

Allow members of group sudo to execute any command

%sudo ALL=(ALL:ALL) ALL
“`

この行は、「sudoグループ(%sudoでグループを示す)のメンバーは、どの端末から(ALL)、どのユーザーとして(最初の(ALL:ALL)の最初のALL)、どのグループとして(最初の(ALL:ALL)の2番目のALL)、どのコマンドでも(最後のALL)、パスワードを入力して実行できる」という意味です。

ユーザーをsudoグループに追加することで、このルールに基づいてsudo権限が付与されるわけです。

/etc/sudoers.d/ ディレクトリ

より柔軟な設定や、パッケージが独自のsudoルールを追加できるようにするため、/etc/sudoers.d/ディレクトリに個別の設定ファイル(通常は拡張子なし)を置くことができます。visudoコマンドはこのディレクトリ内のファイルも編集できます(エディタでディレクトリを開き、ファイルを選択する)。新しいユーザーグループに特定のコマンドだけ許可するようなカスタマイズを行う場合は、/etc/sudoers.d/に新しいファイルを作成するのがベストプラクティスです。

例: パスワードなしでsudo実行を許可(非推奨!)

セキュリティ上の理由から推奨されませんが、特定のユーザーやグループにパスワードなしでsudo実行を許可したい場合、/etc/sudoersまたは/etc/sudoers.d/の該当ルールにNOPASSWD:を追加します。

“`bash

Allow members of group sudo to execute any command without a password

%sudo ALL=(ALL:ALL) NOPASSWD: ALL
“`

この設定は非常に危険なので、特別な理由がない限り使用すべきではありません。特定のコマンドのみにNOPASSWD:を適用することは可能です。

ユーザーのカスタマイズと管理

ユーザーアカウントを作成した後、そのユーザーの設定を変更する必要が生じることがあります。ユーザー名、ホームディレクトリ、ログインシェルなど、様々な属性を後から変更できます。これらの変更には主にusermodコマンドを使用します。

ユーザー情報の変更 (usermod)

usermodコマンドは、ユーザーアカウントの様々な属性を変更するためのツールです。

基本的な構文:

bash
sudo usermod [オプション] [ユーザー名]

よく使うオプション:

  • -l 新しいユーザー名 古いユーザー名, --login 新しいユーザー名 古いユーザー名: ユーザー名を変更します。ただし、これだけではホームディレクトリのパスなどは変更されません。関連するファイルやディレクトリも手動または他のオプションと組み合わせて変更する必要があります。
  • -d 新しいホームディレクトリ, --home 新しいホームディレクトリ: ユーザーのホームディレクトリを指定します。
  • -m, --move-home: -dオプションと組み合わせて使用し、既存のホームディレクトリの内容を新しいホームディレクトリに移動します。これを忘れると、ユーザーは古いホームディレクトリにアクセスできなくなり、新しいホームディレクトリは空になります!
  • -s 新しいシェル, --shell 新しいシェル: ユーザーのログインシェルを変更します。
  • -u 新しいUID, --uid 新しいUID: ユーザーのUIDを変更します。注意:UIDを変更すると、そのユーザーが所有していたファイルやディレクトリの所有者情報が、新しいUIDを指すようになります。システムによっては、UID変更後にファイルシステムの所有権を再帰的に更新する必要がある場合があります(find / -uid 古いUID -exec chown 新しいUID {} \; など)。複雑なため、特別な理由がない限りUIDの変更は推奨されません。
  • -g 新しいプライマリグループ, --gid 新しいプライマリグループ: ユーザーのプライマリグループを変更します。指定するのはグループ名でもGIDでも構いません。
  • -G 新しいセカンダリグループ1,..., --groups 新しいセカンダリグループ1,...: ユーザーのセカンダリグループリストを、指定したリストに置き換えます。既存のセカンダリグループは全て削除されるため、通常は-aGオプションを使います(前述)。
  • -L, --lock: ユーザーアカウントをロックします。ログインできなくなります。パスワードフィールドが特殊な値になります。
  • -U, --unlock: ロックされたユーザーアカウントを解除します。
  • -e YYYY-MM-DD, --expiredate YYYY-MM-DD: アカウントの有効期限を設定します。指定した日付を過ぎるとアカウントは無効になります。
  • -f 非アクティブ日数, --inactive 非アクティブ日数: パスワードの有効期限が切れた後、アカウントが永久にロックされるまでの日数を設定します。0は無効化、-1は無期限です。
  • -c コメント, --comment コメント: GECOSフィールドのコメントを変更します。

例:ユーザー名とホームディレクトリを変更する

ユーザーaliceの名前をcarolに変更し、ホームディレクトリもそれに合わせて/home/carolに移動する。

“`bash

1. ユーザー名を変更

sudo usermod -l carol alice
“`

この時点では、ユーザー名はcarolになりましたが、ホームディレクトリはまだ/home/aliceのままです。また、ホームディレクトリのパスは/etc/passwdでも/home/aliceを指しています。

“`bash

2. ホームディレクトリのパスを/etc/passwdで更新し、ディレクトリを移動する

sudo usermod -d /home/carol -m carol
“`

-mオプションがあるので、/home/aliceディレクトリの内容が/home/carolに移動され、/etc/passwdのホームディレクトリのパスも/home/carolに更新されます。

注意: ユーザー名変更は、そのユーザーがログインしていない状態で行うのが最も安全です。また、ユーザー名と関連付けられたcronジョブ、サービス設定ファイル、環境変数など、手動で修正が必要な箇所があるかもしれません。

パスワードの変更 (passwd)

ユーザーのパスワードを変更するには、passwdコマンドを使用します。rootユーザーであれば、どのユーザーのパスワードでも変更できます。

bash
sudo passwd [ユーザー名]

例: ユーザーbobのパスワードを変更する。

bash
sudo passwd bob

コマンド実行後、新しいパスワードを二回入力するプロンプトが表示されます。

ユーザー自身が自分のパスワードを変更する場合は、sudoは不要です。

bash
passwd

自分のパスワードを入力するプロンプトが表示されます。

パスワード有効期限などの設定 (chage)

chageコマンド(change age)は、パスワードの有効期限やアカウントの非アクティブ化設定など、/etc/shadowファイルに格納されるパスワード関連の情報を管理するためのツールです。

基本的な構文:

bash
sudo chage [オプション] [ユーザー名]

よく使うオプション:

  • -l, --list: 指定したユーザーのパスワード有効期限情報を表示します。
  • -E YYYY-MM-DD, --expiredate YYYY-MM-DD: アカウントの有効期限を設定します。
  • -M 日数, --maxdays 日数: パスワードの有効期限(変更後の最大有効日数)を設定します。
  • -m 日数, --mindays 日数: パスワードの変更が許可されるまでの最小日数を設定します。
  • -W 日数, --warndays 日数: パスワード有効期限切れの警告を開始する日数を設定します。
  • -I 日数, --inactive 日数: パスワード有効期限切れ後、アカウントが非アクティブになるまでの日数を設定します。

例:

ユーザーaliceのアカウントを2025年12月31日で有効期限切れにする。

bash
sudo chage -E 2025-12-31 alice

ユーザーbobのパスワードを90日で有効期限切れにし、期限切れの7日前に警告を開始する。

bash
sudo chage -M 90 -W 7 bob

ユーザーaliceの現在のパスワード情報を表示する。

bash
sudo chage -l alice

出力例:

Last password change : May 01, 2023
Password expires : never
Password inactive : never
Account expires : Dec 31, 2025
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7

これは、パスワードの有効期限は設定されていないが、アカウント自体は2025年12月31日に有効期限が切れる設定になっていることを示しています。

ユーザーの削除:不要なアカウントの整理

セキュリティや管理の観点から、不要になったユーザーアカウントは速やかに削除することが重要です。使用されていないアカウントは、システムへの不正アクセスの経路となる可能性があります。

ユーザーを削除するには、主にdeluseruserdelコマンドを使用します。

1. deluser コマンドを使う方法

deluserコマンドは、adduserと同様にDebian系のシステムで推奨される、より高レベルなユーザー削除ツールです。デフォルトではユーザーアカウント情報のみを削除し、ホームディレクトリなどの関連ファイルは削除しません。これは、誤ってユーザーを削除してしまった場合に、後からファイルを復旧できるようにするための配慮です。

基本的な構文:

bash
sudo deluser [ユーザー名]

このコマンドを実行すると、ユーザーアカウントに関するエントリ(/etc/passwd, /etc/shadow, /etc/group, /etc/gshadowから)が削除されますが、ユーザーのホームディレクトリ(例: /home/username)やメールスプールは残されます

実行例:

ユーザーbobを削除する(ホームディレクトリは残す)。

bash
sudo deluser bob

出力例:

Removing user `bob' ...
Warning: The home directory `/home/bob' of user `bob' was not removed.
Warning: The mail spool `/var/mail/bob' of user `bob' was not removed.
Done.

ホームディレクトリとメールスプールも同時に削除する場合:

ユーザーアカウントだけでなく、そのユーザーのホームディレクトリとメールスプールも一緒に削除したい場合は、--remove-homeオプションを使用します。この操作は元に戻せないので、実行前に削除対象のユーザーのホームディレクトリに重要なファイルが残っていないか十分に確認してください。

bash
sudo deluser --remove-home [ユーザー名]

実行例:

ユーザーbobを削除し、ホームディレクトリとメールスプールも削除する。

bash
sudo deluser --remove-home bob

出力例:

Removing user `bob' ...
Removing group `bob' ...
Removing home directory `/home/bob' ...
Removing mail spool `/var/mail/bob' ...
Done.

この例では、ユーザーbobのプライマリグループも削除されています。adduserで作成されたユーザーアカウントと、そのユーザー名と同じ名前で作成されたプライマリグループは、通常deluser --remove-homeで一緒に削除されます。

2. userdel コマンドを使う方法

userdelコマンドは、useraddと同様に、より低レベルなユーザー削除ツールです。デフォルトではユーザーアカウント情報のみを削除し、関連ファイルは削除しません。

基本的な構文:

bash
sudo userdel [オプション] [ユーザー名]

ホームディレクトリとメールスプールも同時に削除する場合:

userdelで関連ファイルも削除するには、-rオプションを使用します。

bash
sudo userdel -r [ユーザー名]

実行例:

ユーザーbobを削除し、ホームディレクトリとメールスプールも削除する。

bash
sudo userdel -r bob

deluseruserdelの使い分け:

  • deluser: Debian/Ubuntuで推奨されており、デフォルトでは関連ファイルを残します。ホームディレクトリも削除する場合は--remove-homeオプションを明示的に指定します。ユーザーをグループから削除する機能もあります。
  • userdel: 標準的なLinuxコマンドですが、Ubuntuではdeluserが推奨されます。関連ファイルも削除する場合は-rオプションを明示的に指定します。

特別な理由がなければ、より安全でUbuntuに合わせた設計になっているdeluserコマンドを使用するのがおすすめです。特に、--remove-homeオプションを誤って使用するリスクを減らすため、デフォルトでファイルを残すdeluserの方が安全と言えます。

ユーザー削除後のクリーンアップ

ユーザーを削除しても、そのユーザーが作成したファイル(ホームディレクトリ以外の場所にあるもの)や、そのユーザーが所有していたプロセス、cronジョブなどがシステムに残る可能性があります。

  • 残されたファイル: deluser --remove-homeuserdel -rを使っても、ホームディレクトリ以外の場所にユーザーが作成したファイルは残ります。これらのファイルは削除されたユーザーのUIDが所有者として記録されているため、ls -lなどで見ると所有者名が表示されず、UID番号(例: 1001)が表示されます。これらのファイルを検索して、所有者を別のユーザーに変更したり、不要なものは削除したりする必要があります。find / -uid [削除されたユーザーのUID]のようなコマンドで検索できます。
  • cronジョブ: ユーザーがcrontab -eで設定したユーザー固有のcronジョブは、ユーザー削除後も/var/spool/cron/crontabs/[ユーザー名]に残ることがあります。これは手動で削除する必要があります。
  • プロセス: ユーザーがログイン中にプロセスを実行していた場合、ユーザー削除後もそのプロセスが残り、root権限で実行されているように見えることがあります。これは、そのプロセスがまだ古いUIDで実行されているためです。ps aux | grep [削除されたユーザーのUID]などで確認し、必要に応じてkillします。

ユーザーを削除する前に、そのユーザーが実行していた可能性のあるサービスやジョブを確認し、停止・移行・削除しておくことが重要です。

グラフィカルインターフェース (GUI) でのユーザー追加

コマンドライン操作に慣れていない方や、デスクトップ版Ubuntuを使用している場合は、GUIを使ってユーザーを追加・管理することも可能です。手順はUbuntuのバージョンやデスクトップ環境(GNOME、KDEなど)によって若干異なりますが、基本的な流れは同じです。ここでは、標準的なGNOMEデスクトップ環境を前提に説明します。

  1. 「設定」アプリを開く: アプリケーションメニューから「設定」(Settings)を開きます。歯車のアイコンの場合が多いです。
  2. 「ユーザー」または「ユーザーとグループ」を選択: 設定ウィンドウの左側のメニューやアイコンの中に、「ユーザー」(Users)または「ユーザーとグループ」(Users and Groups)といった項目があるので、それをクリックします。
  3. 設定変更をアンロック: ユーザー設定はシステムに関わる変更なので、通常はロックされています。ウィンドウの右上隅や左下隅にある「ロック解除」(Unlock)ボタンをクリックします。
  4. 管理者のパスワードを入力: ロックを解除するために、現在ログインしているユーザー(管理者権限を持つユーザー)のパスワードを入力します。
  5. 新しいユーザーを追加: ロック解除後、「ユーザーを追加」(Add User)または「+」ボタンのようなものが表示されるので、それをクリックします。
  6. 新しいユーザーの情報を入力: 新しいユーザー作成ウィンドウが表示されます。
    • アカウントの種類 (Account Type): 「標準」(Standard)または「管理者」(Administrator)を選択します。
      • 「標準」ユーザーはシステム設定の変更や他のユーザーのファイルへのアクセスが制限されます。日常的な作業に使用します。
      • 「管理者」ユーザーはsudoコマンドを使用でき、システム全体の管理が可能です。信頼できるユーザーにのみ設定します。
    • フルネーム (Full Name): ユーザーの氏名や説明を入力します。これは/etc/passwdのGECOSフィールドに格納されます。
    • ユーザー名 (Username): システムで使用されるユーザー名を入力します。これは一度設定すると変更が難しいので慎重に決めます。入力すると、通常はホームディレクトリのパス(/home/ユーザー名)が自動的に表示されます。
    • パスワード (Password): パスワードの設定方法を選択します。
      • 「パスワードを今すぐ設定」(Set a password now): 今すぐパスワードを設定します。パスワードを入力し、確認のため再入力します。
      • 「次回のログイン時にパスワードを設定」(Set a password on next login): ユーザーが初めてログインする際にパスワード設定を促します。これは一時的なアカウントなどで使用されることがあります。
      • 「ランダムなパスワードを生成」(Generate a random password): システムが強力なパスワードを生成します。
      • 「パスワードなしでログイン」(Login without a password): パスワードなしでログインできるようにしますが、セキュリティリスクが非常に高いため推奨されません
    • パスワードの入力: 「パスワードを今すぐ設定」を選んだ場合、設定したいパスワードを入力します。パスワード強度インジケーターが表示されることもあります。
  7. 「追加」または「作成」をクリック: 情報を入力し終えたら、ウィンドウ下部にある「追加」(Add)または「作成」(Create)ボタンをクリックします。

これで新しいユーザーが追加され、設定リストに表示されます。リストからユーザーを選択すると、パスワードのリセットや、アカウントの種類(標準/管理者)の変更、アカウントの削除など、追加の設定を行うことができます。

GUIでのユーザー管理とCUIでのユーザー管理:

  • GUI: 直感的で操作が分かりやすいです。簡単なユーザー追加や基本的な設定変更には非常に便利です。コマンドを覚える必要がありません。しかし、GUIで提供される機能は限られている場合が多く、細かい設定(特定のUID/GIDの指定、アカウント有効期限の設定など)を行うには、やはりコマンドラインが必要になります。
  • CUI: 非常に柔軟で、あらゆるユーザー属性や権限を細かく制御できます。スクリプトによる自動化も容易です。ただし、コマンドとそのオプションを覚える必要があります。

どちらの方法を選ぶかは、目的や慣れによります。簡単なユーザー追加ならGUI、詳細な設定や自動化が必要ならCUIと使い分けるのが良いでしょう。GUIでの「管理者」アカウントは、裏側でユーザーをsudoグループに追加する処理などを行っています。

高度なトピック

ユーザー管理は、基本的な追加・削除・変更だけでなく、さらに高度な設定や概念に関連しています。ここでは、ユーザー管理をより深く理解するためのいくつかのトピックに触れておきます。

/etc/skel ディレクトリ

先ほどadduserの説明で触れましたが、/etc/skelディレクトリは新しいユーザーのホームディレクトリのテンプレートとして機能します。「skel」は「skeleton(骨格)」の略です。

新しいユーザーが作成されると(-mオプション付きのuseraddや、デフォルトのadduserで)、/etc/skelディレクトリにあるファイルやサブディレクトリが、新しいユーザーのホームディレクトリにコピーされます。これには、シェルの設定ファイル(例: .bashrc, .profile, .config/gnome-terminal/など)、デスクトップ設定、ドキュメントディレクトリのひな形などが含まれることがあります。

システム管理者は、すべての新しいユーザーに特定のデフォルト設定(例えば、特定のエイリアスを定義した.bashrcファイルや、共通のスクリプトを置くディレクトリなど)を配布したい場合に、/etc/skelディレクトリにこれらのファイルやディレクトリを配置しておくことができます。/etc/skel内のドットファイル(.で始まる隠しファイル)もコピーされます。

例えば、全ての新しいユーザーにllというエイリアス(ls -alFのショートカット)をデフォルトで使えるようにしたい場合、/etc/skel/.bashrcファイルを編集してエイリアス定義を追加しておきます。

PAM (Pluggable Authentication Modules)

PAMは、Linuxシステムにおける認証、認可、アカウント管理、セッション管理などの機能をモジュール化し、設定ファイル(通常/etc/pam.d/ディレクトリ以下のファイル)によって柔軟に制御できるようにするフレームワークです。

ユーザーがログインしたり、sudoを実行したり、パスワードを変更したりする際に、システムはPAMの設定ファイルを参照し、指定されたモジュール群を実行します。例えば、sshdサービス(SSHログイン)のPAM設定は/etc/pam.d/sshdに、システムログイン(loginコマンドなど)のPAM設定は/etc/pam.d/loginに記述されています。

ユーザーの追加や削除といった操作も、内部的にはPAMモジュールと連携して行われることがあります。例えば、パスワードを設定する際にシステムのパスワードポリシー(最低文字数、複雑性など)を強制するのは、PAMモジュール(pam_pwqualityなど)の役割です。アカウントの有効期限やロック状態をチェックしてログインを許可するかどうかを判断するのもPAMの役割です。

PAMは非常に強力で柔軟なシステムですが、設定は複雑です。誤った設定はシステムへのログインができなくなるなどの深刻な問題を引き起こす可能性があります。通常の使用ではPAMの設定を直接変更する必要はありませんが、ユーザー管理がどのようにシステム認証と統合されているかを理解する上で重要な概念です。

大規模環境でのユーザー管理

個人利用や小規模な組織であれば、この記事で解説したadduser/deluserやGUIでの管理で十分かもしれません。しかし、数百、数千といった規模のユーザーを管理する必要がある大企業などでは、より高度な集中管理システムが使われます。

  • LDAP (Lightweight Directory Access Protocol): ユーザー情報、グループ情報、認証情報などを一元管理するためのディレクトリサービスです。複数のサーバーやサービスが共通のLDAPサーバーを参照することで、ユーザー情報を分散管理する必要がなくなります。
  • Active Directory (AD): Microsoftが提供するディレクトリサービスで、Windowsドメイン環境の中心となるユーザー管理システムですが、LinuxサーバーをADドメインに参加させてユーザー管理を統合することも可能です(SSSDなどのツールを使用)。
  • 自動化ツール: Ansible, Chef, Puppetなどの構成管理ツールを使えば、多数のサーバーに対して一括でユーザーの作成、削除、権限設定などを自動化できます。これにより、手作業によるミスを減らし、管理コストを大幅に削減できます。

これらのシステムはUbuntuの基本的なユーザー管理メカニズムの上に構築されるか、あるいは基本的な仕組み(/etc/passwdなどを参照する代わりにLDAP/ADを参照する設定)を置き換える形で機能します。

トラブルシューティング

ユーザー追加や管理の際に遭遇する可能性のある一般的な問題とその解決策をいくつか紹介します。

  • 「adduser: The user username' already exists.」または「useradd: userusername’ already exists」エラー:
    • 指定したユーザー名のアカウントが既にシステムに存在しています。別のユーザー名を使用するか、既存のアカウントを管理します。
    • /etc/passwdファイルにそのユーザー名のエントリがあることを確認してください。
  • 「adduser: The group `groupname’ does not exist.」エラー:
    • ユーザーをセカンダリグループに追加しようとした際に、指定したグループ名が存在しない場合に発生します。
    • cat /etc/groupコマンドで、そのグループが存在するか確認してください。存在しない場合は、sudo addgroup groupnameでグループを作成してから再度ユーザーを追加してください。
  • 「useradd: UID 1001 is already in use」エラー:
    • useradd -uオプションで指定したUIDが、既にシステム上の別のユーザーまたはグループによって使用されている場合に発生します。
    • cat /etc/passwdcat /etc/groupで、どのユーザー/グループがそのUID/GIDを使用しているか確認してください。手動でUID/GIDを指定する場合は、未使用の番号を選択する必要があります。通常はシステムに自動で割り当てさせるのが安全です。
  • パスワード設定時のエラー:
    • 「BAD PASSWORD: The password is too short」など、パスワードがシステムのポリシーを満たしていない場合に発生します。より強力なパスワードを設定する必要があります。パスワードポリシーはPAMの設定(/etc/pam.d/passwdなど)で定義されています。
    • パスワードを2回入力した際に一致しない場合もエラーになります。慎重に入力してください。
  • sudoコマンドが使えない:
    • 新しいユーザーをsudoグループに追加したにも関わらずsudoが使えない場合、ユーザーがログアウト・ログインしていない可能性があります。グループメンバーシップはログイン時に決定されるため、変更を反映させるには再ログインが必要です。
    • ユーザーがsudoグループに正しく追加されているか、id ユーザー名またはgroups ユーザー名で確認してください。
    • /etc/sudoersファイルや/etc/sudoers.d/ディレクトリの設定に問題がある可能性があります。sudo visudoで構文チェックを行い、%sudo ALL=(ALL:ALL) ALLのような行が正しく設定されているか確認してください。
  • ユーザー削除後にファイルが残っている:
    • deluserまたはuserdelでユーザーを削除しても、--remove-homeまたは-rオプションを指定しないとホームディレクトリは削除されません。手動で削除する必要があります(sudo rm -r /home/削除されたユーザー名)。ただし、この操作は非常に危険なので注意が必要です。
    • ホームディレクトリ以外の場所にユーザーが作成したファイルは、オプションを指定しても削除されません。これらのファイルはUIDで所有者を確認し、必要に応じて所有者を変更するか削除します。
  • 削除したユーザー名がログなどにまだ表示される:
    • システムの一部(例えば、特定のプロセスや設定ファイルなど)が削除されたユーザーの情報をキャッシュしている場合があります。システムを再起動することで解消されることが多いです。
    • 削除されたユーザーが実行していたプロセスが残っている場合、ps aux | grep UIDなどで見つけ、killする必要があります。

トラブルシューティングを行う際は、まずエラーメッセージをよく読み、システムログ(/var/log/syslogなど)を確認することが重要です。

セキュリティとベストプラクティス

ユーザー管理はシステムセキュリティの根幹に関わる部分です。安全なシステムを維持するために、以下のベストプラクティスを実践しましょう。

  1. 強力なパスワードポリシーの強制: 最低文字数、数字、大文字小文字、記号の使用を義務付けるなど、強力なパスワードポリシーを設定し、ユーザーに強制します。chageコマンドでパスワードの有効期限を設定することも有効です。PAM設定ファイルを編集することで、より詳細なポリシーを設定できます。
  2. 最小権限の原則: 各ユーザーには、その役割を果たすために必要最低限の権限のみを与えます。日常的な作業は標準ユーザーで行い、システム管理が必要な場合にのみsudoを使用するようにします。不要なユーザーをsudoグループに追加しないようにしましょう。
  3. 不要なユーザーアカウントの削除: 使用されなくなった、あるいはもう必要ないユーザーアカウントは速やかに削除します。これにより、システムへの不正アクセスのリスクを減らせます。アカウント削除時には、関連ファイルも適切に処理されているか確認します。
  4. rootユーザーでの直接ログインを無効にする: 通常、SSH経由でのrootユーザーによる直接ログインは無効化すべきです。これは/etc/ssh/sshd_configファイルのPermitRootLogin no設定で行います。システム管理はsudoを使用できるユーザーで行います。
  5. 定期的なユーザーアカウントの棚卸し: 定期的にシステム上の全ユーザーアカウントを確認し、誰がどのような権限を持っているかを把握します。不要なアカウントがないか、権限が過剰に付与されていないかなどをチェックします。
  6. 監査ログの活用: ユーザーのログイン履歴やsudoコマンドの使用履歴はログファイル(/var/log/auth.logなど)に記録されます。これらのログを定期的に確認することで、不審なアクティビティを早期に発見できます。auditdなどの監査システムを導入することも検討します。
  7. SSH鍵認証の使用: パスワード認証だけでなく、より安全なSSH鍵認証の利用をユーザーに推奨または強制します。
  8. ログイン試行回数の制限: PAM設定などで、ログイン試行回数に制限を設けることで、ブルートフォース攻撃に対する耐性を高めます。

これらのベストプラクティスを組み合わせることで、Ubuntuシステムのユーザー管理におけるセキュリティレベルを大幅に向上させることができます。

まとめ

この記事では、Ubuntuに新しいユーザーを追加する手順について、コマンドライン(adduser, useradd)とGUIの両面から、非常に詳細に解説しました。また、ユーザー管理の基盤となるLinuxのユーザー・グループ・権限の概念、ユーザー情報が格納されるファイル(/etc/passwd, /etc/shadow, /etc/group, /etc/gshadow)、グループ管理、sudo権限の設定方法、ユーザー情報の変更・削除方法、さらには/etc/skelやPAMといった高度なトピック、遭遇しうるトラブルとその解決策、そしてセキュリティ上のベストプラクティスについても網羅的に触れました。

Ubuntuにおけるユーザー管理は、システムを安全かつ効率的に運用するために不可欠なスキルです。この記事を通じて、ユーザーの追加・管理に関する基礎知識から応用までを深く理解し、自信を持ってシステムを管理できるようになることを願っています。

これで、あなたはUbuntuのユーザー管理のエキスパートへの第一歩を踏み出しました! 安全で快適なUbuntuライフをお楽しみください。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール