成功したSSHログイン後に特権コマンドを実行する方法はありますか(必ずしもシェルやPTYを使用する必要はありません)。

成功したSSHログイン後に特権コマンドを実行する方法はありますか(必ずしもシェルやPTYを使用する必要はありません)。

サーバー側でSSHログインが成功した後に特権コマンドを実行したいと思います。ただし、sshd_configこれを適用する必要があるため、これはサーバー構成(またはユーザーが操作またはバイパスできない他の項目)にある必要があります。つまり、使用されるシステムアカウントがいくら制限されていても、スーパーユーザー権限を必要とするデータを操作できる必要があります(条件付きipset add使用 - スクリプト作成など)。ああ、コンテンツにアクセスしたいですSSH_CLIENT。特権実行ですが。また、順序はの影響を受けてはいけませんChrootDirectory

わかりました/etc/ssh/sshrc。しかし、これは「クライアント側」のようです。つまり、コンピュータにログインしているユーザーが実行しています。

OpenSSHにそのようなツールはありますか?バージョン6.6を使用しています。


また、マニュアルページ(ssh(1))も明確ではありませんsshrc

/etc/ssh/sshrcsshこのファイルのコマンドはユーザーがログインしたときに実行されますが、ユーザーのシェル(またはコマンド)が開始される前に実行されます。sshd(8)詳細については、マニュアルページを参照してください。

もしそうなら、これはPTY割り当てや強制適用などの設定の制限にもかかわらず、外部コマンド(経由)ForceCommandまたはサブシステムが呼び出されたときにも実行されることを意味しますか?もしそうなら、他の方法がなければ出入りを制限することもできますね。internal-sftpchroot/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_RHOSTPAM_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

関連情報