উত্তর:
সতর্কতা: মতামত অনুসারে, ব্যবহারকারী নামক কোনও ফাইল তৈরি করে তবে এটি কাজ করে না
~/.ssh/rc
*
/etc/ssh/sshrc
নিম্নলিখিত সামগ্রীগুলি সংশোধন বা তৈরি করুন :
ip=`echo $SSH_CONNECTION | cut -d " " -f 1`
logger -t ssh-wrapper $USER login from $ip
echo "User $USER just logged in from $ip" | sendemail -q -u "SSH Login" -f "Originator <from@address.com>" -t "Your Name <your.email@domain.com>" -s smtp.server.com &
এসএসএইচ-এর মাধ্যমে যে কোনও সময় লগ ইন করবেন এটি ইমেল দ্বারা কার্যকরভাবে আপনাকে অবহিত করবে, এবং লগইন সিসলগে লগ হবে।
দ্রষ্টব্য: আপনি প্রয়োজন হবে sendemail
প্যাকেজ ( sudo apt-get install sendemail
) ইমেল বিজ্ঞপ্তি কাজ করার জন্য।
দ্রষ্টব্য: পোর্ট ফরওয়ার্ডিংয়ের সাথে কাজ করে, তবে -N বিকল্পের সাথে নয়।
~/.ssh/rc
সুরক্ষা পরিমাপ হিসাবে একেবারেই অকেজো হয় তবে এটি কাজ করে না । @ অ্যাডোসাইগুয়াস সম্পর্কিত উত্তর pam_exec
সঠিক।
~/.ssh/rc
ফাইল সংশোধন বা মুছতে পারবেন না । ভিত্তিক সিস্টেম-ভিত্তিক পদ্ধতি ব্যবহার করা pam
আরও বেশি নির্ভরযোগ্য এবং নিরাপদ, কারণ কেবল root
এটির সাথেই গোলযোগ হতে পারে। সুতরাং উত্তরটি হল: sshrd
পদ্ধতিগুলি একক-ব্যবহারকারী সিস্টেমগুলির জন্য ঠিক আছে, তবে pam
পদ্ধতিটি সমস্ত সিস্টেমের জন্য নির্ভরযোগ্যভাবে কাজ করে ।
সতর্কতা: আপনি যখনই লগইন কনফিগারেশন পরিবর্তন করেন ততক্ষণ, ব্যাকগ্রাউন্ডে ব্যাকআপ ssh সেশনটি ছেড়ে দিন এবং একটি নতুন টার্মিনাল থেকে লগইনটি পরীক্ষা করুন।
যেহেতু sshrc
ব্যবহারকারীর নিজস্ব ~/.ssh/rc
ফাইল থাকলে পদ্ধতিটি কাজ করে না , আমি pam_exec
@ অ্যাডোসাইগুয়াসের পরামর্শ অনুসারে এটি কীভাবে করবেন তা আমি ব্যাখ্যা করব । ভাল কথা হ'ল এটিকে অন্য কোনও ssh
ফাইলের মধ্যে হুক করে সহজেই (যেমন স্থানীয় লগইন বা সমস্ত লগইন হিসাবে) লগইন প্রকারের সাথে সহজেই মানিয়ে নেওয়া যেতে পারে /etc/pam.d/
।
প্রথমে আপনাকে কমান্ড লাইন থেকে মেল পাঠাতে সক্ষম হতে হবে। এই সম্পর্কে অন্যান্য প্রশ্ন আছে। কোনও মেল সার্ভারে এটি সম্ভবত ইনস্টল করা সবচেয়ে সহজ mailx
(যা সম্ভবত ইতিমধ্যে ইনস্টল করা আছে)।
তারপরে আপনার নীচের বিষয়বস্তু সহ একটি এক্সিকিউটেবল স্ক্রিপ্ট ফাইলের প্রয়োজন login-notify.sh
( /etc/ssh/
উদাহরণ হিসাবে এটি এনেছি )। আপনি ইমেইল বিজ্ঞপ্তির বিষয়বস্তু এবং বিষয়বস্তু পরিবর্তন করতে ভেরিয়েবল পরিবর্তন করতে পারেন। chmod +x login-notify.sh
এটাকে এক্সিকিউটেবল করার জন্য এক্সিকিউট করতে ভুলবেন না ।
#!/bin/sh
# Change these two lines:
sender="sender-address@example.com"
recepient="notify-address@example.org"
if [ "$PAM_TYPE" != "close_session" ]; then
host="`hostname`"
subject="SSH Login: $PAM_USER from $PAM_RHOST on $host"
# Message to send, e.g. the current environment variables.
message="`env`"
echo "$message" | mailx -r "$sender" -s "$subject" "$recepient"
fi
এটি একবার হয়ে গেলে আপনি নীচের লাইনটি এতে যুক্ত করতে পারেন /etc/pam.d/sshd
:
session optional pam_exec.so seteuid /path/to/login-notify.sh
পরীক্ষার উদ্দেশ্যে, মডিউলটি এতে অন্তর্ভুক্ত করা হয়েছে optional
, যাতে এক্সিকিউশন ব্যর্থ হলে আপনি এখনও লগ ইন করতে পারেন। পরে আপনি কি নিশ্চিত যে এটি কাজ করে প্রণীত, আপনি পরিবর্তন করতে পারেন optional
থেকে required
। তারপরে আপনার হুক স্ক্রিপ্টটির সম্পাদনা সফল না হলে লগইন সম্ভব হবে না (যদি আপনি এটি চান তবে)।
আপনারা যারা পিএএম কী এবং কীভাবে এটি কাজ করে তার একটি ব্যাখ্যা প্রয়োজন, এখানে একটি খুব ভাল ।
/etc/ssh/login-notify.sh failed: exit code 13
লগইনের ঠিক পরে :(
UsePAM
সেট করেছেন তা নিশ্চিত yes
করুন।
unconfined_u:object_r:bin_t:s0
। তারপরে আমি chmod +x /bin/login-notify.sh
এবং এটি কাজ করে।
আমরা আমাদের লিনাক্স বাক্সগুলিতে প্রক্রিয়াগুলি নিরীক্ষণের জন্য মনিট ব্যবহার করে যাচ্ছি । মনিট এসএমএস-এর মাধ্যমে সফল লগিনগুলিতে ইমেলগুলি দ্বারাও সতর্ক করতে পারে। আমাদের মনিট কনফিগারেশনটি এর মতো দেখাচ্ছে
check file ssh_logins with path /var/log/auth.log
# Ignore login's from whitelist ip addresses
ignore match "100.100.100.1"
# Else, alert
if match "Accepted publickey" then alert
দ্রষ্টব্য: মেলসারভার কনফিগারেশন, ইমেল ফর্ম্যাট ইত্যাদি monitrc
ফাইলটিতে সেট করা উচিত
আপডেট করুন: আরো বিস্তারিত লিখেছেন ব্লগ পোস্টে এই
নিম্নলিখিতটি লিখুন /etc/profile
:
if [ -n "$SSH_CLIENT" ]; then
TEXT="$(date): ssh login to ${USER}@$(hostname -f)"
TEXT="$TEXT from $(echo $SSH_CLIENT|awk '{print $1}')"
echo $TEXT|mail -s "ssh login" you@your.domain
fi
/etc/profile
প্রতিটি লগইন (ব্যাশ শেল ব্যবহারকারীদের জন্য) চালানো হয়। যদি ব্যবহারকারী এসএসএসের মাধ্যমে লগ ইন করে থাকে তবে যদি বিবৃতিটি ইন্ডেন্টড কোড ব্লকটি চালিত করতে পারে তবেই সত্যটি ফিরে আসবে।
এরপরে, আমরা বার্তার পাঠ্যটি তৈরি করব:
$(date)
date
কমান্ডের আউটপুট দ্বারা প্রতিস্থাপন করা হবে${USER}
ব্যবহারকারীর লগইন নাম দ্বারা প্রতিস্থাপন করা হবে $(hostname -f)
লগ ইন করা সিস্টেমের সম্পূর্ণ হোস্টনাম দ্বারা প্রতিস্থাপন করা হবে দ্বিতীয় TEXT
লাইনটি প্রথমটিতে যুক্ত করে, এই ব্যবহারকারীটির লগ ইন করা সিস্টেমটির আইপি ঠিকানা প্রদান করে। শেষ অবধি, উত্পন্ন পাঠ্যটি আপনার ঠিকানায় একটি ইমেলের মাধ্যমে প্রেরণ করা হয়।
সংক্ষিপ্তসার লিনাক্স, ডিফল্টরূপে, প্রতিটি লগইন সিস্টেমের লগ ফাইলগুলিতে ssh দ্বারা বা না হওয়া রেকর্ড করে, তবে কখনও কখনও - বিশেষত এমন সিস্টেমে যা খুব কমই ssh এর মাধ্যমে অ্যাক্সেস করা যায় - দ্রুত এবং নোংরা বিজ্ঞপ্তি কার্যকর হতে পারে।
এই অন্যান্য প্রশ্নের মধ্যে আপনার সম্ভবত যা খুঁজছেন তা আপনার কাছে রয়েছে। মূলত আপনি স্ক্রিপ্টে মেল কমান্ডটিতে একটি কল যুক্ত করতে পারেন যা কোনও ব্যবহারকারী ssh: /etc/pam.d/sshd এর মাধ্যমে লগ ইন করলে চালানো হয়
আমি এই থ্রেড থেকে চমত্কার উত্তর নিয়েছি এবং এমন কিছু তৈরি করেছি যা কম-বেশি-অনুলিপি-এবং-পেষ্টযোগ্য। এটি ইমেলগুলি প্রেরণ করতে মেলগান ব্যবহার করে যাতে আপনি এসটিএমপি স্থাপনে কোনও সমস্যা থেকে রক্ষা পান। আপনার কেবল একটি মেলগান এপিআই কী এবং প্রেরণকারী ডোমেন দরকার।
এসএসএইচ লগইন করার পরে, স্ক্রিপ্টটি কোনও ইমেল ঠিকানায় লগইন (ব্যবহারকারী, হোস্টনাম, আইপি ঠিকানা এবং সমস্ত বর্তমান পরিবেশের ভেরিয়েবল) সম্পর্কিত বিশদ প্রেরণ করবে। message
ভেরিয়েবলটি কাস্টমাইজ করে আপনি যে প্যারামিটারগুলি প্রেরণ করতে চান তা যুক্ত করা সহজ ।
#!/bin/sh
# this script is triggered on SSH login and sends an email with details of the login
# such as user, IP, hostname, and environment variables
# script should be placed somewhere on the server, eg /etc/ssh
# to trigger on SSH login, put this line in /etc/pam.d/sshd:
# session optional pam_exec.so seteuid /etc/ssh/snippet-for-sending-emails-on-SSH-login-using-PAM.sh
# Script settings
MAILGUN_API_KEY=
MAILGUN_DOMAIN=
SENDER_NAME=
SENDER_EMAIL_ADDRESS=
RECIPIENT_EMAIL_ADDRESS=
if [ "$PAM_TYPE" != "close_session" ]; then
host=$(hostname)
ip=$(dig +short myip.opendns.com @resolver1.opendns.com) # gets public IP
# Message to send, e.g. the current environment variables.
subject="SSH login - user:$USER pam-host:$PAM_RHOST host:$host ip:$ip" \
message=$(env)
curl -s --user '$MAILGUN_API_KEY' \
https://api.mailgun.net/v3/$MAILGUN_DOMAIN/messages \
-F from='$SENDER_NAME <$SENDER_EMAIL_ADDRESS>' \
-F to=$RECIPIENT_EMAIL_ADDRESS \
-F subject="$subject" \
-F text="${subject} ${message}"
fi
পোস্ট করার পরে আমি লক্ষ্য করেছি @ পাচারানিও মেলগান সম্পর্কে লিখেছেন, তবে তারা খনন দিয়ে কী করছে তা আমি বুঝতে পারি না, তাই আমি আমার সমাধানও পোস্ট করব।
আপনি যদি কোনও ভিএম-তে থাকেন যাতে এসএমটিপি নেই, আপনার মেলগান, সেন্ডগ্রিড বা এর মতো কিছু ব্যবহার করতে হবে। এটি গুগল ক্লাউডে আমার জন্য কাজ করেছে।
এই পদ্ধতির একটি ঝুঁকি হ'ল কোনও আক্রমণকারী যদি আপনার বহির্গামী ইমেল শংসাপত্র প্রেরণ করতে পারে তবে তারা sudo su
স্ক্রিপ্টটি খুঁজে পেতে পারে বা আপনি ইমেল পাঠযোগ্যযোগ্য প্রেরণের জন্য স্ক্রিপ্টটি রেখে যান। মেলগানের একটি আইপি শ্বেত তালিকা রয়েছে যা আপনার সেট আপ করা উচিত, তবে এটি অবশ্যই এই নির্দিষ্ট ব্যবহারের ক্ষেত্রে অসম্পূর্ণ।
mydomain.com
আপনি আপনার আসল ডোমেনে পরিবর্তন করার পরে এই স্ক্রিপ্টটি মেলগানের সাথে কাজ করবে । আপনি স্ক্রিপ্টটি /root/login-alert.sh
বা আরও কিছু অস্পষ্ট স্থানে সংরক্ষণ করতে পারেন ।
#!/bin/bash
if [ "$PAM_TYPE" != "close_session" ]; then
APK='api:your-mailgun-api-key-goes-here'
FROM='Login Alert <mailgun@mg.mydomain.com>'
TO='me@mydomain.com'
SUBJECT="Login: $PAM_USER @ mydomain.com from $PAM_RHOST"
DATE=$(date)
TEXT="At $DATE a login occurred for $PAM_USER on mydomain.com from $PAM_RHOST"
curl -s --user $APK \
https://api.mailgun.net/v3/mg.mydomain.com/messages \
-F from="$FROM" \
-F to="$TO" \
-F subject="$SUBJECT" \
-F text="$TEXT"
fi
এর পরে /etc/pam.d/sshd
আপনি অন্তর্ভুক্ত করার পরিবর্তে @ ফ্রিজ উত্তর অনুসরণ করতে পারেন :
session optional pam_exec.so seteuid /root/login-alert.sh
আমি নোট করেছি এটি আগত ব্যবহারকারীদের জন্য কোনও পঠনের অনুমতি নিয়ে কাজ করে ( chmod 700 /root/login-alert.sh
) তাই আগত ব্যবহারকারীদের স্ক্রিপ্টে পঠনের অ্যাক্সেস থাকা দরকার না।
এই স্ক্রিপ্টটি /etc/ssh/sshrc
একটি ইমেল প্রেরণ করে এবং সিস্টেম লগারে একটি লগ যুক্ত করে। আপনার ব্যক্তিগত সাবনেট এবং ওয়ার্ল্ড ওয়াইড ওয়েব (প্রয়োজনীয় sudo apt-get install mailutils
) এর মধ্যে একটি পার্থক্য তৈরি হয়েছে (যাতে আপনি চাইলে এটি অক্ষম করতে পারেন )।
SUBNET="192.168.0"
IP=`echo $SSH_CONNECTION | cut -d " " -f 1`
CURRENT_SUBNET="$(echo $IP|cut -d'.' -f1-3)"
if [ "$CURRENT_SUBNET" = "$SUBNET" ]; then
msg="This message comes from same subnet! User $USER just logged in from $IP"
echo $msg|mail -s "$msg" root
else
msg="This message comes from different subnet! User $USER just logged in from $IP"
echo $msg|mail -s "$msg" root
fi
logger -t ssh-wrapper $USER login from $IP
আমি /var/log/auth.log ইন " ব্যর্থ " (কেস সংবেদনশীল) শব্দটি সম্বলিত কোনও লাইন পর্যবেক্ষণ করতে সোয়াচ প্যাকেজ থেকে স্বাচডগ ব্যবহার করছি । আমি এটিকে একটি সাধারণ সিস্টেমড পরিষেবা হিসাবে চালানোর জন্য সেট আপ করেছি
apt install swatch
মালিকের মূল, অনুমতি 644 সহ একটি কনফিগার ফাইল /etc/swatch/swatch-auth-log.conf তৈরি করুন -
watchfor /fail/i
pipe /usr/local/sbin/sendmail -t auth.log@xxx.com
"/ ব্যর্থ / আমি" , কোন RegExp হয় "আমি" ইঙ্গিত করে যে এই কেস অসংবেদী সঙ্গে। (আমার সেন্ডমেল হ'ল একটি স্ক্রিপ্ট যা মেলগুনের মাধ্যমে একটি নির্দিষ্ট ঠিকানায় সমস্ত কিছু প্রেরণ করে , তাই ঠিকানাটি আসলে কোনও ব্যাপার নয়)।
মালিকের মূলের সাথে অনুমতি নিয়ে একটি সিস্টেমযুক্ত পরিষেবা ফাইল /etc/systemd/system/swatch-auth-log.service তৈরি করুন 4৪৪ -
[Unit]
Description=monitor /var/log/auth.log, send fail notices by mail
[Service]
ExecStart=/usr/bin/swatchdog -c /etc/swatch/swatch-auth-log.conf -t /var/log/auth.log
[Install]
#WantedBy=multi-user.target
WantedBy=pre-network.target
তারপরে পরিষেবাটির স্থিতি সক্ষম, শুরু এবং দেখুন -
sudo systemctl enable swatch-auth-log.service
sudo systemctl start swatch-auth-log.service
sudo systemctl status swatch-auth-log.service
একটি সফল স্থিতি প্রতিবেদনের উদাহরণ -
● swatch-auth-log.service - monitor /var/log/auth.log, send fail notices by mail
Loaded: loaded (/etc/systemd/system/swatch-auth-log.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2019-01-31 21:41:52 PST; 17min ago
Main PID: 27945 (swatchdog)
Tasks: 3 (limit: 4915)
CGroup: /system.slice/swatch-auth-log.service
├─27945 /usr/bin/perl /usr/bin/swatchdog -c /etc/swatch/swatch-auth-log.conf -t /var/log/auth.log
├─27947 /usr/bin/perl /.swatchdog_script.27945
└─27949 /usr/bin/tail -n 0 -F /var/log/auth.log
Jan 31 21:41:52 ub18 systemd[1]: Started monitor /var/log/auth.log, send fail notices by mail.
Jan 31 21:41:52 ub18 swatchdog[27945]: *** swatchdog version 3.2.4 (pid:27945) started at Thu Jan 31 21:41:52 PST 2019
সেবা বুটে স্বয়ংক্রিয়ভাবে শুরু দ্বারা monitor করা হবে systemd হল ।
আলোচনা
মূলত আমি একটি ব্যবহৃত পাম সমাধান উপরে অনুরূপ, কিন্তু /etc/pam.d/common-auth না sshd । এটি ছিল ssh, সুডো এবং লগইনগুলি ধরা। তবে আপডেটের পরে আমার সমস্ত পাসওয়ার্ডগুলি রেসকিউ মোডে পাসওয়ার্ড পরিবর্তন করার পরেও কাজ করা বন্ধ করে দিয়েছে। অবশেষে আমি /etc/pam.d/common-auth কে আবার মূল এবং পাসওয়ার্ডগুলিতে ফিরিয়ে আনলাম । স্ট্যাক এক্সচেঞ্জ ইউনিক্স এবং লিনাক্স বোর্ডের একটি বিবরণ এখানে
আমি স্থির করেছি যে সুরক্ষা সেটিংস বুঝতে অসুবিধে না করা নিরাপদ হবে। এবং সবকিছু লগ ফাইলগুলিতে যাইহোক।
আমি আসলে @ সিরচর্লো উত্তরটি পরিবর্তন করেছি
ip=`echo $SSH_CONNECTION | cut -d " " -f 1`
logger -t ssh-wrapper $USER login from $ip
echo "User $USER just logged in from $ip" | mail -s "SSH Login" "who to <who-to@youremail.com>" &
এটি 14.04, 16.04 এবং Centos 6.5.x সার্ভারগুলিতে আমি সেটআপ করেছি, আমি নিশ্চিত যে আপনাকে এমটিএ কনফিগার করা হয়েছে তা নিশ্চিত করা দরকার, তবে একবার এটি হয়ে গেলে, এটি একটি মোহন কাজ করে। পরবর্তী পদক্ষেপ টিউলিও সতর্কতা
ssh -N
কেবল পোর্ট ফরওয়ার্ডিং সহ।