카테고리 보관물: 개발이야기

SLACK으로 SSH 로그인 알림 확인

서버를 운영하면서 가장 무서운 일은 허가되지 않은 인원이 운영하는 서버에 몰래 접근하여 어떠한 작업을 한다는 것이다.
아무리 보안에 신경을 쓴다고 해도 보안 문제는 쉽게 해결이 되지 않기 때문에 해당 부분에 대해서 누군가 로그인을 한다면 해당 부분에 대한 알림을 통해서 허가 받은 인원이 작업을 하고 있다는 사실을 알기 위해서 슬랙을 통한 알림을 설정한다.

Slack으로 알림을 주기 위한 Web Hook 쉡 스크립트

#!/bin/sh

url="https://hooks.slack.com/services/XXX/YYY/ZZZ" # 슬랙 WebHook으로 설정한 URI
channel="#ssh" # 알림을 받을 SLACK CHANNEL
icon=":dark_sunglasses:" # 알림을 보내는 아이콘 설정
host="`hostname`"

if [ "$PAM_TYPE" != "close_session" ]; then
content="\"attachments\": [ { \"mrkdwn_in\": [\"text\", \"fallback\"], \"fallback\": \"SSH LOGIN: $PAM_USER connected to \`$host\`\", \"text\": \"SSH LOGIN TO \`$host\` \", \"fields\": [ { \"title\": \"USER ID\", \"value\": \"$PAM_USER\", \"short\": true }, { \"title\": \"USER IP\", \"value\": \"$PAM_RHOST\", \"short\": true } ], \"color\": \"#F35A00\" } ]"
curl -X POST --data-urlencode \
      "payload={
        \"channel\": \"$channel\",
        \"mrkdwn\": true,
        \"username\": \"SSH_MONITOR\",
        $content,
        \"icon_emoji\": \"$icon\"
    }" $url &
fi

if [ "$PAM_TYPE" == "close_session" ]; then
content="\"attachments\": [ { \"mrkdwn_in\": [\"text\", \"fallback\"], \"fallback\": \"SSH LOGOUT: $PAM_USER connected to \`$host\`\", \"text\": \"SSH LOGOUT TO \`$host\` \", \"fields\": [ { \"title\": \"USER ID\", \"value\": \"$PAM_USER\", \"short\": true }, { \"title\": \"USER IP\", \"value\": \"$PAM_RHOST\", \"short\": true } ], \"color\": \"#F35A00\" } ]"
curl -X POST --data-urlencode \
      "payload={
        \"channel\": \"$channel\",
        \"mrkdwn\": true,
        \"username\": \"SSH_MONITOR\",
        $content,
        \"icon_emoji\": \"$icon\"
    }" $url &
fi

스크립트 생성 후 실행 권한 부여

sudo chmod +x /etc/ssh/scripts/ssh_notify_to_slack.sh

SSH 로그인시 알림을 실행하기 위한 PAM 등록

SSH의 접속에 대한 세션 샅애값이 변경될 때 알림을 주기 위해서 pam_exec.so를 활용하여 SlackWeb Hook으로 알림을 준다.

sudo echo "session optional pam_exec.so seteuid /etc/ssh/scripts/ssh_notify_to_slack.sh" >> /etc/pam.d/sshd

MAC에서 Python 3.x 버젼 쉽게 사용하기

Mac에는  Python이 기본적으로 설치되어있다. 하지만 아쉽게도 최신 버전이 아니라 2.7.10 버젼(모하비 기준)의 Python이 설치되어 있다.

Python을 그냥 사용해도 문제는 없겠지만 Python2.x와 Python3.x는 호환성이 문제가 있기 때문에 버젼에 대한 확실한 구분이 필요하다. 지금 Python을 통해서 개발을 해야 한다면 아마도 당연히 Python3.x를 활용해서 개발을 해야 할 것이다.

Python2.x와 Python3.x의 구체적인 차이점은 https://wiki.python.org/moin/Python2orPython3 참조

그렇다면  Mac에서 Python을 업그레이드 하는 방법 여러가지가 있겠지만, 이전 버젼을 제거하지 않고 사용하는 방법으로 Python을 공식 홈페이지의 https://www.python.org/downloads/ 를 통해서 시스템에 맞는 버젼의 Python3.x를 설치하면 된다. 하지만 문제점은 python이라는 명령어가 아니라 python3이라는 숫자가 계속 붙어서 사용해야 한다는 것이다.

해당 문제를 해결하기 위해서 유닉스(리눅스) 시스템 계열의 꼼수를 활용한다.

시스템 환경 설정 값에  Alias를 통한  시스템 명령어 변경이다.

alias python='python3'

# Setting PATH for Python 3.7
# The original version is saved in .profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/3.7/bin:${PATH}"
export PATH

설정된 값을 적용하는 방법은 현재의 터미널을 재실행하는 방법과 터미널 창에서 source ~/.profile 을 활용하여 설정 파일을 다시 로드하는 방법이 있다.