Предупреждение: согласно комментариям, это не работает, если пользователь создает файл с именем ~/.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 &
Это будет эффективно уведомлять вас по электронной почте каждый раз, когда кто-то входит в систему через SSH, и логин будет зарегистрирован в системном журнале.
Примечание. Для работы уведомления по электронной почте вам потребуется sendemail
пакет ( sudo apt-get install sendemail
).
Примечание: работает с переадресацией портов, но с опцией -N нет.
ssh -N
только с переадресацией портов.~/.ssh/rc
поэтому он совершенно бесполезен в качестве меры безопасности. Ответ @adosaiguas относительноpam_exec
правильный.~/.ssh/rc
файлы. Использование общесистемного метода на основеpam
просто более надежно и безопасно, потому что толькоroot
может связываться с ним. Ответ таков:sshrd
методы работают нормально для однопользовательских систем, ноpam
метод надежно работает для всех систем.Так как
sshrc
метод не работает, если у пользователя есть собственный~/.ssh/rc
файл, я объясню, как это сделать,pam_exec
как предложено @adosaiguas. Хорошая вещь заключается в том, что это также может быть легко адаптировано к другим типам входаssh
(например, локальным входам или даже всем входам) путем подключения к другому файлу/etc/pam.d/
.Для начала вам нужно иметь возможность отправлять почту из командной строки. Есть и другие вопросы по этому поводу. На почтовом сервере его, вероятно, проще всего установить
mailx
(который, вероятно, уже установлен в любом случае).Затем вам нужен исполняемый файл скрипта
login-notify.sh
(я поместил его,/etc/ssh/
например) со следующим содержимым. Вы можете изменить переменные, чтобы изменить тему и содержание уведомления по электронной почте. Не забудьте выполнить,chmod +x login-notify.sh
чтобы сделать его исполняемым.Получив это, вы можете добавить следующую строку
/etc/pam.d/sshd
:В целях тестирования модуль включен как
optional
, так что вы можете войти в систему, если выполнение не удалось. После того, как вы убедились, что это работает, вы можете изменитьoptional
наrequired
. Тогда вход в систему будет невозможен до тех пор, пока не будет успешно выполнено ваше скрипт-ловушка (если вы этого хотите).Для тех из вас, кто нуждается в объяснении того, что такое PAM и как он работает, очень хороший пример .
источник
/etc/ssh/login-notify.sh failed: exit code 13
UsePAM
установилиyes
в свой sshd_config.unconfined_u:object_r:bin_t:s0
. Тогда у меняchmod +x /bin/login-notify.sh
и это работает.Мы использовали monit для мониторинга процессов на наших Linux-блоках. Монит может также оповещать по электронной почте об успешных входах через SSH. Наш конфиг monit выглядит так
Примечание. Конфигурация почтового сервера, формат электронной почты и т. Д. Должны быть указаны в
monitrc
файле.Обновление: написал более подробную запись в блоге по этому
источник
Поместите следующее в
/etc/profile
:Как работает скрипт
/etc/profile
выполняется при каждом входе в систему (для пользователей оболочки bash). Оператор if вернет true, только если пользователь вошел в систему через ssh, что, в свою очередь, приведет к запуску блока с отступом кода.Далее мы затем строим текст сообщения:
$(date)
будет заменен выводомdate
команды${USER}
будет заменено логином пользователя$(hostname -f)
будет заменено полным именем хоста системы, в которую вы входитеВторая
TEXT
строка добавляет к первой, давая IP-адрес системы, с которой пользователь входит в систему. Наконец, сгенерированный текст отправляется по электронной почте на ваш адрес.Резюме По умолчанию Linux будет регистрировать каждый системный вход в систему, будь то по ssh или нет, в файлы системного журнала, но иногда - особенно для системы, к которой редко обращаются через ssh - быстрое и грязное уведомление может быть полезным.
источник
В этом другом вопросе вы, вероятно, имеете то, что ищете. По сути, вы можете добавить вызов к команде mail в сценарии, который запускается, когда пользователь входит в систему через ssh: /etc/pam.d/sshd.
источник
Я взял несколько отличных ответов из этой ветки и сделал что-то более-менее копируемое и вставляемое. Он использует Mailgun для отправки писем, поэтому вы избавлены от любых проблем с настройкой STMP. Вам просто нужен ключ API Mailgun и отправляющий домен.
При входе в систему по SSH сценарий отправляет сведения об имени входа (пользователь, имя хоста, IP-адрес и все текущие переменные среды) на адрес электронной почты. Можно легко добавить другие параметры, которые вы хотите отправить, настроив
message
переменную.источник
Мэйлган адаптация ответа @Fritz
После публикации я заметил, что @pacharanero также пишет о mailgun, но я не понимаю, что они делают с dig, поэтому я также опубликую свое решение.
Если вы используете виртуальную машину без SMTP, вам может понадобиться что-то вроде mailgun, sendgrid или тому подобное. Это сработало для меня в Google Cloud.
Одним из рисков такого подхода является то, что злоумышленник может получить учетные данные для отправки исходящей электронной почты, если он может,
sudo su
и найти сценарий, или вы оставляете сценарий для отправки электронной почты для чтения. У mailgun есть белый список ip, который вы должны настроить, но он явно не подходит для этого конкретного случая использования.Этот сценарий должен работать с mailgun после того, как вы перейдете
mydomain.com
к реальному домену. Вы можете сохранить сценарий в/root/login-alert.sh
каком-либо более неясном месте.После этого вы можете следовать ответу @Fritz, чтобы внести изменения
/etc/pam.d/sshd
:Я отмечаю, что это работает без разрешения на чтение для прибывающих пользователей (
chmod 700 /root/login-alert.sh
), поэтому прибывающим пользователям не нужно иметь доступ для чтения к сценарию.источник
Этот скрипт
/etc/ssh/sshrc
отправляет электронное письмо и добавляет журнал в системный журнал. Различие (так что вы можете отключить его, если хотите) между вашей личной подсетью и всемирной паутиной (обязательноsudo apt-get install mailutils
).источник
Я использую swatchdog из пакета swatch для отслеживания любых строк, содержащих фразу « fail » (без учета регистра) в /var/log/auth.log . Я настроил его, чтобы запустить как простой сервис systemd.
Создайте файл конфигурации /etc/swatch/swatch-auth-log.conf с владельцем root, разрешение 644 -
«/ Сбой / я» является регулярным выражением, с «я» , указывающим , что не чувствителен к регистру. (Мой sendmail - это скрипт, отправляющий все на фиксированный адрес с помощью mailgun , поэтому адрес на самом деле не имеет значения).
Создайте файл службы systemd /etc/systemd/system/swatch-auth-log.service с владельцем root, разрешение 644 -
Затем включите, запустите и просмотрите статус услуги -
Пример успешного отчета о состоянии -
Служба будет автоматически запущена при загрузке и отслеживается системой systemd .
обсуждение
Первоначально я использовал решение pam, аналогичное описанному выше, но в /etc/pam.d/common-auth не sshd . Это должно было поймать ssh, sudo и логины. Но потом после обновления все мои пароли перестали работать, даже после смены паролей в режиме восстановления. В конце концов я изменил /etc/pam.d/common-auth обратно на оригинал, и пароли снова заработали. Вот описание на плате Stack Exchange для UNIX и Linux
Я решил, что безопаснее не трогать трудно понять настройки безопасности. И все равно в файлах журналов.
источник
Я на самом деле только что изменил ответ @SirCharlo
Это работает на 14.04, 16.04 и серверах Centos 6.5.x, которые я настроил, я уверен, что вам нужно убедиться, что mta настроен, но как только это будет сделано, это заработает. Следующий шаг twilio alert
источник