PAMを使用してアプリケーションを起動したユーザーではなく、ユーザーを認証する方法

PAMを使用してアプリケーションを起動したユーザーではなく、ユーザーを認証する方法

現在、アプリケーション用の認証モジュールを開発しています。我々は、この目的のためにPAMを使用することを決めた。これを実行したがアプリケーションを起動したユーザーのみが認証されます。

つまり、ユーザー「appname」でアプリを起動すると、ユーザーが「some_user」ではなく「appname」の場合にのみ認証に成功したというメッセージのみが表示されます。

「some_user」に移動してその端末でアプリケーションを実行すると、「some_user」は認証できますが、「appname」は認証できません。

common-authでpam_unixのデバッグフラグをオンにしました。拒否されると、次のような出力が生成されます。

unix_chkpwd[4107]: check pass; user unknown
unix_chkpwd[4107]: password check failed for user (pamtest)
[app]: pam_unix(other:auth): authentication failure; logname=[appname] uid=1000 euid=1000 tty= ruser=[appname] rhost=  user=pamtest

ベストアンサー1

PAMはデーモンではなく、ただのライブラリです。一般ユーザーは認証データ(たとえば)にアクセスできないため、/etc/shadow一般ユーザーとして実行されるプログラムは認証できません。小さな例外があります。この場合、ユーザーは自分の身元を確認できます。グループIDの設定 /sbin/unix_chkpwd認証データにアクセスできるヘルパープログラムを自動的に呼び出します(ただし他のユーザーの認証は許可しません)。

したがって、SUIDフラグ(バックドアを開くのが難しいため推奨されません)を介してプログラム自体にroot権限を付与してrootで実行するようにするか、ネットワークサービスを介して認証するか、SUIDを実行する必要があります。プログラムsu

存在するこの問題考えられる解決策が議論される。

おすすめ記事