无法递归的五点半

for_each(day.begin(),day.end(),bind2nd(Add(),me))

导航

<2018年8月>
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

统计

常用链接

留言簿(4)

随笔分类

随笔档案

文章分类

相册

收藏夹

C++

Unix/Linux

个人主页

其他

软件工程

网络管理

综合

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜

2010年12月25日 #

OpenLDAP启动与配置

启动slapd

不论是包安装还是编译安装的OpenLDAP服务,启动LDAP服务通常使用类似这样的方式运行:
 /usr/sbin/slapd -h ldap:/// ldapi:/// -g openldap -u openldap -/etc/ldap/slapd.d/



 如果没有任何的配置是否可以启动slapd呢?

$mkdir ldap_slapd.d
$
/usr/sbin/slapd -65535 -h ldap://localhost:3890 -F ldap_slapd.d

系统提示没有配置目录中没有 cn=config.ldif 文件

 最简单的配置

现在在配置目录中写一个最简单的配置:
$cat ldap_slapd.d/cn=config.ldif
dn
: cn=config
objectClass
: olcGlobal
cn
: config
$
/usr/sbin/slapd -65535 -h ldap://localhost:3890 -F ldap_slapd.d

 成功启动!在ldap_slapd.d下生成了cn=config 目录并且将基本的schema自动的导入了,从运行日志中也可以看到这些。
  通过这个例子可以看到slapd运行的过程,但这样一个没有实际Backend数据库的slapd实例是没有实际意义的。

 配置

slapd的配置就是运行的关键,在新版OpenLDAP中,LDAP配置不再是slapd.conf,而是一系列的配置文件,放置在一个配置目录下。LDAP将这个目录看成一种Backend,也就是config backend。配置目录中是若干的ldif文件,然后通过子目录的方式表现树形结构,以文件名表示配置节点的名称。

 slapd.d 目录

LDAP的配置Backend包含3个内容:Schema、Backend、Database,都以ldif方式直接写在配置文件中。backend和database配置相对较小可直接编辑,而schema比较复杂,如有外部定义的schema更是麻烦,如果直接编辑很麻烦也容易出错。好在可以使用slaptest将旧式的.conf文件生成新配置。
实际上,slaptest的功能还不止这个,它还负责创建基本的数据库文件。最新版的OpenLDAP在安装后还是使用slapd.conf作为配置文件,然后在运行前创建配置Backend。

 slapd.conf 

slapd.conf由2个部分,先include schema文件,然后配置database。要注意后面database内容的语法是依赖core.schema的,所以没有 include core.schema,后面的内容是不符合语法的。
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema
include /user/defined/special.schema


database        bdb
suffix          
"dc=example,dc=com"
rootdn          
"cn=admin,dc=example,dc=com"
rootpw          secret
directory       /ldap/data/dir
index   objectClass     eq

 slaptest

运行:
$sudo /usr/bin/slaptest -f schema.conf -/etc/ldap/slapd.d

slaptest要完成2个工作:将按schema生成schema.ldif配置,然后在指定的目录下初始化bdb文件。

posted @ 2010-12-25 17:07 五点半 阅读(1567) | 评论 (0)编辑 收藏

2010年2月20日 #

cron配置

那天用Cron配置了一个MySQL数据库自动备份。几天下来才发现没有运行。瞎搞了半天,没有结果。最后在需要执行的命令下加个 > /tmp/b.log 2>&1。一看错误日志。哦,原来找cron不知道mysqldump在哪儿。恍然大悟。
cron在运行的时候可能PATH变量没有那么多,所以好多命令需要在脚本中加入完整的路径。其实我已经是第2次遇到这个问题了!真是不长记性啊,所以一定要记下!!
还有怎么没有一开始就把日志输出。UNIX管理员不看日志,看什么呢?这两天过年肥肉吃多了说。日志!切记啊!

posted @ 2010-02-20 15:30 五点半 阅读(252) | 评论 (0)编辑 收藏

2009年12月2日 #

OpenSSH下SFTP的配置

OpenSSH网站上那只SSH刺河豚将FTP埋葬

有关sftp有人推荐www.ssh.com的实现,不过我更喜欢开源的产品,特别是Open系列的安全产品。

需求

首先我们明确我们的目标,我们是希望通过SFTP代替FTP,需求是这样的:
  1. 这些用户只能通过SFT访问服务器
  2. 用户要锁定在相应的目录下
我想通常的思路是这样的:
  1. 打开OpenSSH的SFTP
  2. 将这些用户设置在一个
  3. 让OpenSSH识别这个组,只允许这些用户使用SFTP
  4. 最后系统要自动的将用户chroot在用户目录下

配置

我开始都觉得是不是要求太高,不过OpenSSH可以解决以上所有问题。话说回来,如果不能解决怎么可以把FTP埋葬呢。

SSHD_CONFIG

sshd通常是打开了sftp的,不过我们应该使用internal-sftp在sshd_conf中作如下配置:
 1 # Subsystem sftp /usr/lib/openssh/sftp-server # 注释掉
 2 Subsystem sftp internal-sftp
 3 
 4 ##
 5 Match group sftponly
 6     ChrootDirectory /sftphome/%u
 7     X11Forwarding no
 8     AllowTcpForwarding no
 9     ForceCommand internal-sftp
10 
解释一下:当sshd匹配到sftponly组中的用户,就会强制使用sftp(ForceCommand的作用),并将用户限定在/sftphome/下相应用户的目录下(ChrootDirectory的作用)。

创建用户

我们需要创建相应的用户了:

#useradd -G sftponly -d /sftphome/sftpuser  -s /usr/sbin/nologin sftpuser
#tail /etc/password

sftpuser:x:
1000:1000::/sftphome/sftpuser:/usr/sbin/nologin
#passwd sftpuser
你可以在其他机器上用sftp登录试试了。你的连接将会被reset!去看看sshd的日志,你会发现pam.d的认证是通过了的,但是chroot失败了。按网络上的说法
#chown root /sftphome/sftpuser
#chmod 
755 /sftphome/sftpuser
再试,可以登录。新的问题是不能在此目录下写入。对的嘛,755对于组用户是不能写啊。再试试775,刚才的问题就来又了,chroot失败。

以上内容网络上一google一大把。

可以登录不能写这个问题真让人困惑!后来我想可能应该这样理解:既然要chroot,那个目录不属于root肯定是不行的(说错了,猛拍砖)。那我们就不能为用户提供完整的sftp服务了吗?我想可以这样
#mkdir /sftphome/sftpuser/space
#chown sftpuser.sftpuser /sftphome/sftpuser/space
由系统管理员为sftp用户提供一个目录,并设置其用户属性,用户在这个目录下用户是可写的。当然可以创建很多个。

这样算不算解决这个问题呢?暂且如此吧。如果您有好方法,一定告知哦。


posted @ 2009-12-02 21:04 五点半 阅读(4042) | 评论 (3)编辑 收藏

2009年8月14日 #

应用中的MySQL服务器部署Replication

本文记录如何给一台应用中的MySQL服务器部署Replication。

安装环境

现有MySQL
现有MySQL服务器的特点:
  1. 没有专门为Replication环境配置
  2. MySQL为编译安装
  3. MySQL处于运行状态,不可长时间停机
目的

将现有服务器作为Master服务器,配置并运行一台新的MySQL服务器作为Slave服务器

准备
  1. 服务器硬件
  2. 现有主服务器的安装代码包(mysql-5.x.xxx.tar.gz)

主服务器的配置和数据准备

Master服务器的必须配置
要使用Replication必须将Master的binlog打开,并设置服务器ID。最简单的配置如下:
log-bin     =  mysql-bin
server-id = 1
当然关于MySQL Bin Log的配置还有很多设置,可以参考相关手册
数据备份
现在需要将Master的数据备份出来要注意的是要记住 备份点的binlog日志和postion 。Master数据备份的方式可以是停机冷备份,如果安装了LVM可以使用LVM的Snapshot。下面使用mysqldump 导出数据。在导出数据之前我们应该Flush表,并锁住表,比允许数据写入。
mysql> FLUASH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000157 | 18757860 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
使用mysqldump导出数据
mysql:~# mysqldump -uroot -p --all-databases > dump.sql
解锁
mysql> UNLOCK TABLES;
安装参数的提取
需要在Slave主机编译安装MySQL要了解Master安装时的编译参数,可以通过如下方式获得:
mysql:~# cat /usr/local/mysql/bin/mysqlbug | grep CONFIGURE
repl用户创建
在Master服务器中创建repl用户,用于在Slave 数据库中访问Master数据
mysql> GREANT REPLICATION SLAVE ON *.* to 'repl'@'IP.SLAVE.SERVER' identified by 'repl_passwd';

Slave服务器的安装

MySQL的安装
  • 按前面提取的configure参数对源代码进行编译(./configure; make; make install;)
  • 安装初始化数据库:
#mysql_install_db --datadir=/data --user=mysql
  • 参照@{mysql-src}/support-files/目录中my.cnf文件在/etc/下创建@my.cnf
  • 参照@{mysql-src}/support-files/mysql.server@文件在@/etc/init.d/下配置@mysqldb
  • 可尝试启动mysql。 /etc/init.d/mysqldb start
数据的导入
mysql# mysql -uroot -p < dump.sql

如果导入出现超出最大数据包错误可以尝试修改my.cnf中的max_allow_packet

在my.cnf中配置slave
在my.cnf中配置:
server-id       =  2
master-host = master_ip
master-user = repl
master-password = repl_passwd
在Slave服务器上启动Slave
mysql> STOP SLAVE;
mysql> CHANGE MASTER TO
MASTER_HOST='masterip',
 MASTER_USER='repl',
 MASTER_PASSWORD='repl_passwd',
 MASTER_LOG_FILE='mysql-bin.000157',
MASTER_LOG_POS=18757860 ;
mysql> START SLAVE;

posted @ 2009-08-14 22:39 五点半 阅读(209) | 评论 (0)编辑 收藏

2009年3月20日 #

Hatta Wiki试用

大辉推荐了一个网站www.wikimatrix.org。去看了看虽然一直用Wiki进行一些文档的协作,但那么多Wiki还是第一次哈。于是想找一个用Python开发的wiki(wikimatrix上面有一个Wizard可以帮助您找到想要的)。除了老牌的plone,著名的MoinMoin,还发现了一个叫hatta的。安装了一下,真还不错。
hatta的实现就一个python文件,功能简单,没有权限管理,没有用户管理,作者认为Wiki就是要欢迎天南地北的兄弟都可以修改。hatta的使用简单,按照语法编辑,然后提交了事。中文化也非常简单,Wiki内容本身就可以输入中文,如果觉得页面也应该是中文的也很简单,改改po文件即可。我觉得如果您对Wiki的需求如下就可以考虑使用:
  1. 内部使用。如果部署在外网,好事者乱改一气还是比较麻烦的,特别是放一些不该放的。
  2. 需要版本控制的文档协作
  3. 要在文档中嵌入程序代码,代码需要高亮
  4. 需要在文档中嵌入数学公式。hatta使用latex语法输入公式,生成的公式非常漂亮




posted @ 2009-03-20 16:55 五点半 阅读(289) | 评论 (0)编辑 收藏

2008年11月20日 #

Debian rootkit检查

今天维护服务器。一查看/var/log/auth.log,哦!天南地北的朋友都想登录到我们的破服务器。虽然都未成功,但动物凶猛啊。现实残酷,黑客无情,安全第一。还是安装个rootkit检查工具为妙:
#aptitude install chkrootkit rkhunter
#chkrootkit
.....
#rkhunter -c -sk
.....
还好。

posted @ 2008-11-20 20:25 五点半 阅读(223) | 评论 (0)编辑 收藏

2008年5月28日 #

Jazz 试用

最近一直在试用Jazz。IBM宣传Jazz是下一代的软件交付平台,IBM开发者网站上一大堆的文档,看来IBM对这个软件还是非常重视的。试用体会:
  1. IBM或者说Rational对软件工程的研究是非常深入的,IBM Rational系列软件可以充分体现IBM对软件过程的理解。Jazz中集成了各种软件开发过程(时下流行的Srcum也在其中)。Jazz充分认识到了敏捷的重要性,所以敏捷的思想贯穿整个软件。
  2. 虽然IBM提供的比较丰富的文档,学习曲线还是有些陡峭。特别对于没有使用过Rational软件的开发人员。推荐初学者先看看这个文档
  3. Jazz的版本控制源于CC不是很喜欢,如果可以用SVN代替就好了。
  4. Jazz的客户端是开源的,但服务端只有90天试用。具体的价格也要6月份才出来。

posted @ 2008-05-28 11:37 五点半 阅读(306) | 评论 (0)编辑 收藏

2008年5月19日 #

在tex缺省安装上添加新的.cls .sty文件

还是记录在这吧。
现在在Debian下安装tex很方便了。如果一些宏包没有下载下来可以安装在系统上。步骤:
  1. 在/usr/share/texmf/tex/latex下建一个目录mkdir xxpackage
  2. 把宏包解压在这里
  3. texhash

posted @ 2008-05-19 17:03 五点半 阅读(852) | 评论 (0)编辑 收藏

2008年4月19日 #

Quixote笔记

又是Python。呵呵。谁叫人家帅呢

Quixote的部署

    在Quixote官方白皮书中已经详细描述了Quixote的工作模式。Quixote可以使用Python自代的http_server(主要用于开发调试)和与Apache(或lighttpd)配合使用。
    Quixote与Apache配合使用方式如下:
  1. 使用CGI,文档中称为egular CGI。被认为效率最低的一种方式,因为每一个请求都会创建一个新的进程。
  2. 使用fastCGI,CGI可以运行fastCGI一定是可以应用的。这也是豆瓣采用的方式。在Quixote作者的一个PPT中,他认为fastCGI是buggy的。哦:(也不至于啊。我们正在寻找使用fastCGI的部署经验。
  3. 使用mod_python,将python代码嵌入到Apache中。
  4. 使用SCGI,这是作者推荐的。使用Apache SCGI module scgi_mod将遵循SCGI协议Apache将请求发送到相应的Socket如localhost:3001。而这个Socket由本地运行的一个 Python程序打开。这个Python程序将处理请求,并返回结果。

SCGI的配置

    Quixote的网站上对SCGI的描述:SCGI协议是CGI协议的替代。它是一种应用程序与HTTP服务接口标准。它有些像FastCGI但他的设计更容易实现。

    配置SCGI过程如下:
  • 安装各个模块不在话下,debian让程序员有了懒惰的美德:
      #aptitude install libapache2-mod-scgi python-scgi python-quixote

  • Apache的配置,添加配置到apache.conf。(有些教程中加入了SetHandler scgi-handler ,但这个加上就很本不会和3000通信。可能是版本的问题。最好不用。)
      <Location "/qx">
           SCGIServer localost:3000
           SCGIHandler On
      </Location> 

  • 重启Apache
    配置完成。SCGI的好处在于,修改了Python程序,不用重启Apache,只要重启SCGI就可以了。

第一个Quixote程序

    一切就绪,我们来一次Quixote的完整之旅。

  • scgi程序要求有一个服务打开3000端口。启动scgi的程序如下:
 1 
 2 #!/usr/bin/python
 3 # -*- coding: utf-8 -*-
 4 
 5 from scgi.quixote_handler import QuixoteHandler, main
 6 from quixote import enable_ptl
 7 from quixote.publish import Publisher
 8 enable_ptl() #启动PTL
 9 
10 def create_publisher():
11     from ourroot import RootDirectory
12     return Publisher(RootDirectory(), display_exceptions='plain')
13 
14 if __name__ == '__main__':
15     from quixote.server import scgi_server
16     scgi_server.run(create_publisher, port=3000, script_name="/qx")
17 

  • 程序结构是比较简单的,使用的是scgi_server的run方法。要注意的是run方法中的script_name和前面apache 的配置Location是一样的。程序的关键是导入了ourroot这样一个ptl 。下面是我们的第一个ptl程序。
 1 
 2 # -*- coding: utf-8 -*-
 3 """这个是我们第一个例子的根目录
 4 """
 5 from quixote.directory import Directory
 6 
 7 class RootDirectory(Directory):
 8     _q_exports = [""]
 9     def _q_index [html] (self):
10         print "debug message from the index page"
11         """
12         <html>
13         <head>
14         <meta http-equiv="Content-Type" content="text/html charset=UTF-8" />
15         <title>第一个例子</title>
16         </head>
17         <body>
18         <h1>第一个例子有中文!</h1>
19         </body>
20         </html>
21         """
22 

  • 现在在浏览器中输入http://localhost/qx就可以看到结果了。
  • 除了运行上面的python脚本,也可以采用这样的方式运行scgi:
  • python /var/lib/python-support/python2.5/quixote/server/scgi_server.py \
        --factory
    =FirstApp.create_publisher \
        --script-name
    =/qx  --port=3000


Quixote 中文化的要点

    Quixote的中文设置好像很麻烦。其实随着python、Quixote版本的推进,现在这个问题已经很简单了。字符集使用的是utf-8。使用gb2312可能也是可以的。

  1. 所有源代码使用utf-8在程序的开始加上# -*- coding: utf-8 -*-
  2. ptl的html模板加上content="text/html charset=UTF-8"
  3. 关键:在quixote的安装路径下有__init__.py,将其中的DEFAULT_CHARSET = 'iso-8859-1'改成 'utf-8'
  4. 也可以不修改__init__.py,使用Publisher的时候把Publisher扩展一下:
1 class UTF8Publisher(Publisher):
2     quixote.DEFAULT_CHARSET = "utf-8"

posted @ 2008-04-19 15:11 五点半 阅读(5958) | 评论 (15)编辑 收藏

2008年4月18日 #

久违了

很久没有更新了。
敏捷时代似乎已经到了,将更多的时间花在了Python和Ruby上。C++好些地方使不上劲呢:(。
前段时间研究了一下boost.python,还真不错,就是文档太少啊。有时间将其整理一下。
pongba的这个论坛还真不错。天天在上面泡着。


posted @ 2008-04-18 11:33 五点半 阅读(181) | 评论 (0)编辑 收藏

仅列出标题  下一页