Created
December 21, 2023 13:34
-
-
Save d351d3r/57e56015b5259a222b76d1f727cb8252 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #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. **Проверьте Синтаксис и Кодировку**: Убедитесь, что ваш код модуля написан без ошибок и что файл модуля сохранен в правильной кодировке для вашей системы. | |
| Если после выполнения этих шагов проблема остается, предоставьте дополнительную информацию об ошибке или вашей конфигурации, чтобы я мог более точно помочь вам в решении проблемы. |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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