一个 PAM dbus 例子

最近在看 Authorized 这块, 发现一篇文章不错, 其中的例子简单明了, 就拿来分析了一下, 这对 pam 和 dbus 的原理和实现有入门的帮助.

原文: 参考文章[1]  http://www.joachim-breitner.de/blog/archives/299-pam-dbus-authentication-by-bubbles.html

ps: 很羡慕国外开发人  hacked it. In the end I got, well, just what I wanted. 

因为这个例子是08年写的, 现在运行需要做一些修改, 因此我直接上传修改后的源码包.

使用方法

--------------

bash bootstrap.sh

make

sudo make install

-------------

install_file_list.txt  是 make install 安装的文件列表..

根据 README 来配置

主要修改 

"UsePAM yes" IN /etc/ssh/sshd_config

auth required pam_dbus.so IN /etc/pam.d/sshd

添加 dbus 服务,或者直接运行服务

/usr/local/share/pam_dbus/pam-dbus-notify

handlers/auth-dummy (测试程序,总是通过认证)

如果想要添加 dbus 自启动服务

cat /usr/share/dbus-1/system-services/de.nomeata.pam_dbus.service

[D-BUS Service]

Name=de.nomeata.pam_dbus

Exec=/usr/local/share/pam_dbus/pam-dbus-notify

User=root

那么如果 pam_dbus 通过 dbus 调用 de.nomeata.pam_dbus 时 dbus 会自动启动该服务.

截图:

---------------------

原作者说在 python 的垃圾回收机制上花费了一些时间.

他的方法是将每一个 notify 添加到全局的 ns 列表中. 这样保证 notify 会被变量引用, 从而避免垃圾回收机制将未完成调用的 notify 回收. 每一个 notify 完成回调后就从全局 ns 列表中 remove 掉这个 notify 让 python 自动回收... 将回调函数参数列表中的 pam_cb 指向 None 也是为了使该函数被回收.

参考文章:

[1] http://www.joachim-breitner.de/blog/archives/299-pam-dbus-authentication-by-bubbles.html

[2] http://linux.chinaitlab.com/tool/530218.html

[3] http://www.cnblogs.com/joe2k8/archive/2009/05/24/1488074.html

[4] http://zhgw01.blog.163.com/blog/static/1041481220094721735205/

原文地址:https://www.cnblogs.com/sunblackshine/p/1961751.html