- 8
- May
今天折腾了一天的dbus和PolicyKit,有郁闷也有惊喜。
郁闷的是,使用纯dbus来调用PolicyKit只成功了一次,往后一次也没成功过。另外PolicyKit for GNOME还未完善,也没有其他语言的绑定,这只能等开发者开发了。
惊喜的是,使用纯dbus来调用一些系统极的操作还是比较稳定和可靠。
通过一句dbus的调用指令和事先准备好的环境,就可以让任何用户执行root权限的操作!
-----
这么危险?那我到底要用dbus来做什么呢?哈哈,Ubuntu Tweak真的将具备修改整个系统的能力了。这也意味着Ubuntu Tweak越来越危险了!
以前,我在为Ubuntu Tweak未来的功能设想时,当时是想使用socket/plug的方式来将外部窗体插入,从而执行一些系统级操作,但是这个方法不是很好。后来Ubuntu 8.04发布了,系统工具都应用了PolicyKit,即界面下增加了“Unlock”,用户修改系统级参数时,只要unlock就可以了。
当时想Ubuntu Tweak未来也将是这种形式,无奈PolicyKit发展刚刚开始,应用还不全,因为我是用Python语言的,所以暂时无法使用PolicyKit。
不过PolicyKit只是用户认证相关的组件,如果仅仅是修改系统权限,可以不用PolicyKit,直接用dbus。话说PolicyKit也是用dbus实现的。
所以今晚折腾了很久,琢磨了一下dbus,最终成功地在命令行下输入不带sudo的一条指令(或者用Python调用dbus),就在/usr/bin目录下进行了文件创建的操作。哈哈!
不久以后,Ubuntu Tweak就将具备修改系统极属性的功能了。它终于要从一个桌面设定软件变成一个系统设定软件了!
系统设定的范围很广!比如,修改Grub、修改系统服务、优化内核参数、启动参数……
嗯,慢慢做吧。
PS:哎!Ubuntu Tweak用户数量太多了,在收集到1001个条目以后,服务器因为CPU占用过高,数据收集出问题了。现在每个属性最大值都是1001。真不知道是我编程編错了,还是服务器出问题了。


Tweak越来越强大,真是好样的!顶
可否提供一些dbus的资料?kobecater000[at]163.com
哈哈。谢谢thebye85。
@robin:我看的是Freedesktop上的资料,其他都是零零散散搜索来的。
http://www.freedesktop.org/wiki/Software/dbus
http://dbus.freedesktop.org/doc/dbus-tutorial.html
不需要口令验证?那...岂不是很危险么
我现在对dbus的感觉还停留在一条消息总线这么一个概念。不仅仅是一条通讯途径么?能跨过GUI层一下的权限设置?
要口令验证了,最新的成果在:终于把PolicyKit搞定了!
dbus,我也认识不深,本质上来说,就是一条高效低延迟的消息总线。现在看到GNOME下很多的软件都具备dbus服务,可以通过这些服务来操作或与这些软件沟通。
dbus的服务也可以设置权限,要真正掌握还得花不少时间。
不是。。。我的意思是如果
“最终成功地在命令行下输入不带sudo的一条指令(或者用Python调用dbus),就在/usr/bin目录下进行了文件创建的操作。哈哈!”
ubuntu的sudo不至于那么脆弱吧。有没有个小code sample来看看哈。
数据收集丢给 Google 分析也不错,
偷懒的可以用 gtkmozembed 打开有你 google 分析的页面
@shellex:
对,调用dbus服务确实可以以普通用户的权限就完成root才能完成的操作。但是前提是,你以root权限正确地安装上这个dbus服务。哈哈。
所以说,你不能执行sudo,也就不能做这样破坏的事情了。代码的话,只能看Ubuntu Tweak有关PolicyKit的部分了,除去帐户验证的部分,就是权限无限的dbus服务了。
我想了解下dbus(python绑定)在事件循环中的使用。
我的原意是在主GUI(qt)进程中创建一个线程(qthread,需要从线程中传递数据给主GUI),线程中使用dbus监听外部程序的信号,但是我发现,线程启动,dbus的事件循环启动后,居然会阻塞主GUI进程,请问这个问题怎么解决?还是程序设计上的问题?
跟Qt绑定不是很清楚,在GTK中,有相关函数可以使dbus线程插入到main_loop当中去。我想Qt中应该也是的吧!