Возможно ли для модуля PAM запретить более одного входа в систему для пользователя? - PullRequest
0 голосов
/ 09 марта 2012

Возможно ли иметь модуль PAM, который проверяет, вошел ли пользователь, пытающийся войти в систему через OpenSSH, и вошел ли он, а затем запретить второй вход в систему?

Я пробовал несколько других способов предотвратить более одного сеанса входа в систему, но ничего не работает, если кто-то может подтвердить, что это выполнимо с помощью пользовательского модуля PAM, я был бы очень признателен, спасибо.

Я заметил, что limit.conf работает нормально, когда я закомментирую конфигурацию sftp:

# SFTP + Port Forwarding Only for Normal Users
# Create home directory in /home/%u and set permissions to user / sftponly
# then do a usermod -d / user
# In Tunnelier set user home to /home

#Subsystem sftp /usr/lib/openssh/sftp-server

#Match group sftponly
#ChrootDirectory /home/%u
#X11Forwarding no
#AllowTcpForwarding yes
#ForceCommand internal-sftp

но это ломает sftp.

1 Ответ

2 голосов
/ 09 марта 2012

Вы можете проверить количество активных сеансов входа в систему, используя utmp или utmpx, простой цикл примерно такой:

#include <utmpx.h>

int get_num_login_sessions( const char* username )
{
    int num_active_sessions = 0;
    struct utmpx* ent = NULL;
    setutxent();
    while( (ent = getutxent()) != NULL )
    {
        if( ent->ut_type == USER_PROCESS &&
            strcmp(username, ent->ut_user) == 0 )
        {
            num_active_sessions++;
        }
    }
    endutxent();
    return num_active_sessions;
}

См. Запись в википедии для utmp: http://en.wikipedia.org/wiki/Utmp

Если вы создали модуль pam, который сделал это, и разместили его в верхней части стека аутентификации, вы можете потерпеть неудачу, если количество активных сессий было больше 0 (если ваш модуль был сложен как необходимый или необходимый).

...