У меня возникла странная проблема с настройкой PAM при попытке ограничить вход по ssh с помощью pam_access.so с пакетом libpam-modules_1.1.8-3.6 убунту2.18.04.1.
содержимое /etc/security/access.conf
+ : root : ALL
+ : devops : ALL
#+ : computer managers : ALL
- : ALL : ALL
содержимое /etc/pam.d/sshd
требуется учетная запись pam_access.so listsep =, debug
с этим параметром , каждый пользователь может войти в систему независимо от того, входит ли он в какую-либо указанную группу или нет.
Если я удалю listsep =,
из конфигурации PAM, то он будет работать как положено.
из журналов отладки Похоже, что всякий раз, когда указан listsep
, он не возвращает никаких ошибок, если не может найти группу пользователей в access.conf AKA pam_access.so всегда будет возвращать успех с помощью listsep.
В приведенном ниже контексте пользователь является членом «компьютерных менеджеров», но не «DevOps»
Журналы отладки с включенным listsep и только DevOps в access.conf
pam_access(sshd:account): line 1: + : root : ALL
pam_access(sshd:account): list_match: list= root , item=user
pam_access(sshd:account): user_match: tok= root , item=user
pam_access(sshd:account): string_match: tok= root , item=user
pam_access(sshd:account): user_match=0, "user"
pam_access(sshd:account): line 2: + : devops : ALL
pam_access(sshd:account): list_match: list= devops , item=user
pam_access(sshd:account): user_match: tok= devops , item=user
pam_access(sshd:account): string_match: tok= devops , item=user
pam_access(sshd:account): user_match=0, "user"
pam_access(sshd:account): line 4: - : ALL : ALL
pam_access(sshd:account): list_match: list= ALL , item=user
pam_access(sshd:account): user_match: tok= ALL , item=user
pam_access(sshd:account): string_match: tok= ALL , item=user
pam_access(sshd:account): user_match=0, "user"
Accepted password for user from IP port PORT ssh2
см. Последнюю строку журнала pam_access user_match = 0
. давайте сравним его с журналами, когда listsep не указан
pam_access(sshd:account): line 1: + : root : ALL
pam_access(sshd:account): list_match: list= root , item=user
pam_access(sshd:account): user_match: tok=root, item=user
pam_access(sshd:account): string_match: tok=root, item=user
pam_access(sshd:account): user_match=0, "user"
pam_access(sshd:account): line 2: + : devops : ALL
pam_access(sshd:account): list_match: list= devops , item=user
pam_access(sshd:account): user_match: tok=devops, item=user
pam_access(sshd:account): string_match: tok=devops, item=user
pam_access(sshd:account): user_match=0, "user"
pam_access(sshd:account): line 4: - : ALL : ALL
pam_access(sshd:account): list_match: list= ALL , item=user
pam_access(sshd:account): user_match: tok=ALL, item=user
pam_access(sshd:account): string_match: tok=ALL, item=user
pam_access(sshd:account): user_match=2, "user"
pam_access(sshd:account): list_match: list= ALL, item=user
pam_access(sshd:account): from_match: tok=ALL, item=IP
pam_access(sshd:account): string_match: tok=ALL, item=IP
pam_access(sshd:account): from_match=2, "IP"
pam_access(sshd:account): access denied for user 'user' from 'IP'
Я могу подтвердить, когда listsep =,
указал, что он правильно анализирует группу «менеджеры компьютеров», но не возвращает коды ошибок.
Кто-нибудь сталкивался с этой проблемой?
Можно ли что-нибудь обойти, если имя группы содержит пробелы?
Заранее спасибо,
Бхану