Skip to content

Instantly share code, notes, and snippets.

@d351d3r
Created December 21, 2023 13:34
Show Gist options
  • Select an option

  • Save d351d3r/57e56015b5259a222b76d1f727cb8252 to your computer and use it in GitHub Desktop.

Select an option

Save d351d3r/57e56015b5259a222b76d1f727cb8252 to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <security/pam_modules.h>
#include <security/pam_ext.h>
// Функция аутентификации
PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh, int flags, int argc, const char **argv) {
const char* user;
int ret = pam_get_user(pamh, &user, "Username: ");
if (ret != PAM_SUCCESS) {
return ret;
}
// Проверяем, состоит ли имя пользователя только из цифр
while (*user) {
if (*user < '0' || *user > '9') {
return PAM_AUTH_ERR;
}
user++;
}
return PAM_SUCCESS;
}
// Функция установки учетных данных
PAM_EXTERN int pam_sm_setcred(pam_handle_t *pamh, int flags, int argc, const char **argv) {
return PAM_SUCCESS;
}
// Функции управления сессиями
PAM_EXTERN int pam_sm_open_session(pam_handle_t *pamh, int flags, int argc, const char **argv) {
return PAM_IGNORE;
}
PAM_EXTERN int pam_sm_close_session(pam_handle_t *pamh, int flags, int argc, const char **argv) {
return PAM_IGNORE;
}
// Функция изменения пароля
PAM_EXTERN int pam_sm_chauthtok(pam_handle_t *pamh, int flags, int argc, const char **argv) {
return PAM_IGNORE;
}
#ifdef PAM_STATIC
// Определение структуры модуля для статической компиляции
struct pam_module _pam_numeric_user_modstruct = {
"pam_numeric_user",
pam_sm_authenticate,
pam_sm_setcred,
pam_sm_open_session,
pam_sm_close_session,
pam_sm_chauthtok,
NULL,
};
#endif
Ошибка "неизвестный модуль" при аутентификации через PAM обычно указывает на то, что система не может найти или идентифицировать указанный модуль PAM. Вот несколько шагов, которые помогут вам устранить эту проблему:
1. **Проверьте Путь Установки Модуля**: Убедитесь, что ваш модуль установлен в правильной директории. Для большинства систем на основе Debian это будет `/lib/x86_64-linux-gnu/security/` для 64-битных систем или `/lib/i386-linux-gnu/security/` для 32-битных систем. Вы можете проверить это, выполнив команду `ls /lib/x86_64-linux-gnu/security/` или соответствующую команду для вашей системы, чтобы увидеть, присутствует ли там ваш модуль.
2. **Имя Модуля в Конфигурации PAM**: Убедитесь, что имя модуля в конфигурационном файле PAM точно соответствует имени вашего скомпилированного модуля. Например, если ваш модуль называется `pam_numeric_user.so`, в конфигурационном файле PAM (например, `/etc/pam.d/sshd` для SSH) вы должны указать:
```
auth required pam_numeric_user.so
```
3. **Права Доступа к Файлу**: Убедитесь, что у файлов модуля установлены правильные права доступа. Вы можете установить их, используя команду `chmod`. Например:
```sh
sudo chmod 644 /lib/x86_64-linux-gnu/security/pam_numeric_user.so
```
4. **Логирование и Отладка**: Вы можете включить более подробное логирование для PAM, чтобы получить больше информации об ошибке. Это можно сделать, добавив `debug` к строке модуля в конфигурационном файле PAM:
```
auth required pam_numeric_user.so debug
```
После этого проверьте системные журналы (например, `/var/log/auth.log`) для получения дополнительной информации об ошибке.
5. **Проверьте Синтаксис и Кодировку**: Убедитесь, что ваш код модуля написан без ошибок и что файл модуля сохранен в правильной кодировке для вашей системы.
Если после выполнения этих шагов проблема остается, предоставьте дополнительную информацию об ошибке или вашей конфигурации, чтобы я мог более точно помочь вам в решении проблемы.
@d351d3r
Copy link
Author

d351d3r commented Dec 21, 2023

gcc -fPIC -fno-stack-protector -c pam_allow_digits_user.c

sudo ld -x --shared -o /lib/x86_64-linux-gnu/security/pam_numeric_user.so pam_numeric_user.o

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment