![성공적인 SSH 로그인 후 권한 있는 명령을 실행하는 방법이 있습니까(반드시 셸이나 PTY를 사용할 필요는 없음)?](https://linux55.com/image/36868/%EC%84%B1%EA%B3%B5%EC%A0%81%EC%9D%B8%20SSH%20%EB%A1%9C%EA%B7%B8%EC%9D%B8%20%ED%9B%84%20%EA%B6%8C%ED%95%9C%20%EC%9E%88%EB%8A%94%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%B4%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C(%EB%B0%98%EB%93%9C%EC%8B%9C%20%EC%85%B8%EC%9D%B4%EB%82%98%20PTY%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%A0%20%ED%95%84%EC%9A%94%EB%8A%94%20%EC%97%86%EC%9D%8C)%3F.png)
서버 측에서 SSH 로그인이 성공한 후 권한 있는 명령을 실행하고 싶습니다. 그러나 sshd_config
이를 적용해야 하므로 이는 서버 구성(또는 사용자가 조작하거나 우회할 수 없는 다른 항목) 에 있어야 합니다 . 즉, 사용되는 시스템 계정이 아무리 제한되어 있더라도 슈퍼유저 권한이 필요한 데이터를 조작할 수 있어야 합니다(예: ipset add
조건부 사용 - 스크립트 작성 가능). 아, 콘텐츠에 액세스하고 싶습니다 SSH_CLIENT
. 권한 있는 실행이기는 하지만요. 또한 순서는 의 영향을 받지 않아야 합니다 ChrootDirectory
.
알아요 /etc/ssh/sshrc
. 하지만 이것은 "클라이언트 측"인 것 같습니다. 즉, 컴퓨터에 로그인한 사용자가 실행하는 것입니다.
OpenSSH에 그러한 도구가 있습니까? 버전 6.6을 사용하고 있습니다.
또한 매뉴얼 페이지( ssh(1)
)도 명확하지 않습니다 sshrc
.
/etc/ssh/sshrc
ssh
이 파일의 명령은 사용자가 로그인할 때 실행되지만 사용자의 셸(또는 명령)이 시작되기 전에 실행됩니다.sshd(8)
자세한 내용은 매뉴얼 페이지를 참조하십시오 .
그렇다면 이는 PTY 할당 또는 강제 적용과 같은 설정에 대한 제한에도 불구하고 외부 명령( 을 통해 ForceCommand
) 또는 하위 시스템이 호출될 때도 실행된다는 의미입니까 ? 그렇다면 다른 방법이 없다면 출입을 제한할 수도 있겠네요.internal-sftp
chroot
/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
작성한 스크립트는 어디에 있습니까?
이 스크립트는 루트로 실행됩니다. 이 변수를 사용하여 클라이언트의 IP 주소를 얻을 수 있습니다 PAM_RHOST
. PAM_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