sshを、ユーザ、IPでアクセス制限
sshでのアクセスを、IPや、ユーザごとに制限をかける事ができます。 ここでは、pam と呼ばれる認証の仕組みを利用します。
Last Update : 2006年09月05日
ssh を、ユーザ、IPでアクセス制限 手順
設定ファイル
- /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