Linuxでユーザーのログイン不可能な時間を設定する方法

Linux環境において、特定の時間にユーザーのログインを制限する方法を詳細に解説します。セキュリティ対策やシステムメンテナンスの観点から、このような制限をかける必要が出てくる場面は多いです。具体的なコード例、その詳細な解説、および応用例を4つ以上掲載しています。

目次

なぜログイン制限を行うのか

特定の時間帯にシステムメンテナンスを行いたい、あるいはセキュリティ対策として夜間の不正アクセスを防ぎたい。このような理由で、Linuxシステムにおいてユーザーのログインを時間によって制限したい場合があります。

基本的な設定方法

「pam_exec.so」モジュールを使用する

Pluggable Authentication Module (PAM) と呼ばれるLinuxの認証フレームワークを使って、ログインを時間で制限します。`pam_exec.so` モジュールを使用する方法が一般的です。

設定ファイルの編集

1. `/etc/pam.d/sshd` ファイルを編集します。
2. 以下のように `pam_exec.so` モジュールを追加します。

auth required pam_exec.so /etc/security/login-restriction.sh

スクリプトの作成

`/etc/security/login-restriction.sh` というスクリプトを作成します。

#!/bin/bash
# 現在の時刻を取得
current_hour=$(date +%H)

# ログイン不可の時間(例:22時〜5時)
if [ "$current_hour" -ge 22 ] || [ "$current_hour" -le 5 ]; then
  exit 1
fi

exit 0

スクリプトの実行権限を設定

このスクリプトに実行権限を与えます。

chmod +x /etc/security/login-restriction.sh

応用例

曜日による制限

#!/bin/bash
# 現在の曜日を取得
current_day=$(date +%u)

# 土日はログイン不可
if [ "$current_day" -ge 6 ]; then
  exit 1
fi

exit 0

特定のユーザーだけに制限をかける

#!/bin/bash
# 制限対象のユーザー名
restricted_user="testuser"

if [ "$PAM_USER" == "$restricted_user" ]; then
  exit 1
fi

exit 0

特定のIPアドレスからのアクセスを許可

#!/bin/bash
# 許可するIPアドレス
allowed_ip="192.168.1.1"

if [ "$PAM_RHOST" == "$allowed_ip" ]; then
  exit 0
else
  exit 1
fi

複数条件の組み合わせ

#!/bin/bash
# 曜日と時間を組み合わせた制限
current_day=$(date +%u)
current_hour=$(date +%H)

if [ "$current_day" -ge 6 ] || [ "$current_hour" -ge 22 ]; then
  exit 1
fi

exit 0

まとめ

Linuxでユーザーのログインを時間や条件によって制限する方法は多々あり、その具体例として`pam_exec.so`モジュールを用いた設定方法を紹介しました。このような制限はセキュリティ強化やシステム管理に非常に有用です。

コメント

コメントする

目次