【ITニュース解説】100 Days of DevOps, Day 1: Understanding Linux User Management and Shells
2025年09月06日に「Dev.to」が公開したITニュース「100 Days of DevOps, Day 1: Understanding Linux User Management and Shells」について初心者にもわかりやすいように丁寧に解説しています。
ITニュース概要
Linuxの基本として、ユーザー管理のCRUD操作とシェルの種類を解説。`useradd`などでユーザーを作成し、情報を参照・変更・削除する方法を学ぶ。また、直接操作しないサービス用アカウントには、プロンプトが出ない非対話型シェルを設定する重要性を実践的に説明する。
ITニュース解説
DevOpsの作業では、Linuxサーバーを扱う機会が非常に多く、手動での操作はもちろん、自動化ツールを使ってサーバーを管理することも頻繁に行われる。そのため、Linuxサーバーの基礎をしっかりと理解することは、DevOpsエンジニアとして成長するための第一歩となる。今回は、Linuxの基本的な操作の中でも特に重要な「ユーザー管理」と「シェルの種類」について詳しく解説する。これらは、サーバーのセキュリティを保ちながら効率的に作業を進める上で不可欠な知識となる。
ITの様々な分野で「CRUD」という言葉を耳にすることがある。これは、Create(作成)、Read(読み取り)、Update(更新)、Delete(削除)の頭文字を取ったもので、システムの要素を管理するための基本的な操作を指す。このCRUDの考え方は、Linuxのユーザー管理にもそのまま適用できる。
Linuxで新しいユーザーアカウントを作成するには、useraddコマンドを使用する。例えば、sudo useradd yousufと入力すると、「yousuf」という名前の新しいユーザーがシステムに登録される。sudoは管理者権限でコマンドを実行するためのもので、ユーザー作成のような重要な操作には通常必要となる。このコマンドだけでは、ユーザーの作業領域となるホームディレクトリは自動で作成されない。もしホームディレクトリも同時に作成したい場合は、-mオプションを追加してsudo useradd -m yousufと実行する。これは、ユーザーがログインしてファイルを保存したり、設定を行ったりするために必要な場所となる。
既存のユーザーに関する情報を確認するには、いくつかの方法がある。id yousufコマンドを実行すると、「yousuf」ユーザーのUID(User ID)、GID(Group ID)、そして所属するグループの名前が表示される。UIDはシステムがユーザーを識別するための固有の番号で、GIDはユーザーが所属するプライマリグループの識別番号である。また、getent passwd yousufコマンドを使うと、そのユーザーの詳細な情報が一行で表示される。ここには、ユーザー名、パスワードのハッシュ、UID、GID、ユーザーのコメント(通常は空白)、ホームディレクトリのパス、そしてログイン時に使用されるシェル(後述)のパスが含まれる。これらの情報は、ユーザーがどのように設定されているかを理解する上で非常に役立つ。
作成済みのユーザーの設定を変更するには、usermodコマンドを使用する。例えば、ユーザーがログインしたときに使用するシェルを変更したい場合、-sオプションにシェルのパスを指定する。例えば、sudo usermod -s /bin/bash yousufと実行すると、「yousuf」ユーザーのシェルが/bin/bashに変更される。また、ユーザーのホームディレクトリの場所を変更したい場合は、-dオプションに新しいホームディレクトリのパスを指定してsudo usermod -d /home/new_home yousufのように実行する。これにより、ユーザーの作業環境を柔軟に調整できる。
不要になったユーザーアカウントをシステムから削除するには、userdelコマンドを使用する。sudo userdel yousufと実行すると、「yousuf」というユーザーアカウントは削除されるが、そのユーザーが作成したホームディレクトリやその他のファイルはシステム上に残ったままになる。もし、ユーザーアカウントと同時にそのホームディレクトリも完全に削除したい場合は、-rオプションを追加してsudo userdel -r yousufと実行する。これにより、ユーザーに関連する情報をまとめてクリーンアップできる。ただし、ユーザーがシステム内の別の場所に保存したファイルまでは自動で削除されないため、重要なデータを誤って削除しないよう、ユーザーを削除する前には常に慎重な確認が必要である。
Linuxシステムでは、ユーザーがログインしたときに「シェル」と呼ばれるプログラムが起動する。このシェルには、大きく分けて「インタラクティブシェル」と「非インタラクティブシェル」の2種類がある。
一般的なユーザーがサーバーにログインする際、通常はインタラクティブシェルが提供される。これは、ユーザーがコマンドを入力するためのプロンプト(例えば$や#)が表示され、そのプロンプトに対してコマンドを実行し、その結果を画面で確認しながら対話的に作業を進めることができる状態である。例えば、ssh yousuf@serverのようにSSHでサーバーにログインすると、yousuf@server:~$のようなプロンプトが表示され、ユーザーは自由にコマンドを実行できるようになる。/bin/bashや/bin/shなどが代表的なインタラクティブシェルである。
非インタラクティブシェルは、人間が直接ログインして操作することを想定していないシェルである。このシェルが設定されたユーザーアカウントでログインしようとすると、プロンプトは表示されず、コマンドを実行することもできない。このタイプのシェルは、データベースサービスのアカウント、バックアップエージェント、監視ツールなど、システム内で自動的に動作するサービス専用のアカウント(サービスアカウント)によく利用される。人間が操作しないアカウントにインタラクティブなログインを許可することは、セキュリティ上のリスクにつながるため、非インタラクティブシェルを設定することで、不正なログインや操作を防ぐことができる。非インタラクティブシェルの代表的なものとしては、/sbin/nologinと/bin/falseがある。/sbin/nologinが設定されたユーザーでログインを試みると、「This account is not available.」(このアカウントは利用できません)といったメッセージが表示され、接続が切断される。一方、/bin/falseが設定された場合は、特にメッセージもなく即座に接続が切断される。これらのシェルを使い分けることで、サービスアカウントのセキュリティを強化できる。
ここまで学んだ知識を、実際のシナリオで適用してみよう。xfusionCorp Industriesのシステム管理者チームは、バックアップエージェントツールが要求する仕様に合わせて、非インタラクティブシェルを持つユーザーを作成する必要があるという課題を抱えている。具体的には、「yousuf」という名前のユーザーをApp Server 3というサーバー上に、非インタラクティブシェルで作成することが求められている。
この課題を解決するには、複数のステップが必要となる。まず、直接App Server 3にアクセスできない場合があるため、「ジャンプホスト」と呼ばれる中継サーバーを経由して目的のサーバーに接続する手順が含まれる。
最初に、ssh thor@jump_host.stratos.xfusioncorp.comコマンドを使ってジャンプホストに接続する。プロンプトが表示されたら、提供されたパスワードを入力してログインする。ジャンプホストは、セキュリティ上の理由から直接アクセスが制限されている内部ネットワークのサーバーに接続する際によく利用される。
ジャンプホストにログインした後、そこからさらに目的のApp Server 3に接続する。ssh banner@stapp03.stratos.xfusioncorp.comコマンドを実行し、App Server 3のログインユーザーとパスワードを入力してログインする。これで、いよいよ目的のサーバーであるApp Server 3に到達したことになる。
App Server 3にログインしたら、いよいよ「yousuf」ユーザーを作成する。sudo useradd -s /sbin/nologin yousufコマンドを実行する。ここで重要なのは、-s /sbin/nologinというオプションである。これにより、「yousuf」ユーザーがログインシェルとして/sbin/nologinを使用するように設定され、このユーザーはインタラクティブにログインしてコマンドを実行することができなくなる。もし何らかの理由で/sbin/nologinが利用できない場合は、代替として/bin/falseを指定してsudo useradd -s /bin/false yousufと実行することも可能である。
ユーザーが正しく作成され、非インタラクティブシェルが設定されているかを確認するため、getent passwd yousufコマンドを実行する。このコマンドの出力結果には、ユーザー名やUID、GIDなどの情報とともに、最後に設定されたシェルパスが表示されるはずである。例えば、「yousuf:x:1005:1005::/home/yousuf:/sbin/nologin」のような出力が得られれば、最後のフィールドが/sbin/nologinとなっていることで、ユーザー「yousuf」が意図通りに非インタラクティブシェルを持つアカウントとして作成されたことが確認できる。これは、サービスアカウントの要件を満たす上で非常に重要なステップとなる。
本日の学習では、DevOps作業の基盤となるLinuxサーバーのユーザー管理について深く掘り下げた。具体的には、ユーザーアカウントの作成、情報の確認、変更、そして削除というCRUDの基本的な操作方法を習得した。また、ユーザーがシステムにログインする際に使用するシェルの種類についても理解を深め、対話的に操作可能な「インタラクティブシェル」と、サービスアカウントなどに利用される「非インタラクティブシェル」の違いとその重要性を学んだ。そして、これらの知識を応用し、実際のシナリオに基づいて非インタラクティブシェルを持つユーザーを作成する実践的な課題に取り組んだ。これらの基礎知識は、Linuxサーバーを安全かつ効率的に管理するために不可欠なスキルであり、今後のDevOpsの旅路において大いに役立つだろう。