LJAMP: August 2008 Archives

之前用php做过一个服务器密码生成器,每次生成之后会打印出来一个网页,  内容就是office2003支持的xml格式的Excel, 另存为就可以变成一个现成的xls, 当初花了一个晚上的时间去扣那个office2003 xml的定义...
然后被烂人1号(baileifirst)鄙视了,他习惯Google一个密码生成器然后自己写xls, 恩。

我这个服务器密码生成器的主要问题是每次要另存为比较的麻烦,  查了下手册,在PDF章节找到了点东西,用header来指定MIME输出。
恩,具体的比较简单。。。
<?php
$content = 'blablabla~';
$length = strlen($content);
header("Content-type: application/vnd.ms-excel");
header("Content-Length: $length");
header("Content-Disposition: attachment; filename=password.xls");
print $content;
?>
然后就可以直接点击打开和保存了~囧
content.png
header这几个Content相关都是HTTP/1.1中定义的,Content-type应该是MIME来定义的,懒得看英文RFC的可以到这里来看看中文说明, Content-Length就不用说了,Content-Disposition这个玩意不是标准HTTP/1.1定义,有的浏览器不支持

PS:关于Content-Disposition
这是Java相关的一篇文章
这是DotNet相关的一篇文章

在/etc/profile下添加
PATH=$PATH:$HOME/bin
JAVA_HOME=/usr/local/suchasplus/jdk
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=/usr/local/suchasplus/jdk/lib/tools.jar
JAVA_OPTS="-server -Xms1024m -Xmx1024m -XX:PermSize=256M -XX:MaxNewSize=512m -XX:MaxPermSize=512m "
export PATH
export JAVA_HOME
export CLASSPATH
export JAVA_OPTS

在Tomcat的conf/server.xml中
<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="125" minSpareThreads="25" maxSpareThreads="75"
 enableLookups="false" redirectPort="8443" acceptCount="100"
 connectionTimeout="20000" disableUploadTimeout="true" />

修改默认的maxThreads为较大数值即可
在使用RRDTool的Python Lib库的时候, 每次都要import rrdtool-python-lib的绝对路径

import sys
sys.path.append('/usr/local/rrdtool-1.2.27/lib64/python2.4/site-packages/')
import rrdtool
import tempfile

rrdpython文档中说只要运行site-python-install这个命令就可以不用append那么长了囧, 作为一个python初心者我只能updatedb然后locate site-python-install. 然后CentOS告诉我没有...
G, 在rrdtool 1.3.1的Makefile中发现了这么一段.
site-perl-inst: site-perl-install
site-perl-install: all bindings/perl-piped/Makefile bindings/perl-shared/Makefile
cd bindings/perl-piped && $(MAKE) install
cd bindings/perl-shared && $(MAKE) install
site-tcl-install: all
cd bindings/tcl && $(MAKE) tcl-install
site-python-install: all
cd bindings/python && $(PYTHON) setup.py install


OK, 在安装完之后,进入/PATH/TO/RRDTOOL-VERSION-SRC/bindings/python目录
执行
python2.4  setup.py  install

即可, perl和tcl以此类推即可, 这才是真正的site-python-install, 恩


另: CentOS5.1 下which出来的python是2.5.2版本的, whereis才能把所有版本的python都列出来

部署环境: CentOS 5.1 x64  MySQL3.23.58 + GCC
这里下载pam_mysql的源代码包
下载之后

#>tar zxf pam_mysql-version.tar.gz
#>cd pam_mysql-version
#>./configure --with-mysql=/path/to/mysql --with-openssl=/usr
#>make
#>make install

以下按照实际情况修改斜体字段
在MySQL服务器上执行创建sysauth数据库

create database if not exists `sysauth`;
USE `sysauth`;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*Table structure for table `logs` */
DROP TABLE IF EXISTS `logs`;
CREATE TABLE `logs` (
`messages` varchar(500) NOT NULL,
`pid` varchar(50) NOT NULL,
`user` varchar(20) NOT NULL,
`host` varchar(50) NOT NULL,
`rhost` varchar(50) NOT NULL,
`time` varchar(50) NOT NULL,
`id` int(11) NOT NULL auto_increment,
UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
/*Table structure for table `users` */
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`username` varchar(50) NOT NULL default '',
`password` varchar(50) NOT NULL default '',
`id` int(11) NOT NULL auto_increment,
`state` bit(1) NOT NULL,
`active` tinyint(1) NOT NULL,
`temperory` tinyint(1) NOT NULL,
UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;

在/etc/security/下创建sshd_pam_mysql.conf

users.host=MySQLDataBaseHost
users.database=sysauth
users.db_user=MySQLDBUser
users.db_passwd=MySQLDBPassword
users.table=users
users.user_column=username
users.password_column=password
users.status_column=state
users.password_crypt=3
users.where_clause=users.active=1
verbose=0
log.enabled=true
log.table=logs
log.message_column=messages
log.pid_column=pid
log.user_column=user
log.host_column=host
log.rhost_column=rhost
log.time_column=time
以上users.password_crypt是选择用户密码加密方式
0 ->明文密码
1 -> MySQL的crypt加密
2 -> MySQL的password加密
3 -> md5加密
4 -> sha1加密(0.61和0.71pre2及以后)
其他参数可以参见pam_mysql的FAQ和README

在向MySQL数据库的users表添加用户(示例,注意)之后, 可以去修改/etc/security/sshd
sshd默认内容为:
#%PAM-1.0
auth include system-auth
account required pam_nologin.so
account include system-auth
password include system-auth
session optional pam_keyinit.so force revoke
session include system-auth
session required pam_loginuid.so

应该修改为:
#%PAM-1.0
auth required /lib/security/pam_mysql.so config_file=/etc/security/sshd_pam_mysql.conf
account required /lib/security/pam_mysql.so config_file=/etc/security.sshd_pam_mysql.conf
account required pam_nologin.so
session optional pam_keyinit.so force revoke
session include system-auth
session required pam_loginuid.so

最后/etc/init.d/sshd reload, 开启新的终端进行测试即可

添加用户示例:
insert  into `users`(`username`,`password`,`state`,`active`,`temperory`) values ('root',md5('123456'),'\0',1,0),('suchasplus',md5('654321'),'\0',1,0);
添加用户的注意事项:
用户名一定要是系统中真实存在的用户, 即/etc/passwd必须存在用户, useradd username即可
pam_mysql只是更换验证方式, 并不是LDAP
采用MD5加密验证出错的可能原因:
很多版本的Linux都会出现采用0/1/2加密方式可以通过,但是MD5加密后会报错的情况,RH9上经测试不会报错, 但是CentOS 51. x64会报错.
设置verbose = 1
tail -F /var/log/secure可以看到
non-crypt()ish MD5 hash is not supported in this build.
解决方法是
ln -s /usr/include/openssl/md5.h /usr/include/md5.h
然后重新编译就好, 虽然编译的时候还是会报死都找不到md5.h -_-#!

关于这个存档

This page is a archive of entries in the LJAMP category from August 2008.

LJAMP: July 2008 is the previous archive.

LJAMP: September 2008 is the next archive.

Find recent content on the main index or look in the archives to find all content.