全部文章

绿色版,全手工配置rsync,无须密码交互,不借助ssh

官网下载最新版的cwrscyn服务端和客户端,全都安装到c:\icw。复制icw目录一份。然后用自己带删除程序删除rscyn服务端和客户端。

全自动安装会有两问题。一是服务不会自动启动,二是在客户端不论如何都需要手工输入密码。因为在windows下没有所谓的chmod 600。而在linux下只需要把密码文件chmod 600改为只有所属人有权限即可。但是在windows下不行。即使你用了password-file=密码文件。还是一样。只需要改用windows下cmd批处理中标准的屏幕输语句和重定向输入即可完成。

关键处:echo rsc|C:\icw\bin\rsync -vzrtopg --ignore-errors  --force --progress --delete  rsc@192.168.1.174::freehost  /cygdrive/d/freehost

格式如:

echo 密码|客户端命令行

而安装服务端则可以用下面的命令

"C:\icw\bin\cygrunsrv" -I g3szsouthRsync -c "/cygdrive/c/icw" -p "/cygdrive/c/icw/bin/rsync.exe" -a "--config rsyncd.conf --daemon --no-detach" -o -t auto -e "CYGWIN=nontsec binmode" -1 "/cygdrive/c/icw/rsyncd-stdin.log" -2 "/cygdrive/c/icw/rsyncd-stderr.log"  -y "tcpip" -f "g3szsouthRsync"

下面来进行全手工配置。

先配置服务端conf文件


use chroot = false
strict modes = false
hosts allow = *
log file = rsyncd.log
pid file = rsyncd.pid
secrets file = /cygdrive/c/icw/password
[freehost]
path = /cygdrive/d/freehost
read only = false
list = no
auth users = rsc
transfer logging = no

加入计划任务并且每天在18:40定时执行任务。这样做不会因为管理员密码修改而导致计划任务无效。如果是手工在图形界面下用控制面板添加的则和当前用户密码关联。一旦改密码就不会执行任务了。

at 18:40 /every:m,t,w,th,f,s,su C:\icw\手工开始同步.cmd

在c:\icw\下建一个password的文本文件。

用户名:密码

形式存放。一行一个。

然后启动服务即可运行了。上面的参数涉及到的对应的修改。

上面方法是针对WINDOWS2003到WINDOWS2003,也适用于LINUX到LINUX   ,LINUX到WINDOWS2003。

网上介绍的无需交互输入密码大多是LINUX下用password-file。和WIN下使用ssh-kengen。对两台服务器生成密钥互相设为信任认证。这样做的麻烦是程序不通用,每两台服务器都需要生成证书。

附一个已经打包好的绿色安装包。不可以修改解压路径。略做修改rscyn.conf和password即可运行了。

[attach=3]
 

net start  g3szsouthRsync

Tags: 服务器同步 , 密码 , 不需 , 无须 , 无需 , cwrscyn , rscyn

罗兰德制造无损迁移IIS(含匿名帐号,ntfs,acl,用户同步) For Win2003

windows下迁移网站确实不如linux下这么方便.
迁移一个两个那是好办.要是迁个虚拟主机.动不动五六百个呢?光是添加用户名密码,绑定域名,配置ntfs权限.每一项都能让人头大.何况要是再来个五六台服务器就三四千了.要是一个一个迁会要命的.

不光是迁移.或者是因为服务器运行久了.慢了,中毒了.本文方法同样适用.要重装系统.

下面这些方法都是尽量用身边最常用的软件,最能就地取材的方法.不借助于第三方,或偏门少见的软件实现.

一.第一步首先搞到你所有用户名和密码.

windows下的密码是搞不到的.存在sam文件中,并且是加密的.开机状态是不可以存取的.破密码的工具也有,可以用lrc,dump一类的工具进行爆破,但是现在我们不是要搞黑客.是自己的服务器.不用这么麻烦.何况就算要黑,跑一个用户的密码也是要跑很久的.
只需要一条命令开始运行打开cmd.exe
net   user   > c:\userlist.txt
net   user最多是三列的会像这样的格式
user1       user2       user3
得到一个所有用户的用户名列表.稍微整理一下,去掉超级管理员,guest等等非网站用户.弄成一列的形式.变成
user1
user2
user3
全选,把它贴到excel中.
这样在A1单元格填的就是user1,选中d1列输入一个数字,拖动填充柄往下拉.会自动自增帮你填好.拉到和用户名一样多就行.
然后在c1列点击fx,等号后输入函数,对d1列的数字进行任意一个tan,sin之类的正,余弦,正,余割都行.会生成一些随机小数位.同样拖动填充柄,往下拉,它会自动帮你填好相对单元格地址引用.

然后,文件,另存为,保存时格式选   CSV(逗号分隔).csv存为userlist.csv
这个文件表现如下
user1,0.3365455
user2,0.5456464
user3,0.2123132

目的就是为了构造

用户名,密码

中间以逗号分隔的列表便于后面调用.这个列表构造方法也很多.不一一例举.上面只是给出其中一种方法.

如果有虚拟管理主机软件如prima,freehost,华众,蓝芒一类.更简单.直接数据库里面导出用户名密码列表即可.

如星外,7i24可以在SQLserver查询分析器执行
select   ftpname,ftppassword,serverlistid   from   FreeHost.FreeHost_Product_Host   where   serverlistid=1   or   serverlistid=2     order   by   serverlistid

serverlistid可以根据实际受控端来控制是否要一起导出.
在查询分析器右键,另存为即可得到一个userlist.csv的文件.


二.导出IIS配置备份

del   iismove.SC0
del   iismove.MD0  
iisback.vbs     /backup   /b   iismove     /e   iismove   /overwrite   /v   0
copy   C:\WINDOWS\system32\inetsrv\MetaBack\iismove.SC0   iismove.SC0
copy   C:\WINDOWS\system32\inetsrv\MetaBack\iismove.SC0   iismove.MD0

以上是命令行的实现.图形化操作方法也附一个.

iis管理器中最顶级处,右键,所有任务,配置备份、还原

点创建备份,备份名称随便输入,勾选使用密码加密备份,一定要勾,不勾不能在别的电脑还原。


把C:\WINDOWS\system32\inetsrv\MetaBack中生成的MD0和SCO文件复制到新服务器中的
C:\WINDOWS\system32\inetsrv\MetaBack中。

按上面的方法,恢复还原即可。


三.目标服务器IIS预配置

复制前面生成的userlist.csv和批处理文件放同个目录

md   d:\freehost
for   /f   "tokens=2*   delims== "   %%b   in   ( 'wmic   group   where   name^= "IIS_WPG "   get   SID   /value^|findstr   /i   "sid= " ')   do   (set   WPG=%%b)
echo   y|cacls.exe   d:\freehost   /c   /s:D:(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICI;FR;;;%WPG%)
net   localgroup   freehost   /add
for   /f   "delims=,   tokens=1,2 "   %%i   in   (userlist.CSV)   do   md   d:\freehost\%%i\web
for   /f   "delims=,   tokens=1,2 "   %%i   in   (userlist.CSV)   do   md   d:\freehost\%%i\db
for   /f   "delims=,   tokens=1,2 "   %%i   in   (userlist.CSV)   do   md   d:\freehost\%%i\log
for   /f   "delims=,   tokens=1,2 "   %%i   in   (userlist.CSV)   do   net   user   %%i   %%j   /add   /expires:never   /passwordchg:no   /times:all
for   /f   "delims=,   tokens=1,2 "   %%i   in   (userlist.CSV)   do   net   localgroup   freehost   /add   %%i
for   /f   "delims=,   tokens=1,2 "   %%i   in   (userlist.CSV)   do   net   localgroup   users   /delete   %%i
for   /f   "delims=,   tokens=1,2 "   %%i   in   (userlist.CSV)   do   setacl.bat   %%i

1.上面的命令会自动预建立d:\freehost为网站主目录.并只给iis_wpg组只读权限
(用于运行asp.net,php一类的程序.如果只运行asp.可以省去.)
2.增加freehost用户组,把userlist.csv中的用户建立并加入freehost组.这样做是便于管理.对freehost组进行组策略安全限制即可.
3.预建立用户文件星外的目录结构是
d:\freehost
d:\freehost\web
d:\freehost\log
d:\freehost\db
如果是其他的虚拟主机软件按照规则修改上面的路径即可.
prima是域名点号换下划线生成比如www.baidu.com的文件就是baidu_com
d:\baidu_com
d:\baidu_com\htdoc
d:\baidu_com\database
d:\baidu_com\weblog
文件名不一样,稍作改动即可.

最后一行,是为各目录设置权限
for   /f   "delims=,   tokens=1,2 "   %%i   in   (userlist.CSV)   do   setacl.bat   %%i内容如下


for   /f   "tokens=2*   delims== "   %%a   in   ( 'wmic   useraccount   where   name^= "%1 "   get   SID   /value^|findstr   /i   "sid= " ')   do   (set   uSID=%%a)
for   /f   "tokens=2*   delims== "   %%b   in   ( 'wmic   group   where   name^= "IIS_WPG "   get   SID   /value^|findstr   /i   "sid= " ')   do   (set   uWPG=%%b)
echo   y|cacls.exe   d:\freehost\%1   /c   /s:D:AI(A;;FR;;;%uSID%)(A;OICIIO;GR;;;%uSID%)(A;OICIID;FA;;;BA)(A;OICIID;FR;;;%uWPG%)(A;OICIID;FA;;;SY)
echo   y|cacls.exe   d:\freehost\%1\db   /c   /t   /s:D:AI(D;;SD;;;%uSID%)(A;;0x17019f;;;%uSID%)(A;OICIIO;SDWDGWGR;;;%uSID%)(A;ID;FR;;;%uSID%)(A;OICIIOID;GR;;;%uSID%)(A;OICIID;FA;;;BA)(A;OICIID;FR;;;%uWPG%)(A;OICIID;FA;;;SY)
echo   y|cacls.exe   d:\freehost\%1\log   /c   /t   /s:D:AI(A;ID;FR;;;%uSID%)(A;OICIIOID;GR;;;%uSID%)(A;OICIID;FA;;;BA)(A;OICIID;FR;;;%uWPG%)(A;OICIID;FA;;;SY)
echo   y|cacls.exe   d:\freehost\%1\web   /c   /t   /s:D:AI(D;;SD;;;%uSID%)(A;;0x17019f;;;%uSID%)(A;OICIIO;SDWDGWGR;;;%uSID%)(A;ID;FR;;;%uSID%)(A;OICIIOID;GR;;;%uSID%)(A;OICIID;FA;;;BA)(A;OICIID;FR;;;%uWPG%)(A;OICIID;FA;;;SY)


操作的内容是将外部变量用户名传入使用wmic管理命令查出用户名在本机的sid值.因为sid是唯一的(当然用黑客手段也可以让他不唯一,微软bug),即使是两台服务器上相同的用户名,或者在同一台服务器上建立一个用户名删除再建立相同名称的sid也不一样.所以不论重装系统后还是换过服务器都需要用上面批处理重设ntfs权限.

使用的ntfs权限是ace,sddl格式.
因为权限项较多,说起来复杂就不一一说明.大约意思就是将各个用户主目录隔离开,对web目录允许脚本执行,log,db仅能html.防止webshell跨站.


首先到目标服务器上还原iis配置.自然目标服务器上的iis要安装好,如果原服务器有iisftp也需要把ftp安装好

copy   /y   iismove.SC0   C:\WINDOWS\system32\inetsrv\MetaBack\iismove.SC0  
copy   /y   iismove.MD0   C:\WINDOWS\system32\inetsrv\MetaBack\iismove.MD0
del   iismove.SC0
del   iismove.MD0  
iisback.vbs     /restore   /b   iismove     /e   iismove     /v   0
进行IIS还原.

注意事项:如果有asp.net,isapi_rewrite重写组件,华盾等基于iisfilter的组件,也须要先安装上.不然会因为找不到这些过滤器,会在事件管理器找到大量的错误iis始终是server   unavailable.

做到这里,目标IIS差不多已经恢复了,打开html已经正常.
但是运行asp   asp.net   一类的程序会被告知401   acl拒绝.因为iis里面的密码没有被同步.

四.最后来做iis匿名访问密码同步.


先导出iis中站点的节点ID编号对照表.

更新W3ID批量表.bat

del     c:\sitelisttemp.txt
iisweb/query> c:\sitelisttemp.txt


rem   更新W3ID批量表.bat
for   /f   "delims=,   tokens=1,2 "   %%i   in   (userlist.CSV)   do   chageuserpass.bat   %%i   %%j


chageuserpass.bat

net   user   %1   %2
type   c:\sitelisttemp.txt|grep   "^%1. "|cut   -d "( "   -f2|cut   -d ") "   -f1> c:\W3IDtemp.txt
set   /p   W3ID= <c:\W3IDtemp.txt
adsutil.vbs   set   %W3ID%/AnonymousUserName   %1
adsutil.vbs   set   %W3ID%/AnonymousUserPass   %2

因为windows下批处理处理字符的功能太弱要嵌套太多for命令.怕大家看得头晕.这里借用了linux两个命令.
grep和cut.去网上找到http://unxutils.sourceforge.net/UnxUtils.zip解压把里面这两个文件复制c:\windows\system32中即可.
假如你实在找不到这两个文件.用windows下for批处理也是可以的.只是略嫌麻烦.


开始运行iisreset   /timout:0
对iis进行重启,然后开始
大功告成了.
http://www.reynaldliu.net

在linux下运行asp For apache2.2.x版本修改源文件模块,编译通过

翻遍互联网,只有iasp2.11版本是最新版本,官网打不开了。估计倒闭了。这个版本最后日期是2006。

而当时的apache最高版本是2.0.x

如果现在再去用的话,多数的apache是2.2.x以上的版本。而2.0和2.2是两个不同的开发分支有很多不同。2.0里面的mod和apr API多数不一样。

经历数个小时,翻apache api手册,一一新旧api函数对着改成2.2版本。

在动手改之前,网上翻了,所有碰到的问题和回答大都类似。

都是:要么降回1.3版,这是当时支持得最好的版本。可以直接安装,也不需要重新编译。

如果是用2.0版本的,则要求自行编译,按网上的文章如果是用apache2.0可以通得过。但是现在大多apache都已经用2.2x以上版本了。用网上的自行编译的方法通过了。在启动apache的时候会报

undefined symbol: ap_http_method

翻2.2的API手册,得知这个是1.3中的api,在新版中改成ap_http_scema了

再重新编译,启动apache,接着又报undefined symbol:ap_palloc

同样的翻手册对着改函数名。前后一共约16个函数名。分别修改mod_iasp.c和utils.c

改完再编译,启动apache2.2.14通过了。

只是还是不支持mdb。在iasp的管理台后台可以启用ado,access。

但是中文问题目前还不知道怎么解决。中文全变黑方块了。估计是jsp到apache的代理通道转换不对。回头再看看。

附上修改好的 在apache2.2.14,jdk1.6,apr1.3.9,centos5.3下编译通过的源文件包。下载这个包复盖回/iasp/bin/apache/source/2.0中

再按网上的方法编译即可。

[attach=2]

查看apache编译参数的各种方法

查看apache编译参数的各种方法。


一。
httpd -l
列出编译的模块文件。一般可以在/usr/local/apache2/include/文件夹下找到这里列出的文件。
二。
httpd -V
这里可以看出大部分关于apache的版本信息,安装操作系统位数平台及apr版本。
三。
httpd -M
列出编译过的模块。同时能看到哪些模块是static静态编译,哪一些是shared动态加载的。
四。
config.nice
这个文件一般在prefix所指目录例/usr/local/apache2/build/config.nice文件。用vi打开看,复制出来可以直贴到shell窗口进行configure。
如果已经static编译过的模块,再次修改httpd.conf方式用loadmodule命令,在启动apache时会报
"模块名" is built-in and can't be loaded.
的错误。

windows下手动编译php,改变默认php.ini路径

手工编译改变php.ini路径
有什么用呢?比如说:
你可以增加php扩展功能
你可以修改php.ini的默认位置不放到c:\windows\php.ini下面。


方法一:修改路径,编译时加参数
--with-config-file-scan-dir=c:\aaa

cscript /nologo configure.js --enable-snapshot-build --with-config-file-scan-dir=c:\aaa

方法二:修改php.ini文件名
main\config.w32.h查找所有php.ini改名为所要文件名,记住。并同时修改\main\php_ini.c下面这行的php.ini为前面一样的文件名。两个文件两处需要同时对应一样的改。
fh.handle.fp = php_fopen_with_path("php.ini", "r", php_ini_search_path, &php_ini_opened_path TSRMLS_CC);


编译。OK



开始之前,如果你装了vs2005,vs2003 vs2008一类的工具,他们的变量会抢占cl.exe变量。这些冲突你要自行解决,大部分属于环境变量问题。
要么先删除这些编译工具,要么重装系统,给他一个干净的vc6++安装环境。
1.下载需要的文件
1.下载vc6++ sp6,约184M的rar包,解开来是iso
2.下载2003 platform sdk,分卷cab包,约13个。每个25M,共约384M
3.http://www.php.net/extra/win32build.zip包,必须的
4.http://www.php.net/extra/bindlib_w32.zip,必须的
5.http://pecl2.php.net/downloads/p ... bs/binary-tools.zip,必须的
6.http://files.edin.dk/php/win32/zip.zip,所有支持包,下载了这个,不用下载libxml包
7.需要的编译的php源代码。是源代码,不是安装包。就是linux下面用的那些。
http://www.php.net/releases/
页面中以tar.bz2结尾,tar.gz的那些就是。请只下载5.x开头的版本。

2、环境要求
基于Windows NT的windows,w9x就别闹了。
Visual Stdio C++ 6
Winxp,win2003(需要下载不同版本的platform sdk)

3、建立目录
1.c:\work
2.c:\work\win32build(win32build.zip解压)
3.c:\work\bindlib_w32(bindlib_w32.zip解压)
4.binary-tools.zip解压后放入win32build下的bin目录。
5.http://files.edin.dk/php/win32/zip.zip解压放到win32build目录下面
6.右键,我的电脑属性,高级,环境变量,在下面“系统变量”里面找到PATH双击,在最后面加上;c:\work\win32build\bin
前面的分号不要少了。
7.解压php源代码到c:\work\php-5.x

4、打开cmd窗口,转到 c:\work\php源代码目录
输入buildconf得到configure.js文件
cscript /nologo configure.js --enable-snapshot-build
如果你没有下载http://files.edin.dk/php/win32/zip.zip这里的文件放进去,就不能用这个命令,不然会产生大量的编译错误。
帮助命令,懂英文的自己看。编译过linux下的php一看就明白。
cscript /nologo configure.js --help

5、开始编译
输入nmake snap
一般是报什么什么.h文件not found或找不到就是没有下载zip.zip文件包,或没有放对地方。
如果是编译cl.exe错误,就是环境变量设置不对或cl.exe冲突了。你安装了很多个编译器比如vs2003 vs2005什么的。
vc6的编译器是
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
如果你在cmd下输入cl回车,报命令找不到,或显示不是上面的。环境就配置不对。自行搞定去吧。几句话也说不清楚。
edit by reynaldliu 2009.09.10
 

---------------需要编译的原由---------------------------------------------------------------------------------------------

因为windows下,iis默认的php.ini是搜索c:\windows\php.ini

现在需要多版本共存,所以希望可以把php.ini改名成为php2.ini,php3.ini,php4.ini这样的或能改变路径不是c:\windows也行.

现希望实现以上功能.只能寄望于自行编译php了.
环境如下:
php5.0(及以上版本)
win2003+iis6,isapi模式
vs2005编译器

需要修改php5源码包的哪些文件..........有耐心的朋友给个方法.没耐心的高手稍点一下也可以.

试过phprc,这个变量是所有php5共用的.不能区分开各版本用的php.ini

apache的多版本共存,我会弄,只要指定不同的phpinidir就行了.但是这里不能采用.并且不是php4,php5这样的共存.举个例子php5.2.9和php5.2.10这样的共存.

已经搞过在注册表里面inifilepath:5.2.9这样建多个键值.就像zend的文件夹那样为每一个版本建一个注册表键值.
HKEY_LOCAL_MACHINE\SOFTWARE\PHP\5\IniFilePath -> c:\php5
HKEY_LOCAL_MACHINE\SOFTWARE\PHP\5\2\IniFilePath -> c:\php5.2
HKEY_LOCAL_MACHINE\SOFTWARE\PHP\5\2\9\IniFilePath -> c:\php5.2.9
HKEY_LOCAL_MACHINE\SOFTWARE\PHP\IniFilePath -> c:\php4

这种方法解决不了他加载mysql扩展这些问题.因为没有phprc,等的支持,没有办法区分开来libmysql.dll与之对应的php版本. 比如php5.1和php5.3所用的libmysql.dll可能就不同.


已经解决,方法已经找到。

方法一:修改路径,编译时加参数--with-config-file-scan-dir=c:\aaa
cscript /nologo configure.js --enable-snapshot-build --with-config-file-scan-dir=c:\aaa

方法二:修改php.ini文件名
main\config.w32.h查找所有php.ini改名为所要文件名,记住。并同时修改\main\php_ini.c下面这行的php.ini为前面一样的文件名。两个文件两处需要同时对应一样的改。
fh.handle.fp = php_fopen_with_path("php.ini", "r", php_ini_search_path, &php_ini_opened_path TSRMLS_CC);


编译。OK

Total: 17Page 4 of 4‹ Prev1234