사용자가 SSH를 통해 서버에 액세스하면 이메일 보내기 [닫기]

사용자가 SSH를 통해 서버에 액세스하면 이메일 보내기 [닫기]

누군가가 SSH를 통해 내 데비안 서버에 접근하면 알림을 받고 싶습니다.

그래서 사용자가 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.conf, man 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 스택이 있으므로 맹목적으로 따르기보다는 내 지침을 해석해야 합니다.)

관련 정보