Ubuntuでユーザーのログイン機能を制限する方法
はじめに
システム管理の基本的な部分は、ユーザーとグループの設定と管理です。このタスクの一部には、システムのすべてのエンティティのログイン機能の監視が含まれます。
このガイドでは、ユーザー管理と認証ログについての考え方を紹介します。
この概念については、Ubuntu 22.04サーバーで探求しますが、他の現代のLinuxディストリビューションでも同じ手順で進めることができます。このチュートリアルでは、Ubuntu 22.04上でサーバーの初期設定を行うためのガイドに従って、Ubuntu 22.04サーバーをセットアップすることができます。
前のチュートリアルで述べたように、サーバー上の一部のユーザーはサービスに関連しており、通常のアカウントとして使用されることは意図されていません。
このセクションでは、これらのユーザーのログイン機能をさまざまな方法で制限する方法について確認します。
/etc/passwdを使用してアクセス制限する方法
ログインの機能を制限する方法の一つは、アカウントのログインシェルを特別な値に設定することです。
これの例として、/etc/passwdファイル内でgrepコマンドを使用して検索することができるmessagebusユーザーがあります。
- less /etc/passwd | grep messagebus
messagebus:x:102:105::/nonexistent:/usr/sbin/nologin
ログインが成功したときに実行されるシェルまたはコマンドが最終的な値です。この場合、値は/usr/sbin/nologinと設定されています。
メッセージバスのユーザーにsudo suを使って切り替えようとすると、失敗します。 (Messējibasu no yūzā ni sudo su o tsukatte kirikaeyō to suru to, shippai shimasu.)
- sudo su messagebus
This account is currently not available.
以下のようなメッセージが届いています。メッセージバスのシェルが/usr/sbin/nologinに設定されているため、このメッセージを受信しています。
必要な場合には、ユーザーのデフォルトのログインシェル(通常は/bin/bash)をnologinなどの存在しないシェルに変更するために、usermodツールを使用することができます。
- sudo usermod -s /usr/sbin/nologin username
「/etc/shadow を使用してアクセス制限する方法」
システムへのアクセスを制限するもう一つの方法は、/etc/shadowファイルを使用することです。このファイルには、システム上のすべてのユーザーのパスワードのハッシュ値が含まれています。
ファイル全体を表示するために、少ない量を使用することができます。
- sudo less /etc/shadow
. . . uuidd:*:19105:0:99999:7::: tcpdump:*:19105:0:99999:7::: sshd:*:19105:0:99999:7::: pollinate:*:19105:0:99999:7::: landscape:*:19105:0:99999:7::: lxd:!:19180:::::: sammy:$y$j9T$4gyOQ5ieEWdx1ZdggX3Nj1$AbEA9FsG03aTsQhl.ZVMXatwCAvnxFbE/GHUKpjf9u6:19276:0:99999:7:::
最後の行で始まる$y$j9T$4gyO…のフィールドは、ハッシュ化されたパスワードの値を含んでいます。
システムのアカウントは複雑なハッシュ値の代わりにアスタリスク(*)が表示されます。二番目のフィールドにアスタリスクがあるアカウントは、パスワードが設定されていないため、パスワードによる認証はできません。この状態を変更しなければなりません。
以下の文を日本語で自然に言い換えます。1つのオプションのみですが:
パスワードの値を無効にすることができます(実質的に、パスワードがアスタリスクの値と同等になるアカウントを作成することができます)。このためには、ハッシュ値の前に感嘆符(!)を付けます。
指定されたアカウントを「ロック」することによって、2つのツールがこれを実行することができます。
パスワードコマンドは、-lフラグを使ってロックすることができます。また、-uフラグを使ってロックを解除することもできます。
- sudo passwd -l sammy
- sudo less /etc/shadow | grep sammy
sammy:!$y$j9T$4gyOQ5ieEWdx1ZdggX3Nj1$AbEA9FsG03aTsQhl.ZVMXatwCAvnxFbE/GHUKpjf9u6:19276:0:99999:7::::::
見てわかる通り、ハッシュ化されたパスワードは保持されますが、その前に「!」を付けることで無効化されます。
「アカウントは、次の入力によって再びロック解除されます:」
- sudo passwd -u sammy
ユーザーモッドコマンドを使用すると、同様の操作が利用可能です。対応するフラグは、ロックするための-Lと、アンロックするための-Uです。
- sudo usermod -L sammy
- sudo usermod -U sammy
Note
/etc/nologinでアクセス制限を行う方法
ルートを除くすべてのアカウントのログインを無効にする必要がある場合があるかもしれません。
これは、詳細なメンテナンスのためか、または1つ以上のユーザーアカウントが侵害された可能性があるためです。
とにかく、/etc/nologinでファイルを作成することでこれは実現できます。
- sudo touch /etc/nologin
スーパーユーザー権限を持っていないアカウントは、ログインを防止されます。
/etc/nologin ファイルが空の場合、ユーザーは何の説明もなく、ローカルシェルに戻されます。
実際に起こっているのは、ファイルの内容がユーザーに返されているということです。メッセージを追加すると、ユーザーはログイン失敗の説明を受け取ることができます。
- sudo sh -c ‘echo “Planned maintenance. Log in capabilities will be restored at 1545 UTC” > /etc/nologin’
今、パスワードでログインしようとすると、このメッセージが表示されます。
- ssh sammy@host
sammy@host‘s password: Planned maintenance. Log in capabilities will be restored at 1545 UTC Connection closed by host
ルートユーザーは通常通りログインできます。ログイン制限を解除するためには、”/etc/nologin” ファイルを削除してください。
- sudo rm /etc/nologin
結論
Linuxにおけるユーザー認証は、システム管理の比較的柔軟な領域です。広く利用可能なツールを用いて同じ目的を達成する方法はたくさんあります。
さまざまな方法を使って使用を制限する方法を知っているはずです。
このチュートリアルシリーズの次のパートでは、ユーザーログインの監視方法について復習します。