浏览模式: 标准 | 列表全部文章

用山寨的方式让twiki支持客户端证书登录

twiki官方站上有一个插件:X509UserPlugin,看说明是用来支持证书登录的。不过鼓捣了半天还是没成效,直接报错说viewauth没权限。几天还是没啥进展,直接火大,决定山寨解决。

首先配置twiki的服务器支持SSL,用SSL来获取客户端证书并验证客户端证书的有效性。

与twiki相关配置如下:

twiki.conf:


SSLCACertificateFile /etc/pki/tls/certs/test.crt

SSLOptions 
+FakeBasicAuth +StrictRequire +OptRenegotiate

SSLVerifyClient 
require

SSLVerifydepth 1

其中 test.crt为签发客户端证书的有效根证书,用于在ssl中验证客户端证书的有效性。

然后就是twiki本身。由于twiki是后台使用perl实现的无数据库wiki,本身的用户权限关系比较简单,直接是用当前的用户名和保存的权限列表比较,在里面则有权限,所以只需要验证的时候判断是来自证书的用户名并且ssl证书验证成功(废话一句,ssl通过数据才会到达程序处理),则跳过密码验证即可。

twiki的登录管理为:./lib/TWiki/LoginManager, 在此目录下新建一个perl的LoginManager 就可以通过https://twikisite/bin/configure 设置登录使用该LoginManager进行。

这里因为希望实现证书登录和密码登录并存,使用原生的TemplateLogin.pm复制一份进行修改满足需要(cp TemplateLogin.pm X509TemplateLogin.pm & 新文件的权限和属主与原文件相同)。

里面修改的关键代码如下:

---+ package TWiki::LoginManager::X509TemplateLogin package TWiki::LoginManager::X509TemplateLogin; my $origurl $query->param'origurl' );

# 以下为修改部分,判断是否为证书登录,是则用户名取用证书中的用户名:DN_CN

my $loginName "";

if(
$ENV{'SSL_CLIENT_VERIFY'} && $ENV{'SSL_CLIENT_VERIFY'eq 'SUCCESS'){

     
$loginName $ENV{'SSL_CLIENT_S_DN_CN'};

}else{

     
$loginName $query->param'username' );

}
if( $loginName ) {

#以下为修改部分,判断如果是证书登录,则跳过密码验证并且认证结果为成功。

#由于ssl已经确认了证书的合法性,此处不需要重复进行证书合法性验证。

my $validation;

if(
$ENV{'SSL_CLIENT_VERIFY'} && $ENV{'SSL_CLIENT_VERIFY'eq 'SUCCESS'){

         
$validation 1;

}else{

         
$validation $users->checkPassword$loginName$loginPass );

         
$error $users->passwordError();

}

然后去http://twikisite/bin/configure 中修改 security setup中的LoginManager为TWiki::LoginManager::X509TemplateLogin,保存。

使用方式:

使用https://twikisite/ 进行访问,如果本地有合法的客户端证书,则点击登录按钮后直接用证书身份登入wiki.权限设置使用证书中的DN_CN名作为用户名即可。

不足:如果希望使用原有的用户名密码登录。目前只能通过http://twikisite/访问进行。暂时还没有更好的想法。

有不足之处或者对证书和密码并存登录twiki有更好的想法,请诸位多多留言指点。。

python类的两种静态方法申明方式

一种看起来比较优雅:
e.g.
12         @staticmethod

13         def init
(host,databasename):

14             return pg.connect(dbname=''+databasename+'',host=''+host+'''')

即在方法名前加入@staticmethod做修饰即可,不过这种方式仅支持python2.4及以上的版本

在2.3中,则要用一种比较猥琐的写法了
e.g.
13         def init(host,databasename):

14             return pg.connect(dbname=''+databasename+'',host=''+host+'''')

15         init staticmethod(init)

即通过手工的用staticmethod函数对原先的自定义函数进行一个包装来进行。

BT4 硬盘启动initrd.gz更新(bugfix)

去除了启动脚本中无用的41apt_cdrom
这个脚本在/cdrom为非光驱的mount的时候没有进行判断,
在使用光盘启动的时候不会有问题,修改为硬盘镜像启动后,
某些时候会导致系统启动过程陷入死循环的等待中。
偷懒没做修改,直接去除,主要是因为更新是的话也是走网络,没有CDROM中读取源。
修正后解决启动时出现死循环黑屏的问题。
详细使用请参考

修改initrd实现BackTrack 4 Pre 从硬盘ISO文件启动

initrd.gz

阿里巴巴集团漏洞报告邮箱

广而告之:

我们集团设计了一个专门接收漏洞报告的邮箱:

security@service.alibaba.com

如果有任何关于我们集团(阿里巴巴,淘宝,支付宝,雅虎口碑,阿里软件,阿里妈妈)安全方面的漏洞,请通知我们。我们将确认后附赠精美小礼品一份,非常感谢您对我们的帮助和支持。

修改initrd实现BackTrack 4 Pre 从硬盘ISO文件启动

主要实现了BackTrack 4 Pre Release从硬盘ntfs等分区上的ISO启动
(非安装,直接从iso启动)
并且启动后对系统的修改能够被保存下来
(即:可以和安装的linux一样直接修改密码。update等)

支持自定义ISO路径(不需要在根目录下)

仅需要使用的同学请直接看“简单的使用方法”一节

» 阅读全文

centos下使用OPENVPN Client

简单记录下

之前被service openvpn start 给忽悠了,以为是起服务

原来配置完配置文件后这样启动也能做client -_-

» 阅读全文

Navicat Premium Crack

Navicat Premium是Navicat新出的一款整合Navicat MySQL, Navicat Oracle, Navicat PostgreSQL的全能数据库连接工具,通过他可以方便的对MySQL,Oracle,PostgreSQL进行访问和操作。

本着好用节约的原则,以无美感的暴力行为对起进行了节约化改造。(罪过罪过)。

使用方法:完成后复制patch到程序目录执行。安装程序官方有下载

附上官方的软件说明:

Description:

Navicat Premium is a multi-connections Database Administration tool allowing you to connect to MySQL, Oracle and PostgreSQL databases simultaneously within a single application, making database administration to multiple kinds of database so easy.

Navicat Premium combines the functions of other Navicat members. With connections established to different database types, Navicat Premium supports data transfer between MySQL, Oracle and PostgreSQL. It supports most of the features in MySQL, Oracle and PostgreSQL including Stored Procedure, Event, Trigger, Function, View, etc.

Navicat Premium enables you to easily and quickly transfer data across various database systems, or to a plain text file with designated SQL format and encoding.

附件: navicat.premium.version.8.2.4-patch.rar (164.35 K, 下载次数:1198)

Records:20712345678910»