• svn数据备份,还原检出到其他目录

    hooks目录下的post-commit 是上传钩子脚本
    即你从本地上传文件到svn服务器的时候触发该脚本
    注意post-commit 文件权限为root可执行
    vi  /var/svn/project-name/hooks/post-commit
    #!/bin/sh
    export LANG=zh_CN.UTF-8
    REPOS=”$1″
    REV=”$2″
    svn checkout –username 用户名 –password 密码 svn://127.0.0.1/test /var/www/test
    ##从svn版本库中检出源文件到新的目录  /var/www/test
  • apache端口转发

    在某些时候,可能需要将发到apache某个端口的请求转发到另外一个端口. mod_proxy模块可以方便的完成这个需求.
    ubuntu中配置apache2比较方便.  下面以lucid中apache2为例介绍如何使用 mod_proxy
    1. 首先配置mod_proxy模块
    将/etc/apache2/mods-available中的
    proxy_http.load
    proxy.load
    proxy.conf
    proxy_connect.load
    ln -s 到 /etc/apache2/mods-enabled
    注意需要适当的修改 proxy.conf
    2. 在 /etc/apache2/sites-enabled中建立一个文件(或一个连接 ln -s 到一个文件)
    <VirtualHost *:80>
    ProxyPreserveHost On
    ServerName www.example.com
    ProxyPass / http://www.example.com:8000/
    ProxyPassReverse / http://www.example.com:8000/
    ServerAdmin webmaster@localhost
    </VirtualHost>
    这样, 所有http://www.example.com 请求实际上都是到了其 8000端口. 80端口实际上成了 8000端口的一个代理
    当然 mod_proxy能够完成的任务不止这些. 例如, 它可以将请求转发到别的服务器上(配置合适的话).
    使用该模块应该注意 proxy.conf的配置.
  • debian操作系统安装记录

    1.安装sudo  编辑/etc/sudoers
    2.安装配置apt源
    vim /etc/apt/source.list
    然后进行更新源
    apt-get -s upgrade
    apt-get update
    3.安装ssh(openssh-server)
    4.安装rcconf(服务管理器)管理需要启动的服务
  • scp命令:两台服务器文件传输,进阶-设置两台服务器不需要密码直接复制

    scp 命令是 SSH 中最方便有用的命令了,试想,在两台服务器之间直接传送文件,仅仅用 scp 一个命令就完全解决了。 你可以在一台服务器上 以 root 身份运行 #scp servername:/home/ftp/pub/file1 . 这样就把另一台服务器上的文件 /home/ftp/pub/file1 直接传到本机器的当前目录下,当然你也可以用 #scp /tmp/file2 servername:/boot 把本机上的文件 /tmp/file2 送到另一台机器的 /boot 目录下。而且整个传送过程仍然是用 SSH 加密的。
    scp 就是 secure copy, 是用来进行远程文件拷贝的 . 数据传输使用 ssh1, 并且和 ssh1 使用相同的认证方式 , 提供相同的安全保证 . 与 rcp 不同的是 ,scp 会要求你输入密码如果需要的话 .
    案例:
    copy 本地的档案到远程的机器上
    scp /etc/lilo.conf my@www.upsdn.net:/home/my

    scp 命令是 SSH 中最方便有用的命令了,试想,在两台服务器之间直接传送文件,仅仅用 scp 一个命令就完全解决了。 你可以在一台服务器上 以 root 身份运行 #scp servername:/home/ftp/pub/file1 . 这样就把另一台服务器上的文件 /home/ftp/pub/file1 直接传到本机器的当前目录下,当然你也可以用 #scp /tmp/file2 servername:/boot 把本机上的文件 /tmp/file2 送到另一台机器的 /boot 目录下。而且整个传送过程仍然是用 SSH 加密的。
    scp 就是 secure copy, 是用来进行远程文件拷贝的 . 数据传输使用 ssh1, 并且和 ssh1 使用相同的认证方式 , 提供相同的安全保证 . 与 rcp 不同的是 ,scp 会要求你输入密码如果需要的话 .
    案例:
    copy 本地的档案到远程的机器上

    scp /etc/lilo.conf my@www.upsdn.net:/home/my/123.conf

    copy远程机器上的档案到本地来

    scp my@www.upsdn.net:/etc/lilo.conf /etc

    进阶—————-

    最近在编写定时自动执行的shell脚步中遇到一个问题。在该脚步中,需要使用scp命令将本地的文件复制到另一台机器中备份。但通常执行scp命令后都需要输入用户密码,这样在定时自动执行的shell脚步中就不适用了。

    本人的第一直觉就是建立无密码用户,在scp命令中使用该用户就不需要输入用户密码了。

    以下是在机器Client的root和机器Server的root之间建立安全信任关系的步骤:

    1. 在机器Client上root用户执行ssh-keygen命令,生成建立安全信任关系的证书。

    [root@Client root]# ssh-keygen -b 1024 -t rsa

    Generating public/private rsa key pair.

    Enter file in which to save the key (/root/.ssh/id_rsa):

    Enter passphrase (empty for no passphrase):            <– 直接输入回车

    Enter same passphrase again:                           <– 直接输入回车

    Your identification has been saved in /root/.ssh/id_rsa.

    Your public key has been saved in /root/.ssh/id_rsa.pub.

    The key fingerprint is:

    49:9c:8a:8f:bc:19:5e:8c:c0:10:d3:15:60:a3:32:1c root@Client

    [root@Client root]#

    注意:在程序提示输入passphrase时直接输入回车,表示无证书密码。

    上述命令将生成私钥证书id_rsa和公钥证书id_rsa.pub,存放在用户家目录的.ssh子目录中。

    2. 将公钥证书id_rsa.pub复制到机器Server的root家目录的.ssh子目录中,同时将文件名更换为authorized_keys。

    [root@Client root]# scp -p .ssh/id_rsa.pub root@192.168.3.206:/root/.ssh/authorized_keys

    root@192.168.3.206’s password:          <– 输入机器Server的root用户密码

    id_rsa.pub           100% |**************************|   218       00:00

    [root@Client root]#

    在执行上述命令时,两台机器的root用户之间还未建立安全信任关系,所以还需要输入机器Server的root用户密码。

    经过以上2步,就在机器Client的root和机器Server的root之间建立安全信任关系。

  • crontab应用

    wiki备份
    #! /bin/sh
    rm /var/www/dokuwiki_bak.tar.gz
    tar -cvzf /var/www/dokuwiki_bak.tar.gz /var/www/dokuwiki
    rq=`date +%Y%m%d`
    scp /var/www/dokuwiki_bak.tar.gz root@211.157.136.46:/var/wiki_copy/dokuwiki$rq.tar.gz
    延深:系统环境 debian5.0
    方法1:
    在linux平台上如果需要实现任务调度功能可以编写cron脚本来实现。
    以某一频率执行任务
    linux缺省会启动crond进程,crond进程不需要用户启动、关闭。
    crond进程负责读取调度任务并执行,用户只需要将相应的调度脚本写入cron的调度配置文件中。
    cron的调度文件有以下几个:均在/etc/目录下
    crontab
    cron.d
    cron.daily
    cron.hourly
    cron.monthly
    cron.weekly
    如果用的任务不是以hourly monthly weekly方式执行,则可以将相应的crontab写入到crontab 或cron.d目录中。
    示例内容为
    分钟 小时 天 月 星期 用户 命令
    */2 * * * * root  /opt/bin/test-cron.sh #每两分钟就执行……..
    0 6,12,18   *   *   *    root      ……………      #每天6点、12点、18点执行……..
    启动cron进程的方法:/etc/init.d/crond start
    方法二:
    把cron加入到启动脚本中:
    # rc-update add vixie-cron default
    crontab -l #查看你的任务
    crontab -e#编辑你的任务(debian系统crontab默认编辑器不是vi,需要修改环境变量EDITOR,(命令:export EDITOR=vim)
    crontab -r#删除用户的crontab的内容
    收获:可以把经常要做的一些事放到其中,简化工作量,如每周一检查服务器的运行状态,查看报告,杀掉一些进程等等……
  • debian专题

    LAMP安装  http://www.silentstreet.net/archives/2218.html

    debian开发环境安装 http://blogold.chinaunix.net/u/20581/showart_1098627.html

  • Cyrus SASL Libary

    (1) 什么是SASL和Cyrus SASL

    SASL (Simple Authentication Security Layer) is an Internet standards-track method for remote computers to authenticate. The Cyrus SASL library makes supporting various SASL mechanisms easy for both client and server writers.

    The Cyrus project is the implementation of an enterprise mail system by the Carnegie Mellon University Computing Services Department. We are interested in scalable, easy to administer systems.

    (2) Cyrus SASL组成部分

    SASL是一个胶合(glue)库,通过这个库把应用层  形式多样的认证系统整合在一起。这有点类似于 PAM,但是后者是认证方式,决定什么人可以访问什么服务而SASL是认证过程,侧重于信任建立过程,这个过程可以调用PAM来建立信任关系。

    应用层

    应用层是SASL库的使用者既可以是客户应用程序,也可以是服务应用程序,或者两者都是(在代理的情况下)。应用层负责SASL认证协商的连线和传达,具体的认证交给SASL库应用层的例子有Cyrus IMAPd,OpenLDAP,Sendmail,Mutt,sieveshell,cyradm等

    SASL胶合层(Glue Layer)

    负责如下的工作:
    加载插件;
    从应用层获取必要的认证属性,以选择适当的认证机制(或者限制可用的认证机制);
    给应用层列出可用的插件;
    为特定的认证请求选择最好的认证机制;
    在应用层和被选的认证机制间路由认证数据;
    为应用层提供SASL协商信息,比如认证的用户,请求的认证ID,安全层的强度等。

    SASL还提供一些别的服务给应用层和插件,一些是常用的工具,比如MIME Base64编码解码,随机数生成;还有一些是和认证相关的,比如口令验证服务。

    最后,SASL还允许应用层和认证机制层访问两种特殊类型的插件:Auxiliary Property或者 auxprop插件,它提供了简单的数据库接口,可返回用户属性,比如口令,home目录,邮件地址等;Username Canoicalization,提供了一个站点相关的用户正名服务(使用户名称规范化),或者其他的任务.

    SASL认证机制(SASL Mechanisms)

    有三种类型的机制:
    Password Verification Mechanisms – 接收远程的口令,传递给SASL胶合层,由口令验证器验证,这种机制的例子有PLAIN
    Shared Secret Mechanisms – 不是直接传递口令明文,而是服务方发起一个认证,客户证明自己知道这个口令,这需要服务方和客户方都保存有口令.这种机制的例子有CRAM-MD5,DIGEST-MD5以及SRP
    Kerberos Mechanisms – 使用信任的第三方来验证客户。

    Auxiliary Property(auxprop)

    为胶合层提供数据库服务,Cyrus SASL支持两种auxprop插件:SASLdb和SQL。auxprop通常用于共享密码机制。

    Username Canonicalization

    不是很常用,一般用于为应用层提供用户的规范名称。

    口令验证服务

    根据用户名和口令的明文,判断是否验证正确。口令验证服务器通过SASL选项pwcheck_method来选择,有两类主要的口令验证器:
    auxprop – 使用auxprop插件获取口令,比较和用户提供的口令是否相符;
    saslauthd – 呼叫saslauthd服务进程,验证用户。saslauthd支持很多识别方式,比如PAM,LDAP,Kerberos数据库等

    (3) SASL 术语

    认证ID(Authentication identifier)和授权ID(Authorization identifier)

    userid(user id, authorization id) – 用户ID,授权ID,说明执行操作的授权个体。
    authid(authentication id) – 认证ID,证明某人确系某人。

    比如小王休假,小李暂时接替他的工作。那么为了有小王的权限,小李认证时使用自己的帐号,即authid,执行具体的操作时需要有小王的user id,这样才能做他的工作。

    一般userid和authid是相同的。

    Realms

    A realm is an abstract set of users and certain mechanisms authenticate users in a certain realm.

    最简单的情况是单服务单机器的情况,realm就是FQDN(Full-qualified domain name),如果应用层没有提供,则很多SASL机制采用默认的。

    如果要多机共享口令,则通常选择域名,比如CMU.EDU。单个站点也可以支持多个不同的realms。为了把不同realm的用户加入sasldb,可以在saslpasswd2命令中用u选项,SQL插件通过宏’%r’在查询串中加入realm。

    (4) SASL工作流程

    PLAIN机制,sasl_checkpass(),以及明文口令

    auxprop – 根据auxiliary property插件提供的userPassword属性验证用户,数据库通常保存在/etc/sasldb2;
    saslauthd通过saslauthd验证用户,-a选项指示saslauthd的具体机制,-n指示saslauthd的线程数;
    Courier-IMAP – 通过Courier-IMAP的authdaemond检查口令,类似于saslauthd;
    pwcheck – 使用独立辅助服务进程来验证
    write your own – 自己写一个验证方式。

    共享密码机制

    CRAM-MD5和DIGEST-MD5使用这种机制,注意,这些方式不能使用saslauthd。如果不想用这些方式,可从插件目录移走这些插件,或者用mech_list禁用它们。

    为了简单起见,SASL库把口令的明文形式保存在/etc/sasldb2中。

    Kerberos mechanisms

    The Cyrus SASL library also comes with two mechanisms that make use of Kerberos: KERBEROS_V4, which should be able to use any Kerberos v4 implementation, and GSSAPI (tested against MIT Kerberos 5, Heimdal Kerberos 5 and CyberSafe Kerberos 5). These mechanisms make use of the kerberos infrastructure and thus have no password database.
    Applications that wish to use a kerberos mechanism will need access to a service key, stored either in a “srvtab” file (Kerberos 4) or a “keytab” file (Kerberos 5). Currently, the keytab file location is not configurable and defaults to the system default (probably /etc/krb5.keytab).

    The Kerberos 4 srvtab file location is configurable; by default it is /etc/srvtab, but this is modifiable by the “srvtab” option. Different SASL applications can use different srvtab files.

    A SASL application must be able to read its srvtab or keytab file.

    OTP机制和基于OPIE的OTP

    The Cyrus SASL library also supports the One-Time-Password (OTP) mechanism. This mechanism is similar to CRAM-MD5 and DIGEST-MD5 in that is uses a shared secret and a challenge/response exchange. However, OTP is more secure than the other shared secret mechanisms in that the secret is used to generate a sequence of one-time (single use) passwords which prevents reply attacks, and that secret need not be stored on the system. These one-time passwords are stored in the /etc/sasldb2 database. See the Shared secrets mechanisms section for a discussion of the /etc/sasldb2 database.

    For sites with an existing OTP infrastructure using OPIE, Cyrus SASL can be configured to use OPIE v2.4 instead of using its own database and server-side routines. OPIE should be configured with the –disable-user-locking option if the SASL server application will not be running as “root”.
    OPIE uses its own “opiekeys” database for storing the data necessary for generating the server challenges. The location of the opiekeys file is configurable in SASL; by default it is /etc/opiekeys, but this is modifiable by the “opiekeys” option.

    A SASL server application must be able to read and write the opiekeys file.

    (5) 如何配置选项

    缺省配置文件保存在/usr/lib/sasl2/App.conf里,这里App.conf为应用层名字,比如Sendmail为/usr/lib/sasl2/Sendmail.conf

    标准的Cyrus SASL配置文件类似于:

    srvtab: /var/app/srvtag
    pwcheck_method: saslauthd

    应用层可重新定义SASL库的选项,这因应用层而异,比如Cyrus imapd保存配置文件为/etc/imapd.conf。

    (6) Cyrus SASL 测试

    Cyrus SASL库带了两个测试程序:sasl2-sample-server和sasl2-samle-client,分别对应着服务程序和客户程序,可对SASL的配置进行测试。两个程序都带了三个参数:

    -p TCP监听或者连接的端口号,缺省为12345
    -s 服务名称,缺省为rcmd
    -m 认证的机制

    此外sasl2-sample-client还要求有一个服务程序主机名称或者IP地址的参数。

    首先我们给测试服务程序提供一个配置文件,sample.conf,保存在/usr/lib/sasl2目录下,内容如下:

    pwcheck_method: auxprop
    auxprop_plugin: sasldb
    mech_list: plain login ntlm cram-md5 digest-md5

    然后我们给sasl2db(在/etc/sasldb2)添加测试帐号,比如marchday:

    [root@research sasl2]# saslpasswd2 -c marchday
    Password: 
    Again (for verification):

    然后我们启动服务程序:

    $ sasl2-sample-server -p 9000

    打开另一个终端窗口,进行测试:

    $ sasl2-sample-client -p 9000 -m PLAIN localhost

    如果没别的问题,应该可以看到successful authentication。^_^

    你还可以测试别的Mechanisms,这里就不再举例了。

    参考资料:
    http://www.sendmail.org/~ca/email/cyrus/sysadmin.html

    http://asg.web.cmu.edu/sasl/
    Cyrus SASL Library Documatation

    以Sendmail为例:

    应用程序——>SASL 为客户服务的配置/usr/lib/sasl2/Sendmail.conf
           pwcheck_method:pam
           pam—->/etc/pam.d/smtp.sendmail
                         —->

                          #%PAM-1.0
               auth       required     pam_stack.so service=system-auth
               account    required     pam_stack.so service=system-auth
     为APP提供选择具体的认证方法的机会,认证中介、认证代理….