Не удается проверить пароль пользователя в моем модуле PAM из заставки - PullRequest
0 голосов
/ 26 февраля 2020

Я сделал модуль pam для тестов и демонстраций, и в этом модуле я получаю пароль от пользователя и проверяю, хорош ли он, например:

bool authenticateUser( const char *user, char *pass )
{
  char *encrypted, *p;
  struct passwd *pwd;
  struct spwd *spwd;
  bool authOk;

  pwd = getpwnam( user );

  if (pwd == NULL)
  {
    pam_syslog(pamh, LOG_ERR, "my_pam : pwd == NULL");
    return false;
  }

  spwd = getspnam( user );
  if (spwd == NULL && errno == EACCES)
  {
    pam_syslog(pamh, LOG_ERR, "my_pam : spwd == NULL && errno == EACCES");
    return false;
  }

  if (spwd != NULL)           // If there is a shadow password record 
    pwd->pw_passwd = spwd->sp_pwdp;     // Use the shadow password 

  encrypted = crypt(pass, pwd->pw_passwd);
  memset(pass, '\0', strlen(pass));

  if (encrypted == NULL)
  {
    pam_syslog(pamh, LOG_ERR, "my_pam : encrypted == NULL");
    return false;
  }

  authOk = strcmp(encrypted, pwd->pw_passwd) == 0;
  if (!authOk)
  {
    pam_syslog(pamh, LOG_ERR, "my_pam : !authOk");
    return false;
  }

  return true;
}

Все нормально, если я использую его из на панели подключения GDM или с консоли будет работать команда типа 'sudo ls'. Моя проблема возникает, когда я хочу использовать свой модуль из заставки, появляется такой системный журнал:

"my_pam : spwd == NULL && errno == EACCES"

И из того, что я понимаю, кажется, что пользователь, вызывающий модуль, не имеет достаточных прав.

Я также пытаюсь установить бит suid следующим образом:

chmod u+s my_pam.so

И это больше ничего не делает. После этого мне удалось передать пароль к стандартному модулю "pam_ unix .so" следующим образом:

// set the password in the pam stack, it will be transmited to other module
pam_set_item(pamh, PAM_AUTHTOK, (const void **)(const void*)&clearPass);
memset(clearPass, '\0', 100);

И он работает как обаяние, но я буду чувствовать себя лучше, если пойму, что с ним не так Мой первый метод, даже если он не самый лучший.

PS: Другая информация может быть полезной:

Linux debian-alde 4.19.0-5-amd64 #1 SMP Debian 4.19.37-5+deb10u2 (2019-08-08) x86_64 GNU/Linux

Distributor ID: Debian
Description:    Debian GNU/Linux 10 (buster)
Release:        10
Codename:       buster

MATE Desktop Environment 1.20.4
...