ユーザーが SSH 経由でサーバーにアクセスしたときにメールを送信する [閉じる]

ユーザーが SSH 経由でサーバーにアクセスしたときにメールを送信する [閉じる]

誰かがSSH経由で私のDebianサーバーにアクセスしたときに通知を受けたいと思います。

そのため、ユーザーがSSHを介して自分のサーバーにログインするたびに電子メールを送信したいので、最後に次の行を追加しました/etc/profile

/usr/local/bin/shell-login.sh | mailx -s "SSH Login User $(whoami) on YOUR-HOSTNAME" [email protected]

/usr/local/bin/shell-login.sh含む:

#!/bin/bash

echo "Login on $(hostname) at $(date +%Y-%m-%d +%H:%M)"
echo "User: "$(whoami)
echo
id
echo
finger

これは素晴らしい作品です。これで、毎分rootログインしたというメールが届きますが、その理由はcron次のとおりです。/var/log/auth.log

自動内部SSH呼び出し時に電子メールが送信されないように、これをどのように変更しますか?

答え1

質問がまだ明確ではないので、最初の段落に含まれている質問に答えようとしています。 SSHログインを記録する方法は?

また、PAMをサポートするすべての* nixシステムへの回答を制限します。特定のオペレーティングシステムを提供して問題の範囲を制限しないため、これは関連事項です。


いいですね。過去に私が使用したものは次のとおりですsshrc。このファイル(場所は異なる場合があります)を追加すると、次のファイルに置き換え/etc/sshられます。インタラクティブ(つまり、シェルを使用)SSH接続。

sftp-internalここでの欠点は、SFTP(サブシ​​ステム)接続などの関連情報がわからないことです。

しかし、ここには内部路線があります。

pam_exec.so以下を追加することで、PAMを有効に使用し、SSHへの影響を制限することができます/etc/pam.d/sshd(これはコメントアウトされていない最後の行でした)。

session    optional     pam_exec.so stdout /etc/your_email_script.sh

これにより、スクリプトが特権ユーザーとして実行され(メールを送信するためにsendmailバイナリを呼び出す場合に関連します)、ユーザーがこのスクリプトの実行を避けるためにできることはほとんどありません。このスクリプトへのアクセスをroot

必要に応じて関連部品をoptional調整する必要があります。関連読書:man pam_exec、、、man pam.confman pam.d

スクリプトをどれだけ頻繁に実行するかを検討することもできます。


あなたが見て恋しいのはまさにそれです。サーバーをロックする他の方法もたくさんあります。まず、パスワードは許可されません。認証にのみキーを使用してください。 SFTPアクセス権のみを持つユーザーには他のアクセス権がないことを確認してください。

Match group sftponly
        ChrootDirectory /home
        X11Forwarding no
        AllowTcpForwarding no
        ForceCommand internal-sftp
        PasswordAuthentication no

sftponlyグループメンバーはSFTPのみを使用でき、ポート転送などは使用できず、範囲が指定されます/home(ファイル/フォルダ権限が残ります)。

AllowGroups ssh-users

〜するただグループメンバーはssh-usersSSHを介してログインすることもできます。つまり、SSHログインをユーザーのサブセットに制限できます。

PermitRootLogin no

そのユーザーを設定してsudoerに変更する必要があります。

PasswordAuthentication no
PubkeyAuthentication yes

お客様は、制限付きで管理できるパスワードを使用してログインできないようにする必要があります。

AuthorizedKeysFile     /some/protected/folder/.ssh/authorized_keys

ユーザーが自分のファイルを管理することを許可しないようにすることはできますが、authorized_keysユーザーの代わりに管理する必要があります。

答え2

この試み:

#!/bin/bash

if [ ! $(whoami) == root ] ; then
echo "Login on $(hostname) at $(date +%Y-%m-%d +%H:%M)"
echo "User: "$(whoami)
echo
id
echo
finger
fi

答え3

モジュールを(慎重に)編集してスタックに/etc/pam.d/sshd追加するだけです。pam_execこのモジュールは、誰かがSSHセッションを正常に開始したときに外部プログラム(スクリプトなど)を呼び出すために使用できます。

「方法」の指示が必要な場合は、お知らせください。Debianベースのシステムに含まれるように回答を更新します。 (他のディストリビューションにはわずかに異なるPAMスタックがあるため、盲目的に従うのではなく、私の指示を解釈する必要があります。)

関連情報