Archive for 工具

在抓取网页数据进行html分析的时候,以前一直使用HTMLParser,文档:http://docs.python.org/library/htmlparser.html 自从知道HTMLParser后,一直感觉他就是一个神器,分析简单快捷,几行代码搞定了。 这次在总页面抓取使用HTMLParser,没有问题,很快实现结果。但是在获取详细信息的页面时候,开始提示错误了:HTMLParseError: malformed start tag,各种google,其中有一大部分的结果是关于Beautiful Soup的,于是我了解了Beautiful Soup。HTMLParser还有一个缺点,对编码的处理也不是很友好。 开始安装的Beautiful Soup最新版本4.4.1,有问题,也是报这个错误。由于前面搜索知道换成版本3.07a就好了,直接又换了一个版本。先说官网地址:http://www.crummy.com/software/BeautifulSoup/,Beautiful Soup 3.07a下载地址:http://www.crummy.com/software/BeautifulSoup/bs3/download//3.x/。 测试通过,没有报错。能否抓取成功下面试试。正在看官方文档,版本3的文档不一样,贴地址:http://www.crummy.com/software/BeautifulSoup/bs3/documentation.zh.html 时隔二分钟,测试成功。发现Beautiful Soup更加简单,文档也不错只看了开始的例子就会用了,速度应该不会太好,不过我只是满足自己需要。很好很强大。 刚刚结合文档总结了几个用法,很多根据文档写出文档没写的例子: #基本的标签查找 asd = soup.find('div', id="productDescription") #可以这样写 soup.findAll('td', {'class':"bucket normal"})[0] #想要进行查询结果中查找 aaa = BeautifulSoup(str(asd)) #查找多个不同class,或 bbb = aaa.findAll('div', {'class':["leftImage","rightImage"]})

Continue

maxmind.com提供了一个服务,通过引入一个js文件(http://j.maxmind.com/app/geoip.js),可以把他判断到的用户的国家、城市、经纬度等信息加入到页面中来。



其他功能函数 function geoip_country_code() { return 'CN'; } function geoip_country_name() { return 'China'; } function geoip_city() { return 'Shanghai'; } function geoip_region() { return '23'; } function geoip_region_name() { return 'Shanghai'; } function geoip_latitude() { return '31.0050'; } function geoip_longitude() { return '121.4086'; } function geoip_postal_code() { return ''; } function geoip_area_code() { return ''; } function geoip_metro_code() { return ''; }

Continue

我是在Ubuntu 10.04.3 LTS下安装的,简单介绍一下。 nmap安装命令:apt-get install nmap Metasploit安装命令: wget http://downloads.metasploit.com/data/releases/metasploit-latest-linux-installer.run chmod +x metasploit-latest-linux-installer.run ./metasploit-latest-linux-installer.run 一路回车就ok了。

Continue

1.:s/vivian/sky/ 替换当前行第一个 vivian 为 sky :s/vivian/sky/g 替换当前行所有 vivian 为 sky 2. :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky :n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky (n 为数字,若 n 为 .,表示从当前行开始到最后一行) 3. :%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky :%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky 4. 可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符 :s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/ VIM中常用的替换模式总结。 1,简单替换表达式 替换命令可以在全文中用一个单词替换另一个单词: :%s/four/4/g “%” 范围前缀表示在所有行中执行替换。最后的 “g” 标记表示替换行中的所有匹配点。如果仅仅对当前行进行操作,那么只要去掉%即可 如果你有一个象 “thirtyfour” 这样的单词,上面的命令会出错。这种情况下,这个单词会被替换成”thirty4″。要解决这个问题,用 “\<” 来指定匹配单词开头: :%s/\” 来解决这个问题: :%s/\/4/g 如果你在编码,你可能只想替换注释中的 “four”,而保留代码中的。由于这很难指定,可以在替换命令中加一个 “c” 标记,这样,Vim 会在每次替换前提示你: :%s/\/4/gc 2,删除多余的空格 要删除这些每行后面多余的空格,可以执行如下命令: :%s/\s\+$// 命令前面指明范围是 “%”,所以这会作用于整个文件。”substitute” 命令的匹配模式是 “\s\+$”。这表示行末($)前的一个或者多个(\+)空格(\s)。替换命令的 “to” 部分是空的:”//”。这样就会删除那些匹配的空白字符。 3,匹配重复性模式 星号项 “*” 规定在它前面的项可以重复任意次。因此: /a* 匹配 “a”,”aa”,”aaa”,等等。但也匹配 “” (空字串),因为零次也包含在内。星号 “*” 仅仅应用于那个紧邻在它前面的项。因此 “ab*” 匹配 “a”,”ab”,”abb”,”abbb”,等等。如要多次重复整个字符串,那么该字符串必须被组成一个项。组成一项的方法就是在它前面加 “\(“,后面加 “\)”。因此这个命令: /\(ab\)* 匹配: “ab”,”abab”,”ababab”,等等。而且也匹配 “”。 要避免匹配空字串,使用 “\+”。这表示前面一项可以被匹配一次或多次。 /ab\+ 匹配 “ab”,”abb”,”abbb”,等等。它不匹配 后面没有跟随 “b” 的 “a”。 要匹配一个可选项,用 “\=”。 例如: /folders\= 匹配 “folder” 和 “folders”。 4,指定重复次数 要匹配某一项的特定次数重复,使用 “\{n,m}” 这样的形式。其中 “n” 和 “m” 都是数字。在它前面的那个项将被重复 “n” 到 “m” 次 (|inclusive| 包含 “n” 和 “m”)。例如: /ab\{3,5} 匹配 “abbb”,”abbbb” 以及 “abbbbb”。 当 “n” 省略时,被默认为零。当 “m” 省略时,被默认为无限大。当 “,m” 省略时,就表示重复正好 “n” 次。例如: 模式 匹配次数 \{,4} 0,1,2,3 或 4 \{3,} 3,4,5,等等 \{0,1} 0 或 1,同 \= \{0,} 0 或 更多,同 * \{1,} 1 或 更多,同 \+ \{3} 3 5,多选一匹配 在一个查找模式中,”或” 运算符是 “\|”。例如: /foo\|bar 这个命令匹配了 “foo” 或 “bar”。更多的抉择可以连在后面: /one\|two\|three 匹配 “one”,”two” 或 “three”。 如要匹配其多次重复,那么整个抉择结构须置于 “\(” 和 “\)” 之间: /\(foo\|bar\)\+ 这个命令匹配 “foo”,”foobar”,”foofoo”,”barfoobar”,等等。 再举个例子: /end\(if\|while\|for\) 这个命令匹配 “endif”,”endwhile” 和 “endfor”。

Continue

今天写代码特意在vim下写的,逼着自己不动鼠标。不能解决的问题就google一下然后学习 ,再操作下,这次记录最基本的选择、复制和粘帖 基本操作流程: 进入可视模式,按ESC键。然后按v键,进入虚拟模式,相当于模拟鼠标。然后用方向键选定你的内容.(假如,移动光标上下左右,选中第三行和第四行的内容),然后按y键复制选定的内容;再用方向键移动到你要粘贴的地方(假如,移动指针到第十行),最后按p键来粘贴。 贴大牛的笔记: 1. 将光标移动到将要复制的行处,按yy举行复制当前行(按nyy复制n行),再移动到粘贴位置,按p举行粘贴。 2. 将光标移到复制的首位置,按下v,用hjkl移动,按y复制,如果按d就表示剪切,按p粘贴。 3. 光标移到肇始行,输入ma;光标移到结果行,输入mb;光标移到粘贴行,输入mc;然后 :'a,'b co 'c,把 co 改成 m 就成剪切了。 4. 光标移动到要复制的行,输入yny(n表现要复制该行以下n行);光标移动到粘贴行,按p粘贴。 5. 直接输入:n1,n2 co n3。(n1为肇始行,n2为结果行,n3为粘贴行) 6. 差别文件之间的复制:用:sp [filename]打开另一文件,(用^ww在文件之间切换),然后按上述要领复制 相关的下令如下: yy 将当前行复制到缓冲区 yw 将当前单词复制到缓冲区 y1 将光标处的一个字符复制到缓冲区 p 将缓冲区的信息粘贴到光标的背面 :行号1 ,行号2 copy 行号3 将行号1到行号2的内容复制到行号3地址行的背面。 :行号1 ,行号2 move 行号3 将行号1到行号2的文本内容移动到行号3地址行的背面。 7. 寄存器操纵 "?nyy: 将当前行及其下n行的内容存储到寄存器?中,此中?为一个字母,n为一个数字 "?nyw: 将当前行及其下n个字存储到寄存器?中,此中?为一个字母,n为一个数字 "?nyl: 将当前行及其下n个字符存储到寄存器?中,此中?为一个字母,n为一个数字 "?p: 取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母 ,也可以是一个数字 ndd: 将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中 vi 中配置tab为4和自动转换成空格 yw命令可以复制一个单词。yy命令可以复制一行,y$命令可以复制从当前光标到本行结尾的所有字符 ' 跳转前的光标位置 " 最后编辑的光标位置 [ 上一次修改的开始处 ] 上一次修改的结尾处 将光标移到某一行,用命令ma来进行标记。在这里m是标记的命令,a是对这一行所做标记的名称,当然也可以使用26个字母中的任意一个做为标记名称。 剪切与复制相同:

剪切一行:dd
剪切当前行光标所在的位置到行尾:d$
剪切当前行光标所在的位置到行首:d^
前切三行:3dd,即从当前行+下两行被剪切了。

Continue

参考文章:http://www.cnblogs.com/samwei/archive/2011/04/25/2026211.html 写得很详细,参考一下。我只是想实现python的自动缩进,所以就照做了前两条。 安装vim时自带的插件文件,只要修改一下vimrc文件就好。 sudo vi /usr/share/vim/vimrc 添加:

set filetype=python
au BufNewFile,BufRead *.py,*.pyw setf python
set autoindent " same level indent
set smartindent " next level indent
set expandtab
set tabstop=4
set shiftwidth=4
set softtabstop=4
哈哈 测试了一下 成功了。虽然不是很懂具体是神马意思,但是可以猜测个差不多。先这样吧,有时间仔细研究一下vim的文档。 显示行号: 在配置文件中加入 set number 命令为‘:set nu’

Continue

命令行下直接svn,提示未安装 ,并且给出安装方法。sudo apt-get install subversion 执行命令安装完成后,svn help查看帮助。 linux系统的使用还是很简单的,根据提示操作很方便。 以下摘自sae的svn教程: 1. 从SVN仓库中检索出代码到工作拷贝: # svn checkout https://svn.sinaapp.com/appname [workcopy] 其中workcopy是可选的,如果不写workcopy,SVN会默认将appname做为workcopy。 如果只检索某个版本: # svn checkout https://svn.sinaapp.com/appname/appversion [workcopy] 只检索某个版本的某个目录: # svn checkout https://svn.sinaapp.com/appname/appversion/folder [workcopy] 2. 向SVN仓库提交代码: # svn commit -m "here is message" 3. 将本地文件添加到工作拷贝: # svn add something 注:如果something为文件,svn会将这个文件添加到工作拷贝;如果something是目录,svn会将目录及里面的文件全添加到工作拷贝。something也可以是通配符*,这样会忽略已经添加过的文件。 4. 从工作拷贝中删除一个文件: # svn delete something 注:如果something为文件,svn会将这个文件从工作拷贝中删除;如果something是目录,svn会将目录及里面的文件全部从工作拷贝中删除。 5. 直接从SVN仓库中删除文件: # svn delete -m "delete something" https://svn.sinaapp.com/appname/appversion/something 注:可以从SVN仓库中直接删除单个文件或单个目录甚至某个版本。 6. 将一个本地项目导入到SVN仓库: 导入应用的某个版本: # svn import localdir https://svn.sinaapp.com/appname/appversion 注:要确保目前应用的appversion不冲突。 7. 查看工作拷贝中的文件或目录状态: # svn status [something] 8. 更新自己的工作拷贝: # svn update 注:从SVN仓库下载最新版本,此命令会导致本地没有提交的更改丢失,建议使用此命令前先查看一下本地拷贝状态(svn status)。 9. 取消对代码修改 取消对代码的修改分为两种情况。 第一种情况:改动没有被提交(commit)。 这种情况下,使用svn revert就能取消之前的修改。 svn revert用法如下: # svn revert [-R] something 其中something可以是(目录或文件的)相对路径也可以是绝对路径。 当something为单个文件时,直接svn revert something就行了;当something为目录时,需要加上参数-R(Recursive,递归),否则只会将something这个目录的改动。 在这种情况下也可以使用svn update命令来取消对之前的修改,但不建议使用。因为svn update会去连接仓库服务器,耗费时间。 注意:svn revert本身有固有的危险,因为它的目的是放弃未提交的修改。一旦你选择了恢复,Subversion没有方法找回未提交的修改。 第二种情况:改动已经被提交(commit)。这种情况下,用svn merge命令来进行回滚。 回滚的操作过程如下: 1). 保证我们拿到的是最新代码: svn update 假设最新版本号是28。 2). 然后找出要回滚的确切版本号: svn log [something] 假设根据svn log日志查出要回滚的版本号是25,此处的something可以是文件、目录或整个项目 如果想要更详细的了解情况,可以使用svn diff -r 28:25 [something] 3). 回滚到版本号25: svn merge -r 28:25 something 为了保险起见,再次确认回滚的结果: svn diff [something] 发现正确无误,提交。 4). 提交回滚: svn commit -m "Revert revision from r28 to r25,because of ..." 提交后版本变成了29。 将以上操作总结为三条如下: a. svn update,svn log,找到最新版本(latest revision) b. 找到自己想要回滚的版本号(rollbak revision) c. 用svn merge来回滚: svn merge -r : something 10. 查看SVN仓库日志信息: # svn log [workcopy] 查看所有本地的历史日志,如果workcopy为某文件,那么就是查看某个文件的日志信息。 查看SVN仓库所有文件的日志信息: # svn log https://svn.sinaapp.com/appname/ 这个命令会查看所有修改过的日志。 注:SAE提供的SVN服务完全支持标准SVN的所有命令,更详细的使用说明请查阅SVN官方帮助文档。 SVN命令帮助文档:http://www.subversion.org.cn/svnbook/1.4/svn.ref.html 中文完全帮助文档:http://svnbook.red-bean.com/index.zh.html

Continue

为了学习web.py,下载simple-todo,但是需要工具。又研究了一下。使用比较简单,右键--clone--简单配置下就好。 下载地址:http://tortoisehg.bitbucket.org/ [caption id="attachment_408" align="alignnone" width="300" caption="tortoisehg"]tortoisehg[/caption]

Continue

ftp基本知识vsftpd的名字代表“very secure FTP daemon”,它的开发者Chris Evans考虑的首要问题就是数据传输的安全性。所以,在上述所有的特性当中,较高的安全性是处于最重要的地位。vsftpd比其他诸如Wu-ftpd和 Proftpd之类的FTP服务器更加优越。另外,在速度方面,据统计,使用ASCⅡ模式下载数据的速度是Wu-ftpd的两倍。在Linux2.4系列版本的内核下,千兆以太网的下载速度可以达到86MB/S;在稳定性方面,根据ftp.redhat.com的数据,它可以支持15000个并发用户,所以其总体性能也是非常高的,vsftpd在安全性、高性能及稳定性三个方面有上佳的表现。它提供的主要功能包括虚拟IP设置、虚拟用户、Standalone、inetd操作模式、强大的单用户设置能力及带宽限流等。在安全方面,它从原理上修补了大多数Wu-FTP、ProFTP,乃至BSD-FTP的安装缺陷,使用安全编码技术解决了缓冲溢出问题,并能有效避免“globbing”类型的拒绝服务攻击。目前正在使用vsftpd的官方网站有Red Hat、SuSE、Debian、GNU、GNOME、KDE、Gimp和OpenBSD等。 linux里有三个主要的FTP服务器,分别是VsFTPd、ProFTPd和Pure-FTPd,其中VsFTPd以安全和性能著称,ProFTPd则以众多的特性取胜,Pure-FTPd的性能和特性介乎两者中间 论坛很多都是介绍怎么配置ftp的,这里就只说下关于ftp的一点基本知识 ftp使用者的分类,根据服务器对象的不同将ftp使用者分为3类 1:本地用户(real用户) 2:虚拟用户(guest用户) 3:匿名用户 本地用户:如果用户在远程ftp服务器上拥有服务器的本地帐号,本地用户可以通过输入自己的帐号和口令来进行授权登陆 虚拟用户:如果用户在远程ftp服务器上拥有帐号,且此帐号只能用于文件的传输服务,则称此用户为虚拟用户或guest用户(实际多个虚拟用户只是本地一个用户的影射) 匿名用户:如果用户在远程ftp服务器上没有帐号,则称此用户为匿名用户 ftp协议中定义的典型消息,用来判断问题 125 :数据连接打开,传输开始 200 :命令ok 226 :数据传输完毕 331 :用户名OK,需要输入密码 425 :不能打开数据连接 426 :数据连接被关闭,传输被中断 452 :错误写文件 500 :语法错误,不可识别的命令 530 :未登入。 基本命令: 这里说下建立ftp可能会涉及到的一些命令 ls (显示目录列表,如果太多,可以使用分页命令:ls /etc | more ,按q结束) touch (建立文件,注意是文件,不是目录) cp (复制文件或目录,如:cp /etc/vsftpd.conf /home/xxx 复制vsftpd.conf到/home/xxx目录下) mv (移动文件或目录或改名 如:mv /home/xxx.conf /etc/ 移动/home/xxx.conf到/etc下) rm (删除文件或目录 如果删除目录需要加 -R 参数) cd (切换路径,可以用tab键补全路径 cd ..代表退到上个路径) mkdir (建立目录) chown (改变目录或文件所有者,如 sudo chown root.root /etc/vsftpd.conf 所有者和组都为root) chmod (改变目录或文件权限,配合ls -l使用) (如,chmod ugo+rwx /home/ftp/xxx u:文件或目录所有者的权限 g:组的权限 o:其他用户权限 +添加权限 -减少权限 r w x (读,写,执行) ) ls -l (查看文件或目录权限等信息 ftp的数据传输模式 可能很多人都感到pasv_enable这个参数很奇怪,只是默认是打开的,所以很多人不关心它 这里就要说下ftp的传输模式,分为2种模式 1:主动模式(Active FTP) 2:被动模式(Passive FTP) 主动模式:简单说就是客户提交请求到服务器21端口,然后监听,服务器用默认20端口连接客户监听的端口,进 行数据传输 就是说是服务器向客户发起一个用于传输的连接。 被动模式:客户提交请求到服务器21端口,然后开启x端口,再向服务器发送PASV命令,告诉服务器自己处于被动模式,服务器收到命令,就会开放一个p端口监听,然后通知客户自己数据端口p,客户收到命令,又会开启一个端口v进行连接服务器的p端口,然后两个v-p端口进行数据传输,就是说数据传输是客户发起的,相对服务器就是被动的。 (被动模式通常用在处于防火墙之后的FTP客户端访问外界FTP服务器的情况,因为防火墙通常配置是不允许外界访问防火墙之后的机器,只允许由防火墙之后的主机发起的连接请求) vsftpd主配置文件常用参数说明: listen=<YES/NO> :设置为YES时vsftpd以独立运行方式启动,设置为NO时以xinetd方式启动(xinetd是管理守护进程的,将服务集中管理,可以减少大量服务的资源消耗) listen_port=<port> :设置控制连接的监听端口号,默认为21 listen_address=<ip address> :将在绑定到指定IP地址运行,适合多网卡 connect_from_port_20=<YES/NO> :若为YES,则强迫FTP-DATA的数据传送使用port 20,默认YES pasv_enable=<YES/NO> :是否使用被动模式的数据连接,如果客户机在防火墙后,请开启为YES pasv_min_port=<n> pasv_max_port=<m> :设置被动模式后的数据连接端口范围在n和m之间,建议为50000-60000端口 message_file=<filename> :设置使用者进入某个目录时显示的文件内容,默认为 .message dirmessage_enable=<YES/NO> :设置使用者进入某个目录时是否显示由message_file指定的文件内容 ftpd_banner=<message> :设置用户连接服务器后的显示信息,就是欢迎信息 banner_file=<filename> :设置用户连接服务器后的显示信息存放在指定的filename文件中 connect_timeout=<n> :如果客户机连接服务器超过N秒,则强制断线,默认60 accept_timeout=<n> :当使用者以被动模式进行数据传输时,服务器发出passive port指令等待客户机超过N秒,则强制断线,默认60 accept_connection_timeout=<n> :设置空闲的数据连接在N秒后中断,默认120 data_connection_timeout=<n> : 设置空闲的用户会话在N秒后中断,默认300 max_client=<n> : 在独立启动时限制服务器的连接数,0表示无限制 max_per_ip=<n> :在独立启动时限制客户机每IP的连接数,0表示无限制(不知道是否跟多线程下载有没干系) local_enable=<YES/NO> :设置是否支持本地用户帐号访问 guest_enable=<YES/NO> :设置是否支持虚拟用户帐号访问 write_enable=<YES/NO> :是否开放本地用户的写权限 local_umask=<nnn> :设置本地用户长传的文件的生成掩码,默认为077 local_max_rate<n> :设置本地用户最大的传输速率,单位为bytes/sec,值为0表示不限制 local_root=<file> :设置本地用户登陆后的目录,默认为本地用户的主目录 chroot_local_user=<YES/NO> :当为YES时,所有本地用户可以执行chroot chroot_list_enable=<YES/NO> chroot_list_file=<filename> :当chroot_local_user=NO 且 chroot_list_enable=YES时,只有filename文件指定的用户可以执行chroot anonymous_enable=<YES/NO> :设置是否支持匿名用户访问 anon_max_rate=<n> :设置匿名用户的最大传输速率,单位为B/s,值为0表示不限制 anon_world_readable_only=<YES/NO> 是否开放匿名用户的浏览权限 anon_upload_enable=<YES/NO> 设置是否允许匿名用户上传 anon_mkdir_write_enable=<YES/NO> :设置是否允许匿名用户创建目录 anon_other_write_enable=<YES/NO> :设置是否允许匿名用户其他的写权限(注意,这个在安全上比较重要,一般不建议开,不过关闭会不支持续传) anon_umask=<nnn> :设置匿名用户上传的文件的生成掩码,默认为077 anon_root=<file> :设置匿名用户登陆后的目录 no_anon_password=<YES/NO> :设置匿名用户登陆是否询问密码 ascii_download_enable=<YES/NO> ascii_upload_enable=<YES/NO> :一般为NO,启动这个可能会导致DoS的攻击 hide_ids=<YES/NO> :如果启动,所有档案拥有者与组群都为FTP,也是就ls -l之类指令看到的拥有者和组均为FTP ls_recurse_enable=<YES/NO> :启动此功能,则允许登录者使用ls -R这个指令,默认为NO tcp_wrappers=<YES/NO> :设置服务器是否支持tcp_wrappers(就是支持/etc/hosts.allow和/etc/hosts.deny这两个文件) pam_service_name=vsftpd :设置PAM模块的名称 xferlog_enable=<YES/NO> :是否启动FTP日志记录 xferlog_file=/var/log/vsftpd.log :设置日志记录文件的名称 xferlog_std_format=<YES/NO> :当设置为YES时,将使用与wu-ftpd相同的日志记录格式 问题篇------------------------------- 1.匿名用户问题 下面说下匿名用户上传的问题 要使匿名用户可以上传,需要激活两个选项, 1.anon_upload_enable=YES 2.anon_mkdir_write_enable=YES 然后打开写权限:write_enable=YES 同时还要anon_world_readable_only=NO ,开放匿名用户对整个服务器的浏览权限。 需要注意的是匿名用户对文件权限而言,属于其他用户,所以一定要把允许匿名用户上传目录的权限修改为其他用户可写,如果配置anon_root=/home/ftp ( 匿名的根目录为/home/ftp) 那么/home/ftp的其他用户权限就不能有写权限,如果根目录所有者是ftp的话,所有者的权限也不能有w,否则出同样的错误 可以在建立个文件/home/ftp/public目录,打开public其他用户的写权限,就可以个public上传了(匿名用户根目录是不可以有写权限的),如果只让下载,就可以再建立目录 /home/ftp/down 然后设置其他用户没有写权限就可以了 需要注意的是anon_other_write_enable这个参数,YES会开放文件更名,删除文件等权限,官方是不建议开启的,但关闭会无法进行续传, 这就需要管理员作出权衡了 (这里解释下续传的问题,就我自己的理解续传是指:在已经上传的文件目录中继续添加文件或目录 如果继续使用默认的022文件掩码,就会产生不能续传问题,因为022不允许写入, 当然你可以打开anon_other_write_enable来解决,不过就会产生混乱,安全问题 这时候文件掩码就很重要了,下边会介绍到文件掩码,你可以根据自己的环境设置 ) 2.文件掩码问题 在配置文件中有umask=xxx的参数,这个参数挺让新手费解的,其实它的意思简单 :建立的文件不能拥有的权限 相信大家都见过,sudo chmod 777 /xxx/xxx 其实umask的数值和那个777是一样的系统,8进值表示的权限 第一个是目录所有者权限,第二个是组的权限,第三个是其他用户权限。 有关umask的有这几个参数: local_umask,anon_umask. 分别代表本地用户,和匿名用户的文件掩码。 可以根据不同需要设置用户创建文件的权限。 umask还是比较重要的,设置好的话,可以很省事,而且安全 下边是关于8近制权限的列表: 0:没有权限 1:允许执行 2:允许写入 3:允许执行和写入 4:允许读取 5:允许执行和读取 6:允许写入和读取 7:允许执行,写入和读取 3.虚拟用户问题 首先要了解,虚拟用户和本地用户是不可以同时存在的 关于虚拟用户的设置论坛里有很多,我只实验了一种可以完整配置成功 特别提醒,必须把local_enable=YES打开才能允许虚拟用户登录 这里要说的是关于虚拟用户权限的问题 虚拟用户本质上是本地用户的一个影射,默认的文件掩码是077,这是有原因的 对与虚拟用户这个团体来说用到的权限只跟文件的所有者的权限有关,就是第一组的rwx 虚拟用户要访问另一个虚拟用户的文件,除了需要可以浏览到对方文件外,就需要相应的权限了 能看到文件,就需要有r权限 如果要进入目录,就需要x权限 要想写入目录,就需要w权限 另外提下,在每个虚拟用户各自的配置文件中,更改anon_umask可以改变每个用户上传的文件掩码,但必须在主配置文件中注释掉local_umask。 4.本地用户的访问控制 论坛的置顶贴中有一个简单的ftp,是一个本地用户的配置,实际中可能不只需要一个 这里就说下本地用户的访问控制,基本有两种方法 都是通过修改主配置文件: 1:指定的本地用户不能访问,其他可以访问 userlist_enable=YES userlist_deny=YES userlist_file=/etc/vsftpd.user_list (这个文件需要自己建立,并添加不能访问的用户名) 2:指定的本地用户可以访问,其他不可以(这个比较常用) userlist_enable=YES userlist_deny=NO userlist_file=/etc/vsftpd.user_list(同上,添加可以访问的用户名) 关于chroot的配置1:如果想把所有用户都限制在主目录内活动可以使用下边配置 chroot_local_user=YES chroot_list_enable=YES(这行可以没有, 也可以有) chroot_list_file=/etc/vsftpd.chroot_list 那么, 凡是加在文件vsftpd.chroot_list中的用户都是不受限止的用户 即, 可以浏览其主目录的上级目录. 2: 如果不希望某用户能够浏览其主目录上级目录中的内容,可以如上设置, 然后在 文件vsftpd.chroot_list中不添加该用户即可(此时, 在该文件中的用户都是可以浏览其主目录之外的目录的). 或者, 设置如下 chroot_local_user=NO chroot_list_enable=YES(这行必须要有, 否则文件vsftpd.chroot_list不会起作用) chroot_list_file=/etc/vsftpd.chroot_list 然后把所有不希望有这种浏览其主目录之上的各目录权限的用户添加到文件vsftpd.chroot_list(此时, 在该文件中的用户都是不可以浏览其主目录之外的目录的) 最后要说下tcp_wrappers参数,这个参数是为独立启动vsftpd提供基于主机的访问控制的配置,可以限制特定主机访问,又可以对不同主机或 网络实施不同的配置(可以理解为不同的待遇) tcp_wrappers使用/etc/hosts.allow和/etc/hosts.deny两个配置文件实现访问控制,hosts.allow是一个许可表,hosts.deny是一个拒绝表 在hosts.allow中也可以使用DENY,所以通常可以只使用hosts.allow来实现访问控制。 对vsftpd而言,书写hosts.allow有三种语法形式 1: vsftpd:主机表 (设置允许访问的主机表) 2: vsftpd:主机表:DENY (设置拒绝访问的主机表) 3: vsftpd:主机表:setenv VSFTPD_LOAD_CONF 配置文件名 (对指定的主机使用另外的配置) setenv VSFTPD_LOAD_CONF的值为指定的配置文件名,意图是让vsftpd守护进程读取新的配置项来覆盖主配置文件中的项,实现特定待遇 这有一个小例子来说明tcp_wrappers 功能: 》1.拒绝192.168.2.0/24访问 》2.对192.168.1.0/24内的所有主机不作连接限制和最大传输速率限制 》3.对其他主机的访问限制为:每ip连接数为1,最大传输速率为10kb/s (在主配置文件中设置就好了) 首先保证设定tcp_wrappers=YES 然后编辑 sudo vi /etc/hosts.allow 输入 vsftpd:192.168.2.0/24: DENY (阻止192.168.2.0子网的访问) vsftpd:192.168.1.0/24 (允许192.168.1.0子网的访问) vsftpd:192.168.1.0/24: setenv VSFTPD_LOAD_CONF /etc/xxx.conf (对192.168.1.0/24指定专有配置文件xxx.conf,xxx可以自己指定文件名,需要建立) 然后建立xxx.conf文件,并编辑 (建立文件可以用sudo touch /etc/xxx.conf建立) local_max_rate=0 anon_max_rate=0 max_per_ip=0 !

Continue

没有认真读 apache 官方文档,先自己研究了一下。windows下修改httpd.conf可以用了,做笔记。 添加代码:

LoadModule python_module modules/mod_python.so <Location "/"> SetHandler python-program PythonPath "sys.path+['D:/django']" PythonHandler django.core.handlers.modpython SetEnv DJANGO_SETTINGS_MODULE plant.settings PythonInterpreter plant PythonDebug On </Location>

<Location "/media/"> SetHandler none </Location>

修改代码: DocumentRoot "D:/django/plant" 静态文件路径。 不知道配置是否有问题 ,先做一个小搭建个环境做测试。 看官方文档后再修改。

Continue