このチュートリアルは、Linuxホストでのユーザー管理、ユーザーとグループの管理に焦点を当てています。
システム管理者は、ユーザーとグループを操作している いつも。
新しいユーザーアカウントを作成する必要がある場合があります たとえば、チームの新しいメンバーの場合。
また、データベースまたはホストにインストールする特別なツール用に特定のアカウントを作成するように求められる場合があります。
ホストが大きくなると、システムメンバーに割り当てる権限をより明確に理解するために、グループを作成したくなる場合もあります。
結果として、ユーザー管理を完全に理解する 経験豊富な管理者が習得するための非常にコアなスキルです。
今日のチュートリアルでは、ユーザー管理について詳しく見ていきます。ユーザーを作成する方法です。 、削除 また、システムに明確なパスワードポリシーを設定する方法 。
ユーザー管理に関連するすべてのコマンドと、詳しく調べる必要のある特定のファイルを見つけることになります。
準備はいいですか?
何を学ぶか
このチュートリアルを最後まで読むことで、次のテーマについて学ぶことができます。
- どのユーザーアカウント Linux上にあり、それらが互いにどのように異なるか;
- グループとは Linuxの場合、およびさまざまなグループタイプは何ですか。
- 作成する方法 、削除 および変更 Linuxホスト上の既存のユーザー;
- passwdとは何ですか およびシャドウ システム上のファイルとそれらに含まれる情報;
- パスワードエージングを設定する方法 chageコマンドで;
- visudoおよびusermodを介して特権権限を持つユーザーを付与する方法;
いつものように、これは非常に長いプログラムなので、これ以上面倒なことはせずに、Linux上のユーザーアカウントを見てみましょう。
Linuxでのユーザー管理の基本
Linuxシステムを実行している場合は、おそらくマルチユーザーシステムとして実行されています。 。
これは、リソースを共有したり、システムで異なる操作を実行したりするために、複数のユーザーが同じホストに接続できることを意味します。
ただし、すでにお気づきかもしれませんが、すべてのユーザーアカウントが同じであるとは限りません。
一部の権限は他の権限よりも多い場合があります。一方、一部は他よりも制限されており、単純なシェルプロセスでさえ起動できない場合があります。
ユーザーアカウントの種類
Linuxでは、3つの異なるタイプのユーザーアカウントを処理する必要があります:
- ルートアカウント :これは、定義上、システムの最も強力なユーザーアカウントです。 rootユーザーは、任意の操作(パスワードの変更など)を実行したり、プロセスを強制終了したり、ファイルシステム上の任意のディレクトリに移動したりできます。

- システムアカウント :システムアカウントは、ホスト上のプロセスまたはプログラムによって使用されるアカウントです。メール管理や単純なApacheサーバーの実行に特定のアカウントが使用されているのを見たことがあるかもしれません。これらのアカウントには制限付きの権限が付与されることが多く、インタラクティブシェルへのアクセスが禁止されています。

これらのアカウントを変更しないことをお勧めします 自分で。
- ユーザーアカウント :ユーザーアカウントは、実際のユーザーが使用するアカウントです。彼らは、ホスト上のいくつかのファイルを取得するために作成したチームまたはアカウントのメンバーである可能性があります。システムアカウントとは異なり、正しい構成を提供するために、これらのアカウントを変更することを強くお勧めします。
これらのアカウントは、ほとんどの場合、システムでコマンドを実行するためにインタラクティブなシェル(bashやshなど)が与えられています。

注 :一部のホストでは、セキュリティの問題を回避するために、rootアカウントをロックすることが推奨される場合があります。
ユーザーアカウント識別子

Linuxでは、アカウントはユーザーIDによる識別子です。 、 UIDとも呼ばれます 。
これはプロセスのPIDの概念に非常に近く、UIDはシステム上のユーザーを一意に識別するために使用されます。
さらに、Linuxシステムでユーザーアカウントを分類するためによく使用されます。
すでに説明したように、ユーザーアカウントは3つのカテゴリに分けられます。その結果、UIDは、ユーザーが属するカテゴリに応じてユーザーにも割り当てられます。
IDに関連する情報を表示するには、次のコマンドを実行します
$ id

ご覧のとおり、私自身のUIDは1000です。
しかし、なぜそれはゼロまたは1ではないのですか?
Linuxでは、ユーザーIDは次のルールに従って割り当てられます:
- rootアカウントにはUID0が与えられます 、および GID 0 。
- システムアカウント 、システムで使用するプログラムによって作成されたものには、1〜500または1〜999のカスタム範囲が割り当てられます。Debianベースのシステムでは、システムアカウントの範囲は1〜999です。
- ユーザーアカウント 1000より大きいUIDが与えられます。これは、上の画像で実際に見たものです。
ユーザー識別子のカスタマイズ
特別な場合には、LinuxシステムでUIDとGIDを割り当てる方法をカスタマイズしたくなるかもしれません。
ユーザーはシステム上でローカルに定義される場合もありますが、たとえばLDAPなどの外部ユーザー管理システムで定義される場合もあります。
結果として、LDAPがUIDを1000から9999に維持する場合、ローカルユーザーにデフォルトで10000より大きいUIDを割り当てることができます。
ユーザー識別子のカスタマイズは、 login.defsという名前のファイルで行われます。 ホスト上( etcにあります )
ホストで指定されているデフォルトの識別子を確認するには、login.defsファイルを確認して、次のセクションを見つけてください。
$ nano /etc/login.defs

Linux上のグループとグループタイプ
デフォルトでは、ホスト上のユーザーには1つまたは複数のグループが割り当てられます。
Linuxでは、グループは、ユーザーがLinuxホストで同じ権限のセットまたは同じ制限を共有できるようにするために作成されます。
デフォルトでは、ユーザーアカウントを作成すると、同じ名前のグループが作成されます。結果として、すべてのユーザーは少なくとも1つのグループに属します。
説明のために、システムで次のコマンドを実行します
$ groups <user>

Linuxでは、デフォルトでグループは2つのカテゴリに分けられます:
- プライマリグループ :1人のユーザーが一度に1つ(そして1つだけ)のプライマリグループを持つことができます。プライマリグループは、ユーザーがシステム上にファイルまたはディレクトリを作成するときに割り当てられるグループです。その結果、デフォルトのファイル作成グループを微調整するために、ユーザーのプライマリグループを変更したくなる場合があります。
- セカンダリグループ :ユーザーは他の多くのグループに属している可能性があります。ホストの特定のチームに属している場合は、このグループ(管理者など)に属します。 2番目の例として、特権ユーザーはsudoグループ(Debianの場合)またはwheelグループ(Red Hatベースのディストリビューションの場合)に属している可能性があります
グループには、システム上で互いに区別するために特定の識別子も与えられます。
これらはGIDと呼ばれ、ファイルシステム上のlogin.defsファイルを調べることによって変更することもできます。
Linuxでのユーザーとグループについての理解が深まったので、システムでユーザーを追加または削除するために実行できるコマンドを見てみましょう。
Linuxでのユーザー管理コマンド
システムでは、ローカルアカウントの追加、削除、または変更を選択できます。
警告 :これらのコマンドを実行したり、rootとして接続したりするには、ホストでsudo権限が必要です。
Debianベースのシステム用とRedHatベースのシステム用のガイドが1つずつあります。
ユーザーローカルアカウントの作成
Linuxでユーザーローカルアカウントを作成するには、useraddコマンドを使用する必要があります 。
$ useradd <user>
デフォルトでは、構成ファイルを変更しない限り、コマンドはユーザーのホームディレクトリと、.bashrc、.profile、.bash_logoutなどのプリセットファイルを作成します。
ただし、useraddコマンドは、ユーザーアカウントの作成を微調整するためのさまざまなオプションを公開する場合があります:
- -d :ホームディレクトリ用。デフォルトでは、アカウントは/ homeに作成されますが、ファイルシステムに別のパスを設定することもできます。
- -e : 有効期限。特定の日に退社する外部コンサルタントのアカウントを作成する場合に便利です。
- -g :GIDの場合、このオプションは、アカウントの作成時にユーザーのカスタムGIDを持つように設定されています。
- -G :補足グループの場合、このオプションは、デフォルトでセカンダリグループがユーザーに割り当てられるように設定されています。
- -M :ホームがない場合、このオプションは、システムがユーザーのホームディレクトリを作成しないようにするために使用されます。
- -r :ユーザーのシステムアカウントを作成するため。
- -s :シェルの場合、このオプションは、デフォルトでユーザーに割り当てられたシェルをカスタマイズするために使用されます(/ bin / bash、/ bin / nologin、/ bin / false、/ bin / shなど)
- -u :UIDの場合、-gオプションと同様に、これはユーザーに割り当てられたデフォルトのUIDをカスタマイズするために使用されます。
例として、システム上に標準のユーザーアカウントを作成できます。
$ useradd john
次に、ホームディレクトリを調べて、ユーザー用に1つのエントリが作成されたかどうかを確認できます。

ご覧のとおり、ユーザーのホームディレクトリはデフォルトでは作成されていません。
この問題に対処するには、正しいオプションを指定して再試行してください。
$ useradd -m bob

ユーザーが作成されたので、パスワードを割り当てる必要があります。そうしないと、アクセスできなくなります。
Linuxでのユーザーパスワードの変更
Linuxでユーザーパスワードを変更するには 、昇格された特権でpasswdを使用する必要があります。
$ sudo passwd <user>
以前に作成したアカウントを例にとると、次のコマンドを実行します。
$ sudo passwd bob

ユーザーパスワードが設定されたので、suコマンドを使用してユーザーアカウントにすばやく接続できます。
$ su - <user>

ご覧のとおり、デフォルトでユーザーに提供されるシェルは非常に特殊です。
これは通常のbashシェルではなく、実際にはダッシュシェル(/ bin / sh)と呼ばれる完全に異なるシェルが割り当てられています。
なぜですか?
デフォルトでは、useraddは、ホスト上で完全にカスタマイズ可能なデフォルトのオプションセットを使用します。
Linuxでのuseraddのデフォルトの変更
useraddコマンドのさまざまなデフォルトオプションを確認するには、次のコマンドを実行します
$ useradd -D

/ etc / default / useraddにも同じコンテンツが含まれている場合があります システム上のファイル。
ご覧のとおり、デフォルトのシェルは / bin / shに設定されています デフォルトでは。
これが、新しいユーザーがデフォルトでこのシェルを定義した理由です。
デフォルトを変更するには、システム上のデフォルトファイルを直接変更しないでください。
プロセスでエラーが発生すると、useraddコマンドを再度実行できなくなるリスクがあります。
たとえば、使用されるデフォルトのシェルを変更するには、実行する必要があります
$ useradd -Ds /bin/bash

ユーザーホームディレクトリスケルトン
ユーザーのホームディレクトリを作成することを選択した場合、デフォルトでいくつかのファイルがそこに利用可能であることに気付いたかもしれません。

それらのファイルはどこから来ていますか?
ホームディレクトリを作成するとき、Linuxシステムは「 skel」というディレクトリからファイルをコピーします / etcにあるシステム上の」 。
/ etc / skelにあるファイルを確認する場合 、デフォルトのホームディレクトリとまったく同じファイルになります
$ ls -al /etc/skel

ご想像のとおり、このskelディレクトリにいくつかのファイルを追加すると、ホストのデフォルトのホームディレクトリにファイルが追加されます。サーバーにカスタムルールがある場合、READMEファイルを追加する必要がある場合に特に便利です。
Linuxでのローカルユーザーアカウントの削除
システムのユーザーアカウントを削除するには、次のコマンドを使用する必要があります
$ userdel <user>
ただし、userdelについて知っておく必要のある重要なルールが1つあります。
userdelコマンドは、デフォルトでは、システム上のユーザーが所有するファイルだけでなく、ホームディレクトリも削除しません。
ファイルまたはディレクトリがユーザーなしでシステムにまだ存在する場合、それらはユーザーの以前のUIDおよびGIDでマークされます。

ユーザーのホームディレクトリを削除するには、-rオプションを使用する必要があります。
$ userdel -r <user>
これにより、ホームディレクトリの外部にあるファイルは削除されません。
ホームディレクトリの外にあるファイルを見つけるには、次のコマンドを実行します。
$ find <path> -uid <uid>
Linuxでファイルを簡単に見つけて見つけるには、ガイドを読んでください!
Linuxで既存のユーザーアカウントを変更する
場合によっては、システム上の既存のユーザーアカウントを変更したいことがあります。
ユーザーを変更するには 、usermodコマンドを実行する必要があります
$ usermod <option> <user>
usermodを使用すると、さまざまなオプションがあります:
- -c :コメントの場合、このコマンドは、passwdファイル内のユーザーに関連付けられたコメントを変更するために使用されます。
- -d :ホームディレクトリ。ユーザーのデフォルトのホームディレクトリを変更するために使用されます。
- -g :プライマリユーザーグループを変更するために使用されます;
- -a :追加の場合、これは、ユーザーの既存のグループリストに追加することにより、ユーザーにセカンダリグループを割り当てるために使用されます。
- -G :セカンダリグループをユーザーに割り当てるために使用されます(たとえば、sudoまたはwheelグループ)。
- -L :ユーザーアカウントをロックするために使用されます;
- -U :ユーザーアカウントのロックを解除するために使用されます
たとえば、sudoグループにユーザーを追加する場合は、
を実行します。$ sudo usermod -aG sudo <user>
ユーザーを追加または削除するために実行できるコマンドについて理解が深まったところで、ユーザー管理に関連するいくつかの重要なファイルを見てみましょう。
Passwdファイルとシャドウファイル
Linuxには、ユーザー管理に関連する2つの主要なファイルがあります。 / etc/passwdファイルと/etc/shadowファイルです。
passwdファイルについて
デフォルトでは、passwdファイルにはLinuxシステムでローカルに利用可能なすべてのユーザーのリストが表示されます。
このリストを作成するには、次のコマンドを実行します
$ cat /etc/passwd

ご覧のとおり、passwdファイルは、システムで使用可能なユーザーごとに1つずつ、複数のエントリを持つコロンで区切られたファイルです。
左から右に、列には次の情報が表示されます:
- ユーザー名 :システム上のユーザーの実際のユーザー名;
- パスワード :「x」エントリがあるということは、パスワードが暗号化された形式でシャドウファイルで利用できることを意味します。
- UID :前述の一意のユーザーID;
- GID :ユーザーのプライマリグループのID(カスタマイズした場合は異なる場合があります)。
- コメント:ユーザーを識別するために役立つ可能性のある説明的なコメント。このフィールドは GECOSとも呼ばれます。 フィールド;
- ホームディレクトリ :ユーザーにホームディレクトリまたはカスタムフィールドが割り当てられている場合、ここに情報が保存されます。
- デフォルトのシェル :作成時にユーザーに割り当てられたシェル。
useraddコマンドを使用して新しいユーザーを作成すると、このファイルに新しいエントリが自動的に追加されます。
一方、シャドウファイルには、システムに関するより機密性の高い情報が含まれています。
シャドウファイルについて
シャドウファイルのリストを作成するには、特権ユーザーとしてコマンドを実行していることを確認してください
$ sudo cat /etc/shadow

デフォルトでは、シャドウファイルには次の列が表示されます:
- ユーザー名 :システム上のユーザーの実際のユーザー名;
- パスワード :これは暗号化されたパスワードが保存される場所です。デフォルトでは、最初の3文字を調べることで暗号化システムに関する情報を見つけることができます(この場合、$ 6 $はSHA-512暗号化です)。
- 前回パスワードが変更されたとき :1970年1月1日から最新のパスワード変更までの日数。この場合、18146日で2019年9月7日となります。
- パスワード変更間の最小日数 :ユーザーがパスワードを変更できるようになるまでの日数を意味します。
- 有効なパスワードの最大日数 :システム上のパスワードの最大有効期間;
- 警告期間 :このオプションは、ユーザーが自分のアカウントに関する警告メッセージを受信するためのパスワードの有効期限が切れるまでの日数を定義します。
- 非アクティブ期間 :パスワードの有効期限が切れると、アカウントが無効になるまでの期間が定義されます。
- 有効期限 :アカウントが無効になるまでの1980年1月1日からの日数を定義します。
注 :「!」または、パスワードの「*」は、おそらくシステムアカウントを扱っているため、システムでユーザーログインが無効になっていることを意味します。
passwdとshadowファイルについての理解が深まったので、コマンドを使用してパスワードのエージングを管理する方法を見てみましょう。
chageを使用したパスワードエージングの管理
Linuxでは、これまでに見たすべてのパラメーターを変更する方法は、chageコマンドを使用することです。
$ chage <options> <user>
オプションは次のとおりです:
- -d :最終日の場合、このオプションは、ユーザーアカウントのパスワードが変更されてからの日数を設定します。
- -E :有効期限:ユーザーアカウントにアクセスできなくなる番号(1970年1月1日以降)の日付を設定します。
- -私 :非アクティブの場合、このオプションは、ユーザーアカウントがシステムで無効になるまでの非アクティブ日数を設定します。
- -m :最小日数の場合、2回連続してパスワードを変更するまでの日数を設定します。この値をゼロに設定すると、ユーザーはいつでもパスワードを許可されることになります。
- -M :最大日数の場合、このオプションはシステム上のパスワードの最大有効性を設定します。これは、ホストに適切なパスワードポリシーを設定する場合に、慎重に構成する必要があるオプションの1つです。また、最大日数オプションを使用して最後のパスワード変更を計算すると、ユーザーがパスワードを変更する必要がある日がわかります。
- -W :警告日数:パスワードの有効期限が切れるまでの日数を設定します。この日数で、ユーザーアカウントにパスワードの有効期限の警告が表示されます。
アカウントのアクティブなパスワードポリシーの完全なリストを取得するには、次のコマンドを実行する必要があります
$ chage -l <user>

ここでわかるように、前に指定したオプションに関連するすべてのエントリが与えられます。
この場合、2019年10月12日にパスワードを変更しましたが、パスワードの変更を強制されることはありません。ただし、これらのオプションは簡単に変更できます。
パスワードの変更を強制する
ホスト上のユーザーにパスワードの即時変更を設定するには、次のコマンドを実行する必要があります
$ chage -d 0 <user>

ここに表示されているように、ユーザーパスワードは次回のログイン時に変更する必要があります。
パスワードの変更を求めるプロンプトが表示されることを確認するには、ユーザーとしてログインしてみてください。
$ su <user>

パスワードを変更すると、以前と同じようにユーザーアカウントにアクセスできるようになります。
アカウントの有効期限を簡単に設定
前述のように、-Eオプションを使用してアカウントの有効期限を変更できる場合があります。
ただし、今から20、30日後の日付を推測するのは難しいかもしれません。
今から50日後のアカウントの有効期限を設定する 、次のコマンドを入力します
$ date -d '+50days' +%F

そこから、このアカウントの有効期限を簡単に設定できます。
$ chage -E <date> <user>

ユーザーのパスワード有効期限の設定
ユーザーのパスワードの有効期限を設定するには、ユーザーがパスワードを変更するまでの最大日数を変更する必要があります。
そのためには、-Mオプションを使用する必要があります。
$ chage -M <days> <user>
その結果、chageコマンドの実行時にパスワードの有効期限が設定されます。

ユーザーアカウントのロックとロック解除
場合によっては、パスワードの有効期限だけでは不十分です。
セキュリティ上の理由から、ユーザーアカウントを完全に期限切れにする(またはロックする)ことが必要になる場合があります。これは、ユーザーがホストにアクセスできないはずのときに、ユーザーがホストにアクセスできないようにするために使用できます。
ユーザーアカウントをロックするには、usermodコマンドを使用する必要があります。
$ usermod -L <user>
その結果、ユーザーはユーザーアカウントに接続できなくなります。
ロックを解除するには、usermodコマンドを-Uオプションとともに使用できます。
ユーザーに特権権限を付与する
Linuxでは、基本的に2つの方法で特権、つまりsudoのユーザーアカウントへの権限を設定できます。
usermodコマンドを使用して、ユーザーをsudoグループ(Debianベースの場合)またはwheelグループ(Red Hatベースの場合)に追加できます。
sudoersにユーザーをすばやく追加するには、次のコマンドを実行します
$ sudo usermod -aG sudo <user>
またはRedHatで
$ sudo usermod -aG wheel <user>
visudoコマンドを使用してsudoersファイルを直接変更することもできます。
これらの手順については、次の記事ですでに説明しています:
- Debian10のsudoersにユーザーを追加する
- RHEL 8 /CentOS8のsudoersにユーザーを追加する
結論
今日のチュートリアルでは、Linuxでのユーザー管理の要点について詳しく学びました。
ユーザーを追加、削除、変更できることと、システムにセキュリティホールを残さないようにパスワードポリシーを微調整できることを学びました。
また、ユーザーとグループに関する完全な情報を得るために、ファイルシステム上の特定のファイルを読み取ることができることも確認しました。
Linuxのユーザーを一覧表示する場合は、次のガイドをお読みください。
また、Linuxシステム管理に興味がある場合は、このセクションですでに公開しているすべてのガイドを確認する必要があります。