Я управляю сервером, и мне интересно, можно ли зарегистрировать пароль, использованный для неудачной попытки подключения. В auth.log есть пользователь, но не пароль.

это просто для информативной цели, чтобы увидеть, какой пароль обычно используется.

1 ответ1

1

Вы можете сделать это с помощью модуля PAM в Python.

Сначала сделайте этот новый модуль:

import crypt, spwd, syslog

def auth_log(msg):
 """Send errors to default auth log"""
 syslog.openlog(facility=syslog.LOG_AUTH)
 syslog.syslog("SSH Attack Logged: " + msg)
 syslog.closelog()

def check_pw(user, password):
 """Check the password matches local unix password on file"""
 hashed_pw = spwd.getspnam(user)[1]

 return crypt.crypt(password, hashed_pw) == hashed_pw

def pam_sm_authenticate(pamh, flags, argv):
 try:
  user = pamh.get_user()
 except pamh.exception, e:
  return e.pam_result

 if not user:
  return pamh.PAM_USER_UNKNOWN

 try:
  resp = pamh.conversation(pamh.Message(pamh.PAM_PROMPT_ECHO_OFF, 'Password:'))
 except pamh.exception, e:
  return e.pam_result

 if not check_pw(user, resp.resp):
  auth_log("Remote Host: %s (%s:%s)" % (pamh.rhost, user, resp.resp))
  return pamh.PAM_AUTH_ERR

 return pamh.PAM_SUCCESS

def pam_sm_setcred(pamh, flags, argv):
 return pamh.PAM_SUCCESS

def pam_sm_acct_mgmt(pamh, flags, argv):
 return pamh.PAM_SUCCESS

def pam_sm_open_session(pamh, flags, argv):
 return pamh.PAM_SUCCESS

def pam_sm_close_session(pamh, flags, argv):
 return pamh.PAM_SUCCESS

def pam_sm_chauthtok(pamh, flags, argv):
 return pamh.PAM_SUCCESS

Затем замените стандартную запись пароля в /etc/pam.d/sshd нашим новым модулем. Сохраните копию исходного кода в /lib/security/pwreveal.py. Теперь откройте /etc/pam.d/sshd и вставьте строку ниже.

#@include common-auth
auth       requisite     pam_python.so pwreveal.py

Ссылка: http://www.chokepoint.net/2014/01/more-fun-with-pam-python-failed.html

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .