web-dev-qa-db-ja.com

サーバーへの新しいSFTP接続を検出(および電子メールで通知)するためのLinux Bashスクリプト

新しいSFTP接続が検出されたときにサーバーアカウントに電子メールを送信するために使用できるLinuxサーバー(CentOS)ガイドまたはスクリプトのヘルプを探しています。たとえば、接続名と要求元のIPアドレス、および接続認証タイプ(可能な場合)(SSHキーやパスワードなど)を指定します。

私はBashスクリプトの経験がほとんどありませんが、SSH接続を検出するこれを正確に行うことに成功しました。ただし、これを拡張して電子メールアドレスSFTP Connectionsをサーバーに通知する場所を見つけることができません。

これについて助けてくれてありがとう。

これはかなりひどい質問であり、お詫び申し上げますが、検索エンジンの結果には、「サーバーにSFTPを送信する方法を教えてください!」明らかに不適切なものなど。

乾杯


アップデート1

したがって、/var/logs/secureはSFTP接続情報を収集します。私はその情報をいくつかの方法で取得し、基本的なメールで破棄できるようにしたいと考えています。

私の現在動作しているSSH検出器は.bashrcでこれを行います:

echo -e 'ALERT - SSH access detected:' `date` `ls -l \`tty\` | awk '{print $3}'` '\n\nConnection Details: ' `w -h` '\n\nList of WHO: ' `who --login` | mail -s "Alert: Server Access Email Subject" [email protected]

これは呼び出され、CSF(ConfigServerFirewall)によってトリガーされます

上記の2つをどうにか組み合わせて、次のように/var/log/secureに情報行が追加されるようにします。

Subsystem       sftp    /usr/libexec/openssh/sftp-server -l INFO

次に、ラインの開始を検出することもできます。

...の公開鍵を受け入れました。

この行は、電子メールアドレスに送信されます。


アップデート2:

自分でBashシムを作成する必要があるかもしれません。


更新3:

Piotrのおかげで、私のshimのコードは次のようになりました。

#!/bin/bash
# Create a temporary log file
LOGFILE=$(/bin/mktemp /tmp/sftplog.XXXXXX)
# Redirect stderr to LOGFILE
exec 2>"$LOGFILE"

# Run the SFTP with logging to stderr
/usr/libexec/openssh/sftp-server -e -u 022 -l VERBOSE

# Use some sendmail substitute to send an e-mail
/usr/sbin/sendmail -i root@localhost <<EOF
From: [email protected]
To: [email protected]
Subject: SFTP connection for user $(LOGNAME)

Hello,
User $(LOGNAME) just connected to the SFTP server from $(SSH_CONNECTION).

Connection log:
$(<"$LOGFILE")
EOF

# echo -e "Hello,\nUser $(LOGNAME) just connected to the SFTP server from $(SSH_CONNECTION).\n\nConnection log:\n$(<"$LOGFILE")" | mail -s "SFTP connection for user $(LOGNAME)" [email protected]

# Delete the log
rm -f "$LOGFILE"

コマンドラインからsendmail命令を実行しましたが、これは正しく機能しますが、新しいSFTP接続ではEOF OF while packetreadが発生します。


アップデート4

スクリプトを次のように減らします。

#!/bin/bash
# Create a temporary log file

# Run the SFTP with logging to stderr
/usr/libexec/openssh/sftp-server -e -u 022 -l INFO
exec >/dev/null

接続時にパケットの読み取り中にEOFの問題が引き続き返されます。


アップデート5:

ファイルのアクセス許可を元のサブシステムファイル(/usr/libexec/openssh/sftp-server)のアクセス許可と同じに設定すると、問題が解決し、スクリプトが正しく実行されます。

2
Martin

Ssh subsystemsの良い点は、デフォルトの実装(internal-sftp Martinのコメント)を別の実装に置き換えることができることです。 /usr/lib/openssh/sftp-serverのラッパースクリプト。

小さな例:内容を含むファイル/usr/local/bin/sftp-loggerを作成します。

#!/bin/bash
# Create a temporary log file
LOGFILE=$(/bin/mktemp /tmp/sftplog.XXXXXX)
# Redirect stderr to LOGFILE
exec 2>$LOGFILE

# Run the SFTP with logging to stderr
/usr/lib/openssh/sftp-server -e -l INFO

# In case of chatty sendmail
exec >/dev/null

# Use some sendmail substitute to send an e-mail
/usr/sbin/sendmail -i root@localhost <<EOF
From: sshd@localhost
To: root@localhost
Subject: SFTP connection for user $LOGNAME

Hello,
User $LOGNAME just connected to the SFTP server from $SSH_CONNECTION.

Connection log:
$(<$LOGFILE)
EOF

# Delete the log
rm -f $LOGFILE

次に、デフォルトのSFTPサーバーを/etc/ssh/sshd_config内のスクリプトに置き換えるだけです。

Subsystem sftp /usr/local/bin/sftp-logger
6