Это не может быть, покончили ls
(по крайней мере, насколько я знаю), но можно найти пустое использование каталогов find
:
find . -type d -empty
Если глубина имеет значение для Вас с GNU find
:
find . -maxdepth 1 -type d -empty
] Не изобретайте колесо, пусть [] rsyslog [
] сделает все за вас. У него есть возможность отправлять письма, когда шаблоны совпадают в сообщениях syslog до того, как они попадут в файл. [
]Установите ваш адрес электронной почты и SMTP сервер и поместите его в ваш []/etc/rsyslog.conf[
] или опустите его в []/etc/rsyslog.d/[
] и []перезапустите rsyslog[][
$ModLoad ommail
$ActionMailSMTPServer localhost
$ActionMailFrom rsyslog@whatever.com
$ActionMailTo you@youremail.com
$template mailSubject,"Login Alert on %hostname%"
$template mailBody,"\n\n%msg%"
$ActionMailSubject mailSubject
$ActionExecOnlyOnceEveryInterval 1
# the if ... then ... mailBody mus be on one line!
if $msg contains 'session opened for user' then :ommail:;mailBody
]
[]Это запустит электронную почту, когда []rsyslog[
] совпадет со строкой []сеанса, открытого для пользователя [
] в
сообщение. [
] Вы можете посмотреть в []/var/log/auth.log[
] сообщения из []sshd[
], чтобы увидеть, что еще можно использовать в качестве шаблонов. [
] Источник: []rsyslog ommail[][
]/var/log/auth.log
Отслеживайте попытки подключения к вашей системе
cat /var/log/auth.log grep sshd.\*Failed
, это может привести к появлению неудачных попыток, также доступны временные метки, чтобы вы могли настроить его на ваш скрипт, Также, возможно, с помощью
tail -f /var/log/auth.log
вы сможете постоянно отслеживать входные данные, а затем выполнить некоторый регэкспресс.
Во-первых, вы не должны полагаться на .профиль пользователя, так как он может его изменить. Если это действительно ваш сервер, вы можете:
/bin/login
, которая сделает ваши вещи, а затем выполнит реальный /bin/login
. (Я не совсем уверен, что, например, ssh выполнит /bin/login
, но я ожидаю этого). Но я не могу это рекомендовать - это слишком опасно. Я знаю, что это устарело, но я написал кое-что для отслеживания успешных и неудачных ssh-соединений / попытки. А также запрещенные IP-адреса, если вы используете sshguard. Я написал это на Python и на Ruby. Он отправит вам электронное письмо, когда кто-то успешно подключится через ssh, когда кто-то получит неправильный пароль ssh или когда кто-то будет заблокирован из-за множества неудачных попыток. Надеюсь, это поможет кому-то в будущем, кто будет искать эту проблему и найдет мой код!
Реализация Python:
https://github.com/amboxer21/SSHMonitorPy
Реализация Ruby:
https://github.com/amboxer21/SSHMonitor
Для сценария python я написал сценарий bash для отслеживания процесса. Он проверяет, работает ли он каждую минуту с помощью задачи root cron. Если он не запущен, запускает другой процесс.
Сценарий Bash:
/home/anthony/.ssh/is_sshm_running.sh
#!/bin/bash
if [[ `ps aux | egrep --color -i "root.*[0-9]*:[0-9]* sudo /usr/bin/python /usr/bin/SSHMonitor.py" | wc -l` < 1 ]]; then
sudo /usr/bin/python /usr/bin/SSHMonitor.py -e "example@gmail.com" -p "password" &
fi
if [[ `ps aux | egrep --color -i "root.*[0-9]*:[0-9]* sudo /usr/bin/python /usr/bin/SSHMonitor.py" | wc -l` > 1 ]]; then
sudo kill -9 `ps aux | egrep --color -i "root.*[0-9]*:[0-9]* sudo /usr/bin/python /usr/bin/SSHMonitor.py" | awk '{print $2}'`;
fi
, который вызывается этой root задачей cron каждую минуту:
[anthony@ghost ImageCapturePy]$ sudo crontab -l
[sudo] password for anthony:
* * * * * /bin/bash /home/anthony/.ssh/is_sshm_running.sh
После ответа @Creek; С rsyslog для сопоставления нескольких пользователей (не лучшая реализация, и, вероятно, его можно заменить регулярным выражением, но это работает)
$ModLoad ommail
$ActionMailSMTPServer localhost
$ActionMailFrom source@mail.com
$ActionMailTo target@mail.com
$template mailSubject,"Login alert on %hostname%"
# mailBody must be on one line!
$template mailBody,"\n\n%msg%"
$ActionMailSubject mailSubject
$ActionExecOnlyOnceEveryInterval 1
if $msg contains 'session opened for' then {
if $msg contains 'USER1' then :ommail:;mailBody
# Repetition required (did not investigate why)
$ActionMailSMTPServer localhost
$ActionMailFrom source@mail.com
$ActionMailTo target@mail.com
$template mailSubject,"Login alert on %hostname%"
$template mailBody,"\n\n%msg%"
$ActionMailSubject mailSubject
$ActionExecOnlyOnceEveryInterval 1
if $msg contains 'USER2' then :ommail:;mailBody
}