2010年12月25日
#
启动slapd
不论是包安装还是编译安装的OpenLDAP服务,启动LDAP服务通常使用类似这样的方式运行:
/usr/sbin/slapd -h ldap:/// ldapi:/// -g openldap -u openldap -F /etc/ldap/slapd.d/
如果没有任何的配置是否可以启动slapd呢?
$mkdir ldap_slapd.d
$/usr/sbin/slapd -d 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 -d 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 -F /etc/ldap/slapd.d
slaptest要完成2个工作:将按schema生成schema.ldif配置,然后在指定的目录下初始化bdb文件。
2010年2月20日
#
那天用Cron配置了一个MySQL数据库自动备份。几天下来才发现没有运行。瞎搞了半天,没有结果。最后在需要执行的命令下加个 > /tmp/b.log 2>&1。一看错误日志。哦,原来找cron不知道mysqldump在哪儿。恍然大悟。
cron在运行的时候可能PATH变量没有那么多,所以好多命令需要在脚本中加入完整的路径。其实我已经是第2次遇到这个问题了!真是不长记性啊,所以一定要记下!!
还有怎么没有一开始就把日志输出。UNIX管理员不看日志,看什么呢?这两天过年肥肉吃多了说。日志!切记啊!
2009年12月2日
#
OpenSSH网站上那只SSH刺河豚将FTP埋葬
有关sftp有人推荐www.ssh.com的实现,不过我更喜欢开源的产品,特别是Open系列的安全产品。
需求
首先我们明确我们的目标,我们是希望通过SFTP代替FTP,需求是这样的:
- 这些用户只能通过SFT访问服务器
- 用户要锁定在相应的目录下
我想通常的思路是这样的:
- 打开OpenSSH的SFTP
- 将这些用户设置在一个组中
- 让OpenSSH识别这个组,只允许这些用户使用SFTP
- 最后系统要自动的将用户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用户提供一个目录,并设置其用户属性,用户在这个目录下用户是可写的。当然可以创建很多个。
这样算不算解决这个问题呢?暂且如此吧。如果您有好方法,一定告知哦。
2009年8月14日
#
本文记录如何给一台应用中的MySQL服务器部署Replication。
安装环境
现有MySQL
现有MySQL服务器的特点:
- 没有专门为Replication环境配置
- MySQL为编译安装
- MySQL处于运行状态,不可长时间停机
目的
将现有服务器作为Master服务器,配置并运行一台新的MySQL服务器作为Slave服务器
准备
- 服务器硬件
- 现有主服务器的安装代码包(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;
2009年3月20日
#
大辉推荐了一个网站www.wikimatrix.org。去看了看虽然一直用Wiki进行一些文档的协作,但那么多Wiki还是第一次哈。于是想找一个用Python开发的wiki(wikimatrix上面有一个Wizard可以帮助您找到想要的)。除了老牌的plone,著名的MoinMoin,还发现了一个叫
hatta的。安装了一下,真还不错。
hatta的实现就一个python文件,功能简单,没有权限管理,没有用户管理,作者认为Wiki就是要欢迎天南地北的兄弟都可以修改。hatta的使用简单,按照语法编辑,然后提交了事。中文化也非常简单,Wiki内容本身就可以输入中文,如果觉得页面也应该是中文的也很简单,改改po文件即可。我觉得如果您对Wiki的需求如下就可以考虑使用:
- 内部使用。如果部署在外网,好事者乱改一气还是比较麻烦的,特别是放一些不该放的。
- 需要版本控制的文档协作
- 要在文档中嵌入程序代码,代码需要高亮
- 需要在文档中嵌入数学公式。hatta使用latex语法输入公式,生成的公式非常漂亮
2008年11月20日
#
今天维护服务器。一查看/var/log/auth.log,哦!天南地北的朋友都想登录到我们的破服务器。虽然都未成功,但动物凶猛啊。现实残酷,黑客无情,安全第一。还是安装个rootkit检查工具为妙:
#aptitude install chkrootkit rkhunter
#chkrootkit
.....
#rkhunter -c -sk
.....
还好。
2008年5月28日
#
最近一直在试用Jazz。IBM宣传Jazz是下一代的软件交付平台,IBM开发者网站上一大堆的文档,看来IBM对这个软件还是非常重视的。试用体会:
- IBM或者说Rational对软件工程的研究是非常深入的,IBM Rational系列软件可以充分体现IBM对软件过程的理解。Jazz中集成了各种软件开发过程(时下流行的Srcum也在其中)。Jazz充分认识到了敏捷的重要性,所以敏捷的思想贯穿整个软件。
- 虽然IBM提供的比较丰富的文档,学习曲线还是有些陡峭。特别对于没有使用过Rational软件的开发人员。推荐初学者先看看这个文档
- Jazz的版本控制源于CC不是很喜欢,如果可以用SVN代替就好了。
- Jazz的客户端是开源的,但服务端只有90天试用。具体的价格也要6月份才出来。
2008年5月19日
#
还是记录在这吧。
现在在Debian下安装tex很方便了。如果一些宏包没有下载下来可以安装在系统上。步骤:
- 在/usr/share/texmf/tex/latex下建一个目录mkdir xxpackage
- 把宏包解压在这里
- texhash
2008年4月19日
#
又是Python。呵呵。谁叫人家帅呢
Quixote的部署
在Quixote官方白皮书中已经详细描述了Quixote的工作模式。Quixote可以使用Python自代的http_server(主要用于开发调试)和与Apache(或lighttpd)配合使用。
Quixote与Apache配合使用方式如下:
- 使用CGI,文档中称为egular CGI。被认为效率最低的一种方式,因为每一个请求都会创建一个新的进程。
- 使用fastCGI,CGI可以运行fastCGI一定是可以应用的。这也是豆瓣采用的方式。在Quixote作者的一个PPT中,他认为fastCGI是buggy的。哦:(也不至于啊。我们正在寻找使用fastCGI的部署经验。
- 使用mod_python,将python代码嵌入到Apache中。
- 使用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>
配置完成。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可能也是可以的。
- 所有源代码使用utf-8在程序的开始加上# -*- coding: utf-8 -*-
- ptl的html模板加上content="text/html charset=UTF-8"
- 关键:在quixote的安装路径下有__init__.py,将其中的DEFAULT_CHARSET = 'iso-8859-1'改成 'utf-8'
- 也可以不修改__init__.py,使用Publisher的时候把Publisher扩展一下:
1 class UTF8Publisher(Publisher):
2 quixote.DEFAULT_CHARSET = "utf-8"
2008年4月18日
#
很久没有更新了。
敏捷时代似乎已经到了,将更多的时间花在了Python和Ruby上。C++好些地方使不上劲呢:(。
前段时间研究了一下boost.python,还真不错,就是文档太少啊。有时间将其整理一下。
pongba的这个
论坛还真不错。天天在上面泡着。