どのように動作しますか?
一人では解決できないもう一つの問題が生じて帰ってきました。基本的に私が持っているのは、Python PAMとNFCリーダーに基づく2段階認証(2FA)モジュールです。ユーザーにパスワードの入力を求められたら、2FAジェニティPINコードの入力を求めるダイアログボックスが表示され、ユーザーがパスワードを入力すると認証が成功します。
いつ壊れるの?
このソリューションは、ユーザーがログインしてファイルを保存し、パスワードの入力を求められた場合、または端末でパスワードを使用するときにsudo
効果的です。このソリューションは、ユーザーがロックしたり(ロック画面を表示したり)、再起動後にログインする必要がある場合は機能しません。ジェニティダイアログボックス。
コード例:
/usr/share/pam-config/pprfid_pam.config
これは以下を含む私のPAM設定ファイルです。
Name: 2FA PAMpy RFID Authorization
Default: yes
Priority: 192
Auth-Type: Primary
Auth:
[success=end default=ignore] pam_exec.so seteuid debug log=/var/log/pprfid.log /usr/local/bin/pprfid_pam.py
Auth-Initial:
[success=end default=ignore] pam_exec.so seteuid debug log=/var/log/pprfid.log /usr/local/bin/pprfid_pam.py
/usr/local/bin/pprfid_pam.py
これは、2段階認証プロセスの魔法を実行するPython PAMモジュールファイルです。これはジェニティコマンドを実行すると動作しません。
# ...
Popen("/usr/bin/zenity --forms --width=199 --height=100 --title '2FA' --text='Authorization' --add-password='PIN' --ok-label='Authorize' --cancel-label='Cancel' --separator=',' --display=:0.0", shell=True, stdout=PIPE )
# ...
間違い!
上記のようにコンピュータがロックまたは再起動した後、ロック/ログイン画面からログインしようとすると、次のエラーが発生します/var/log/auth.log
。
Jul 24 18:13:14 ubuntu unix_chkpwd[46760]: password check failed for user (testuser)
Jul 24 18:13:14 ubuntu kcheckpass[46747]: pam_unix(kde:auth): authentication failure; logname= uid=1000 euid=1000 tty=:0 ruser= rhost= user=testuser
Jul 24 18:13:14 ubuntu kcheckpass[46761]: pam_exec(kde:auth): open of /var/log/pprfid.log failed: Permission denied
Jul 24 18:13:14 ubuntu kcheckpass[46747]: pam_exec(kde:auth): /usr/local/bin/pprfid_pam.py failed: exit code 13
私はこの問題を解決しようとします。
- 明らかに私がした最初のことは、権限を確認し、次のように設定することでした。
root@ubuntu:~# chown -R root:root /usr/local/bin/pprfid_pam.py
root@ubuntu:~# chown -R root:root /var/log/pprfid.log
root@ubuntu:~# chmod 0755 /usr/local/bin/pprfid_pam.py
root@ubuntu:~# chmod 0755 /var/log/pprfid.log
DISPLAY
設定が正しいことをもう一度確認しました:0.0
。
質問! ?
私は何が間違っていましたか? PAMモジュールの開発が本当に初めてなのですが、GUIをrootとして実行してみると、権限が拒否されたのですが、無駄に撃つ意向はないようです。助けてください。 !
よろしくお願いします。 @リチャーディフ
アップデート#1
関連記事とコメントを読んで別のフォーラムで議論をしてみると、ここで問題が発生しているようです。ジェニティあるいは、PAMモジュール自体をGUIとして実行することはできません。これを行うには、ディスプレイマネージャを介して統合する必要があります。私の場合SDDM。/etc/pam.d/*
強制的に実行できることを確認するために、設定ファイルでいくつかのシナリオをテストします。
アップデート#2
/usr/share/pam-config/pprfid_pam.config
すべての認証ポイントを扱っていますが..ジェニティ(ログイン/ロック画面で)外部セッションは表示されないため、このモジュールを統合する必要があるようです。SDDM直接GUI:思考:。
行き届いた路地/解決策(一種の)
少し破棄した後、私は/usr/share/pam-config/pprfid_pam.config
カバーを取り除きcommon-auth
、単に許可することにしました。ポリアクリルアミドログイン後にユーザーセッションで実行されるモジュール。Pythonスクリプトを実行する別の方法を見つける必要があります。SDDMディスプレイマネージャ。
100%確信できないけどポリアクリルアミドディスプレイマネージャとのクロスリンクサポート(SDDM私の場合は)不可能だという記事をたくさん読んだ。だから投稿を減らしています。ポリアクリルアミドモジュールの適用範囲。