サーバー側でSSHログインが成功した後に特権コマンドを実行したいと思います。ただし、sshd_config
これを適用する必要があるため、これはサーバー構成(またはユーザーが操作またはバイパスできない他の項目)にある必要があります。つまり、使用されるシステムアカウントがいくら制限されていても、スーパーユーザー権限を必要とするデータを操作できる必要があります(条件付きipset add
使用 - スクリプト作成など)。ああ、コンテンツにアクセスしたいですSSH_CLIENT
。特権実行ですが。また、順序はの影響を受けてはいけませんChrootDirectory
。
わかりました/etc/ssh/sshrc
。しかし、これは「クライアント側」のようです。つまり、コンピュータにログインしているユーザーが実行しています。
OpenSSHにそのようなツールはありますか?バージョン6.6を使用しています。
また、マニュアルページ(ssh(1)
)も明確ではありませんsshrc
。
/etc/ssh/sshrc
ssh
このファイルのコマンドはユーザーがログインしたときに実行されますが、ユーザーのシェル(またはコマンド)が開始される前に実行されます。sshd(8)
詳細については、マニュアルページを参照してください。
もしそうなら、これはPTY割り当てや強制適用などの設定の制限にもかかわらず、外部コマンド(経由)ForceCommand
またはサブシステムが呼び出されたときにも実行されることを意味しますか?もしそうなら、他の方法がなければ出入りを制限することもできますね。internal-sftp
chroot
/etc/sudoers
気づく:はいいいえinetd
明らかな理由でsshd(8)
上記のように(参照)を使用しなさい。ここ。
答え1
PAMが利用可能で、pam_exec.so
基準寸法。
「セッション」セクションに/etc/pam.d/sshd
次の行を追加するだけです。
session optional pam_exec.so /usr/local/bin/ipset-ssh
ipset-ssh
作成したスクリプトはどこにありますか?
このスクリプトはrootとして実行されます。この変数を使用してクライアントのIPアドレスを取得できますPAM_RHOST
。PAM_TYPE
ログインおよびログアウト時にスクリプトが実行されるため、この変数も確認する必要があります。ログイン時PAM_TYPE
に設定されますopen_session
。ログアウト時に設定しますclose_session
。
env > /tmp/pamenv
以下は、単純なテスト(スクリプトに入れた)から取得した変数の完全なリストです。
PAM_SERVICE=sshd
PAM_RHOST=127.0.0.1
GNOME_KEYRING_CONTROL=/home/phemmer/.cache/keyring-vJUUda
PAM_USER=phemmer
PWD=/
GNOME_KEYRING_PID=19742
SHLVL=1
PAM_TYPE=open_session
PAM_TTY=ssh
_=/usr/bin/env
スクリプトは次のように簡単です。
#!/bin/bash
[[ "$PAM_TYPE" == "open_session" ]] && ipset add whitelist $PAM_RHOST