Ubuntu上でユーザーのログイン機能を制限する方法
紹介
システム管理の基本的な部分は、ユーザーとグループの設定と管理です。この作業の一部には、すべてのシステムエンティティのログイン機能を監視することが含まれます。
このガイドでは、ユーザー管理と認証ログの背後にあるアイデアを紹介します。
私たちはUbuntu 22.04サーバーでこれらの概念を探求しますが、現代のLinuxディストリビューションであればどれでもフォローできます。このチュートリアルのためにUbuntu 22.04サーバーをセットアップするには、Ubuntu 22.04の初期サーバーセットアップに関するガイドに従ってください。
このシリーズの前のチュートリアルで述べたように、あなたのサーバー上の一部のユーザーはサービスに関連付けられており、通常のアカウントとして使用されることは意図されていません。
このセクションでは、これらのユーザーのログイン機能をさまざまな方法で制限する方法を確認します。
/etc/passwdでアクセスを制限する方法
ログイン機能を制限する一つの方法は、アカウントのログインシェルを特別な値に設定することです。
これの例として、messagebus ユーザーがあります。このユーザーは /etc/passwd ファイル内で grep を使って検索できます:
- less /etc/passwd | grep messagebus
messagebus:x:102:105::/nonexistent:/usr/sbin/nologin
最終的な値は、ログインが成功したときに実行されるシェルまたはコマンドです。この場合、値は/usr/sbin/nologinに設定されています。
もし sudo su を使って messagebus ユーザーに切り替えようとすると、失敗します。
- sudo su messagebus
This account is currently not available.
このメッセージを受け取ったのは、messagebus のシェルが /usr/sbin/nologin に設定されているためです。
ユーザーがログインするのを防ぐ必要がある場合、usermodツールを使用して、ユーザーのデフォルトのログインシェル(通常は/bin/bash)を存在しないシェル(例:nologin)に変更することができます。
- sudo usermod -s /usr/sbin/nologin username
/etc/shadowでアクセスを制限する方法
アクセスを制限するための別の類似の方法は、/etc/shadowファイルを使用することです。このファイルには、システム上のすべてのユーザーのハッシュ化されたパスワード値が含まれています。
ファイル全体を表示するにはlessを使用できます:
- 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:::
2番目のフィールド(最後の行の$y$j9T$4gyO…で始まるもの)はハッシュ化されたパスワードの値を含んでいます。
システムアカウントには複雑なハッシュ値の代わりにアスタリスク(*)があります。2番目のフィールドにアスタリスクがあるアカウントはパスワードが設定されておらず、これを変更しない限りパスワードによる認証ができません。
ハッシュ値の前に感嘆符(!)を付けることで、パスワードの値を無効にすることができます(実質的に、パスワードのないアカウントはアスタリスクの値と同じになります)。
2つのツールが指定されたアカウントを「ロック」することでこれを行うことができます。
passwd コマンドは -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
同等の操作は usermod コマンドを使用して実行できます。対応するフラグは、ロック用の -L とロック解除用の -U です:
- sudo usermod -L sammy
- sudo usermod -U sammy
注意:このアクセス制限の方法は、すべてのパスワードベースのログインに対して正しく機能しますが、パスワードなしでのログイン方法(例えば、sshキーを使用する方法)は引き続き利用可能です。
/etc/nologinを使用してアクセスを制限する方法
root以外のすべてのアカウントログインを無効にする必要がある状況があるかもしれません。
これは、詳細なメンテナンスが行われているためか、またはあなたのユーザーアカウントの1つ以上が危険にさらされているためかもしれません。
いずれにせよ、これは/etc/nologinにファイルを作成することで達成できます:
- sudo touch /etc/nologin
これにより、スーパーユーザ privileges がないアカウントはログインできなくなります。
空の /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でのユーザー認証は、システム管理の比較的柔軟な領域です。同じ目的を達成するための方法は多く、広く利用可能なツールを使うことができます。
今、さまざまな方法で使用を制限する方法を知っているはずです。
このチュートリアルシリーズの次の部分では、ユーザーログインを監視する方法を確認します。
