kazmax - Linux で自宅サーバー

sshを、ユーザ、IPでアクセス制限

sshでのアクセスを、IPや、ユーザごとに制限をかける事ができます。 ここでは、pam と呼ばれる認証の仕組みを利用します。

Last Update : 2006年09月05日

ssh を、ユーザ、IPでアクセス制限 手順

  1. 各設定ファイルの編集
  2. 必要であれば、sshd の再起動

設定ファイル

  • /etc/security/access.conf
  • /etc/pam.d/sshd
  • /etc/ssh/sshd_config

1. 各設定ファイルの編集

下で紹介する設定ファイルですが、デフォルトでsshにpamを有効にする設定がされている場合があります。

その場合は、1-1、1-2の設定ファイルを保存した瞬間から、その変更が有効となります。 ネットワークごしの場合は、近くの端末を使ってテストするなどして気をつけましょう。

1-1. /etc/security/access.conf の編集

このファイルにどのユーザ、グループを許可するのか、禁止するのか、どのIPを許可するのか、禁止するのかなどを設定します。

書き方ですが、access.conf の中に書かれているのですが、自分解釈で書いておきます。

/etc/security/access.conf の書式

permission : users : origins

/etc/security/access.conf の各項目の意味

permission +:許可
-:禁止
users user:ユーザー名
group:グループ名
user@host
ALL:全て
(※1)EXCEPT
origins 接続元の指定
IP:IPアドレス 注意 IPの最後にピリオド( . )をつけるのが約束
host name:ホスト名
domain name:ドメイン
LOCAL:そのままlocalhostから
ALL:全て
(※1)EXCEPT
(※1)EXCEPT EXCEPT ~ → 「~を除いて」の意味

memo

例)

ユーザhogeのssh アクセスを全て禁止

- : hoge : ALL

ユーザhogeのssh アクセスを禁止するが、IP:123.456.789.101からだけは許可する場合

- : hoge : ALL EXCEPT 123.456.789.101. (←IPアドレスの後ろにピリオドをつける)

ユーザhogeとfooとグループbar のIP:123.456.789.101 からのssh アクセスを禁止

- : hoge foo bar : 123.456.789.101.

など。
ちなみに、sshdに制限をかけてるので、rsyncとかで、ssh利用する系にも制限同時にかかります。

1-2. /etc/pam.d/sshd の編集

pam は、sshdだけでなく、他のサービスにも認証をかける事ができます。

ここでは sshd に対しての認証の設定なので、/etc/pam.d/sshd に 1-1で設定した内容でpamの制御をかけるぞと宣言しています。

# vi /etc/pam.d/sshd

以下の行を最後に追加

account required pam_access.so

memo

「account required pam_access.so」ですが、 これには、引数として、「accessfile=ファイル名(フルパス)」をつける事ができます。

1-1で説明した、/etc/security/access.confと同じ内容で、 / 直下などに、test.conf とかでファイルを作成し、 /etc/pam.d/sshdの最終行に、

account required pam_access.so accessfile=/test.conf

とか書いてやっても同じ事ができます。

1-3. /etc/ssh/sshd_config の編集

最後に、/etc/ssh/sshd_config ファイルの編集ですが、 1-1、1-2 では、pam の動作の設定でしたが、 1-3 では、sshd が pam を使用するかどうかの設定を行います。

要は、sshd に対して、sshd で pam 使うぞ!と宣言します。

sshd で pam を利用する設定の仕方ですが、ssh のバージョンによって、編集箇所が変わってくる様です。

とりあえず、/etc/ssh/sshd_config ファイルを開いてみましょう。
#UsePAM no という行があれば、これを下の様に変更します。
UsePAM yes

OpenSSH の FAQに以下の表記がありましたので、載せておきます。

バージョン UsePAMの値 PasswordAuthentication ChallengeResponseAuthentication
<=3.6.1p2 存在せず PAM を使う PAMAuthenticationViaKbdInt が許可されていれば PAM を使う
3.7p1 ~ 3.7.1p1 デフォルトは yes PAM を使わない UsePAM が許可されていれば PAM を使う
3.7.1p2 ~ 3.8.1p1 デフォルトは no PAM を使わない UsePAM が許可されていれば PAM を使う
3.9p1 デフォルトは no UsePAM が許可されていれば PAM を使う UsePAM が許可されていれば PAM を使う

だそうです。

要は、
UsePAM という項目があれば、
UsePAM yes と設定。

UsePAM が無くて、PAMAuthenticationViaKbdInt という項目があるなら、
PAMAuthenticationViaKbdInt yes と設定。
でいいと思います。

2. 必要であれば、sshd の再起動

/etc/ssh/sshd_config を編集した場合は、sshdを再起動し、PAMを使用する設定を反映させます。

# which sshd
/usr/sbin/sshd
# /usr/sbin/sshd -t ← エラーがなければ、再起動。

# /etc/init.d/sshd restart