0

OpenSSH 経由でログインしようとしているユーザーがすでにログインしているかどうかを確認し、2 回目のログインを拒否するかどうかを確認する PAM モジュールを用意することは可能ですか?

複数のログインセッションを防ぐために他のいくつかの方法を試しましたが、何も機能していません。カスタム PAM モジュールを使用してこれが実行可能であることを誰かが確認できれば、非常に感謝しています。

sftp 構成をコメントアウトすると、limits.conf が正常に機能することに気付きました。

# 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を壊します。

4

1 に答える 1

2

次のような単純なループである 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 を超えると失敗する可能性があります (モジュールが必須または必須としてスタックされている限り)。

于 2012-03-09T17:07:44.923 に答える