2012-03-09 17 views
0

OpenSSH経由でログインしようとしているユーザーがすでにログインしているかどうかを確認し、2回目のログインを拒否しているかどうかを確認するPAMモジュールを使用できますか?PAMモジュールはユーザに対して複数のログインを防止できますか?

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

私はSFTPの設定をコメントアウトするときはOK 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を破ります。

+0

PAMモジュールは絶対にそれを確認することはできませんが、PAMモジュールは必要な処理を実行してからステータスを発行できます。私はこれができない理由はないと思う。しかし、それは質問を頼む - なぜあなたはこれをしたいですか? – ConcernedOfTunbridgeWells

+0

SFTPとhttpプロキシをssh経由でアクセスできるようにしているので、ログインの詳細を友人と共有する危険性があります。これは多くの問題を引き起こすため、ユーザーアカウントごとに1つのセッションしかアクティブにできないようにする必要がありますいつでも – Kyoku

+0

私の質問は、「ユーザーとパスワードを友人と共有しないようにするにはどうすればよいですか?ユーザーが接続されていないときに、ソリューションがログオンしないようにします。あなたはあまりにも多くの異なるIPアドレスから接続する人々の失礼な電子メールとロックアカウントを送信する方が良いかもしれません。 – ConcernedOfTunbridgeWells

答えて

2

あなたはutmpファイルまたはのutmpxを使用してアクティブなログインセッションの数、このような単純なループに何かチェックすることができ:あなたはPAMモジュールを作成した場合http://en.wikipedia.org/wiki/Utmp

#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のためのウィキペディアのエントリを参照してください。これを行い、あなたのauthスタックの最上部にスタックを積み重ねると、アクティブなセッションの数が0より大きい場合(モジュールが必須または必須としてスタックされている限り)、失敗する可能性があります。

+0

「あなたの認証スタックの最上部に積み重ねる」という意味を説明できますか?これは私の能力を超えているので、これを伝えるプログラマーを探す必要があります。助けてくれてありがとう、私はそれを感謝します。 – Kyoku

+0

pam設定ファイルは、pamモジュールの「スタック」で構成されています。認証の間、pamライブラリは各モジュールの命令を実行するスタックを下ります。 1 - モジュールが返すエラーコード2 - コンフィグレーションでどのような制御フラグが設定されているか(つまり、十分、必須、必須、オプション)pamライブラリは、スタック内のモジュールの実行を継続するか、実行。あなたのモジュールをトップモジュールとして「必須」として設定すると、正式な失敗を返し、ほかのモジュールがアクセスを許可しないようにすることができます。 –

+0

"root"ユーザをセッション番号の制限から明示的に除外することをお勧めします。実際にこのモジュールを作る。 –

関連する問題