Linux PAM: сопоставление между конфигурацией и приложением

Используйте grep, если совпадение означает, что оно действительно:

grep -P '^[0-9]+(\.[0-9]+)?$' infile.txt

Приведенное выше регулярное выражение можно использовать в sedили awkили любой другой команде.

sed -n -Ee '/^[0-9]+(\.[0-9]+)?$/p'
awk '/^[0-9]+(\.[0-9]+)?$/'

Здесь также проверяется, соответствует ли файл этому регулярному выражению или нет.

awk '/^[0-9]+(\.[0-9]+)?$/{print "matched";exit} {print "not-matched";exit}' file
0
07.11.2019, 10:53
1 ответ

TL;DR:правил нет; вместо этого это зависит от реализации, выполненной разработчиком приложения.

ДЛИННАЯ ВЕРСИЯ:

Когда программа использует PAM для аутентификации, она должна вызыватьpam_start():

int pam_start(const char *service_name, const char *user, const struct pam_conv *pam_conversation, pam_handle_t **pamh); 

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

Например, сервер OpenSSH вызывает pam_start()в исходном файлеauth_pam.c:

sshpam_err =
    pam_start(SSHD_PAM_SERVICE, user, &store_conv, &sshpam_handle);

Константа SSH_PAM_SERVICEопределяется (в том же файле )следующим образом:

#if !defined(SSHD_PAM_SERVICE)
extern char *__progname;
# define SSHD_PAM_SERVICE       __progname
#endif

Кроме того, значение __prognameопределено в ssh.cкак:

__progname = ssh_get_progname(av[0]);

Как вы, возможно, знаете, av[0]в C — это имя двоичного файла. Таким образом, если двоичный файл демона OpenSSH называется sshd, pam_start()будет вызываться с sshdв качестве service_name.

(Обратите внимание, что я проигнорировал вызов ssh_get_progname(), но я думаю, что этого достаточно, чтобы проиллюстрировать мой ответ.)

1
28.01.2020, 02:39

Теги

Похожие вопросы