![사용자가 SSH를 통해 서버에 액세스하면 이메일 보내기 [닫기]](https://linux55.com/image/46891/%EC%82%AC%EC%9A%A9%EC%9E%90%EA%B0%80%20SSH%EB%A5%BC%20%ED%86%B5%ED%95%B4%20%EC%84%9C%EB%B2%84%EC%97%90%20%EC%95%A1%EC%84%B8%EC%8A%A4%ED%95%98%EB%A9%B4%20%EC%9D%B4%EB%A9%94%EC%9D%BC%20%EB%B3%B4%EB%82%B4%EA%B8%B0%20%5B%EB%8B%AB%EA%B8%B0%5D.png)
누군가가 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-users
SSH를 통해 로그인할 수도 있습니다. 즉, 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 스택이 있으므로 맹목적으로 따르기보다는 내 지침을 해석해야 합니다.)