弹性计算云Eucalyptus安装及使用(centos5.3版)
1.首先先看看如何使用:这里要参考两篇文章。 第一篇
与 第二篇第3步以后部分
2.安装过程分为4步:
(1)下载安装包,参考 此篇前两步
(2) 安装并启动云服务
(3) 配置云
(4) 加载镜像文件并对外提供服务
1.首先先看看如何使用:这里要参考两篇文章。 第一篇
与 第二篇第3步以后部分
2.安装过程分为4步:
(1)下载安装包,参考 此篇前两步
(2) 安装并启动云服务
(3) 配置云
(4) 加载镜像文件并对外提供服务
Eucalyptus配置篇参考我的blog: Eucalyptus安装到centos 5.3配置日志
配置完Eucalyptus之后,下一步要做的就是加载image到VMs。image的下载可以使用这个路径: Ubuntu-image
然后去你自己搭建的云上: https://localhost:8443
,在证书选项卡出下载证书。过程和 使用Eucalyptus 一致 。
然后先建一个目录,然后将你的admin的证书放入这个文件夹中,设置下证书和此文件夹的访问权限。在生成一个admin的privatekey。这几步可以参见 安装Eucalyptus日志中的第4步(到 add key结束,后面的可以不做) 。
然后解压刚才下载的Ubuntu-image, cd到你的解压目录下开始敲命令:
首先要加密image,然后制作manifest.xml:
euca-bundle-image -i xen-kernel/vmlinuz-2.6.27.21-0.1-xen --kernel true (这里xen可以改为kvm如果你装的是
kvm的虚拟机。另外vmlinuz的版本可能不一致,需要自己调整一下,kvm的好像是generic的).然后再执行下面的命令将kernel
添加到Walrus中:
euca-upload-bundle -b ubuntu-kernel-bucket -m /tmp/vmlinuz-2.6.27.21-0.1-xen.manifest.xml
下一步将kernel注册到Eucalyptus中:
euca-register ubuntu-kernel-bucket/vmlinuz-2.6.27.21-0.1-xen.manifest.xml
以上这两句中ubuntu-kernel-bucket并不在当前目录下。但是放心的敲好了..注册成功后会给你一个kenerlID(EKI
这个要记下).下几步是加载和注册ramdisk,几乎和kenerl类似:
euca-bundle-image -i xen-kernel/initrd-2.6.27.21-0.1-xen --ramdisk true
euca-upload-bundle -b ubuntu-ramdisk-bucket -m /tmp/initrd-2.6.27.21-0.1-xen.manifest.xml
euca-register ubuntu-ramdisk-bucket/initrd-2.6.27.21-0.1-xen.manifest.xml
这里也会打印ramdiskID(\$ERI 这里也要记下),然后加载并注册image,其中这里的\$EKI和\$ERI就是上一步打印出来
的语句:
euca-bundle-image -i euca-ubuntu-9.04-x86_64ubuntu.9-04.x86-64.img --kernel \$EKI --ramdisk \$ERI
euca-upload-bundle -b ubuntu-image-bucket -m /tmp/ubuntu.9-04.x86-64.img.manifest.xml
euca-register ubuntu-image-bucket/ubuntu.9-04.x86-64.img.manifest.xml
结束。这里你应该能看到一个emi,这个就是传说中的imageID.
下面你可以用另一台机器输入https://XXXIP:8443来访问了..并且可以[使用euca2ools](http://blog.csdn.net/cctt_1/archive/2009/09/14/4550332.aspx)
来使用这个云了!
首先按照我过去的一篇 搭建云计算平台 Eucalyptus安装 centos5.3安装日志
应该可以启动云了。
然后你可以使用命令: ps aux | grep euca 来查看是否云真的启动了。如果你看到一大堆输出,那应该已经可以启动了。
前端需要进行的配置需要添加cluster,添加node,然后生成加密用的keys.
其命令为:
1 | $EUCALYPTUS/usr/sbin/euca_conf -addcluster <clustername> <clusterhost> |
这里的$EUCALYPTUS就是你的安装目录。例如我使用的命令就是 /opt/eucalyptus/usr/sbin/euca_conf -XXXXXX,因
为我就在一台机器上部署,没有使用集群。clustername是你对自己集群的称呼,clusterhost是我的hostname,我就写localhost。然
后第二步添加node时,
对于node也要做些配置。但是如果你是使用yum或者使用binary安装包进行安装的,那就没有必要了。但是如果是使用源代码进行安装的就要费些周折。据网上传言
说:首先要在建立一个/usr/local/instances目录,这个目录是用来临时存放vm
images的,并且传说移入此中的东西都会被删除。然后再执行以下类似的脚本(这里的xen可以改为kvm):
1 | for x in hostname1 hostname2 ... hostnameN ; do / ssh $x |
结束前端和node的配置之后,使用firefox敲一下地址: https://localhost:8443.是不是出来和open.Eucalyptus.co
m中apply相似的东东?不过没有apply,其用户名密码都为admin.进入后进行配置。可以改下用户名密码,然后填写下自己的email.然后配置下 URL
of the Walrus service,我这里配置这个URL的前缀还是localhost.然后保存之后就进入管理界面了…配置完成。可以让别人申请一个帐
户试试。你可以在users选项卡中Approve他们。
我只是记点流水帐,不是技术文档。
1。首先找到文档 http://open.eucalyptus.com/wiki/EucalyptusPrerequisites_v1.5.2
看看安装前需要准备什么。
2。去 http://open.eucalyptus.com/downloads
下载一个安装包。我使用的是centos5.3
3.解压缩后进入那个解压的目录。这步可以以后再做。
4。添加各种可能需要的包:
//为了和让时钟同步 yum install -y ntp ntpdate pool.ntp.org //安装xen虚拟机 yum install -y
xen sed --in-place ‘s/#(xend-http-server no)/(xend-http-server yes)/’ /etc/xen
/xend-config.sxp sed --in-place ‘s/#(xend-address localhost)/(xend-address
localhost)/’ /etc/xen/xend-config.sxp /etc/init.d/xend restart
//为了让Eucalyptus正常运行 yum install -y java-1.6.0-openjdk ant ant-nodeps dhcp
bridge-utils
然后开放firewall的端口,输入:system-config-securitylevel 我只是开放了端口8443, 8773, 8774 ,8775四
个端口。传说对于前端前三个端口是必须开的。对于Node来说8775是必须开的。但是Eucalyptus建议:最好把全部的防火墙都关了吧。可见这个项目仅仅是实
现
了云,但是对于云的安全性尚没有考虑。
5。这里前端要安装的命令如下:(这里所说的前端是指和用户打交道的一个PC,node可以看作是集群中的一个节点),以下命令中的x86_64可以替换。我安装时就
使用的586. 安装云的命令中x86_64有的又变为i386.不过不管怎样。似乎是把里面的rpm包都安装完即可。
//安装第三方软件 cd eucalyptus-1.5.2-rpm-deps-x86_64 rpm -Uvh
aoetools-21-1.el4.x86_64.rpm / euca-axis2c-1.5.0-2.x86_64.rpm / euca-
rampartc-1.2.0-1.x86_64.rpm / vblade-14-1mdv2008.1.x86_64.rpm cd … //安装云 rpm
-Uvh eucalyptus-1.5.2-1.x86_64.rpm / eucalyptus-cloud-1.5.2-1.x86_64.rpm /
eucalyptus-gl-1.5.2-1.x86_64.rpm / eucalyptus-cc-1.5.2-1.x86_64.rpm
6。Node要安装的包
cd eucalyptus-1.5.2-rpm-deps-x86_64 rpm -Uvh aoetools-21-1.el4.x86_64.rpm /
euca-axis2c-1.5.0-2.x86_64.rpm / euca-rampartc-1.2.0-1.x86_64.rpm / euca-
libvirt-1.5-1.x86_64.rpm / vblade-14-1mdv2008.1.x86_64.rpm
//安装node controller rpm -Uvh eucalyptus-1.5.2-1.x86_64.rpm / eucalyptus-
gl-1.5.2-1.x86_64.rpm / eucalyptus-nc-1.5.2-1.x86_64.rpm
7。我这里为了方便。将node和front-end(前端)放在一个PC上。不知道是否可行,姑且一试。执行完第五步后,再回到
eucalyptus-1.5.2-rpm-deps-i586, 安装 euca-libvirt-1.5-1.i386.rpm
,然后再回上级目录安装eucalyptus-nc-1.5.2-1.i386.rpm
8. 然后根据指示输入:su eucalyptus -c “virsh list” 果真fail to connect
xend,但是没有像传说中的一样,我这里没有显示Domain -0.
9.暂时不管它,前端要执行
/etc/init.d/eucalyptus-cloud start /etc/init.d/eucalyptus-cc start
10. Node要执行:/etc/init.d/eucalyptus-nc start
11。对于我来说要在同一台PC上执行这三个操作。执行cloud时说You should have at least 32 loop
devices。可以使用命令:ls -l /dev/loop* | wc -l 来查看你现在有几个loop device.如果小于32,vim
/etc/modprobe.conf(这里不同的机器可能有所不同),增加一行:options loop max_loop=64,然后modprobe
loop。再输入ls-l /dev/loop* | wc -l 看看是否为64。
如果是64之后继续敲命令。可能会在启动nc的时候报出失败:
You should have at least 32 loop devices
Starting Eucalyptus services: Node Controller cannot be started: errors in
/opt/eucalyptus/var/log/eucalyptus/euca_test_nc.log
我查看了以下/opt/eucalyptus/var/log/eucalyptus/euca_test_nc.log这个文件。有以下几行。
libvir: Xen Daemon error : internal error failed to connect to xend
libvir: Xen Daemon error : unable to connect to ‘localhost:8000’: Connection
refused
libvirt error: unable to connect to ‘localhost:8000’: Connection refused
(code=38)
难道是8000端口没有开?关闭防火墙和SELinux之后,再试。结果还是这个错误。莫非是有什么软件没有装?再试试这个命令:
yum install -y java-1.6.0-openjdk-devel ant ant-nodeps libvirt-devel curl-devel /
httpd httpd-devel apr-devel openssl-devel dhcp
结果还是不行。看来不是包没有装。再使用su eucalyptus -c "virsh list" 命令,得到的信息为" libvir: 错误 : 操作失败 :
xenProxyOpen错误: 连接到管理程序失败。那可能是xend 服务没有看。使用xend start结果抛出了异常。
(不能使用system-config-services来查看xend是否已经启动。因为我查看过,结果为对勾,害我又查了很久。)如何开启呢?
首先要重启,grub会有新的一行出现(在重启之前一定要先关闭SElinux,方法为system-config-securitylevel的第二个选项卡,
选择禁止即可。否则进入Xen会等待很长时间。)。进入Xen之后。首先Xend start,然后可以使用xm list。这次你应该能看到
那个domain-0了吧。之后就使用eucalyptus的命令启动即可。不过可能还会遇到loop device less than 32的警告。
再次更改 /etc/modprobe.conf文件,加入 options loop max_loop=64 保存后在命令行中输入:modprobe loop即可。
再使用下面的命令:
eucalyptus-cloud start
eucalyptus-cc start
eucalyptus-nc start
cloud启动时可能会有Is cloud alread start?的提示。如果不放心就使用eucalyptus-cloud restart好了。这次应该啥错误都没有了!
安装结束!(我只用了一台机器安装云...多台的暂时没有尝试。)
如果出现了以下的错误:
Restarting Eucalyptus cluster controller: (13)Permission denied: make_sock:
could not bind to address [::]:8774
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:8774
no listening sockets available, shutting down
Unable to open logs
Failed to start the CC!
那一定是system-config-security中,防火墙没有置为disable或者seLinux没有置为passivate或者disable导致的。
我只是记流水帐。不是说明文档…
1.首先到 https://mayhem9.cs.ucsb.edu:8443/
(因为证书的问题,你需要添加一个例外,我这里使用的是FireFox,不知道其他的浏览器是否有同样的问题)。
2. 之后你就能看到

3.注册后,拿到帐号,check下email,然后就可以登录了。下一步,点击Download
Certificate下载。(虽然我现在不知道这个是干什么的。)
之后最好结合 http://blog.csdn.net/cctt_1/archive/2009/09/14/4550332.aspx
这篇文章来应用。我貌似是写错了位置…
我只是记点流水帐,不是技术文档。
1。首先找到文档 http://open.eucalyptus.com/wiki/EucalyptusPrerequisites_v1.5.2
看看安装前需要准备什么。
2。去 http://open.eucalyptus.com/downloads
下载一个安装包。我使用的是centos5.3
3.因为下载时间过慢,所以顺便下载了一个 euca2ools
。按照文档的指示安装。结果说缺少swig.然后使用yum upgrade,再yum install swig.
4.安装完毕后,使用下面的命令:
sudo -s rpm -Uvh python25-libs-2.5.1-bashton1.i386.rpm
python25-2.5.1-bashton1.i386.rpm euca2ools-1.0-1.i386.rpm
//后面三个是euca2ools中的三个文件。
安装成功后配置证书:证书的下载要现注册一个帐号。证书获得可以参考 我的blog
.然后解压证书。并输入以下命令(进入/.euca后执行解压命令):
mkdir ~/.euca cd ~/.euca chmod 0700 ~/.euca chmod 0600 ~/.euca/* . eucarc
//最后一个配置环境文件。你只要找到相应的eucarc文件即可。
然后你就可以使用那些命令了…例如euca-XXXX。例如输入euca-describle-images 传说就能看到自己的image
ID.但是我却没有看到。不过我还是继续尝试命令。euca-add-keypair mykey > mykey.private
.然后就可以看到生成了mykey.private。之后在chmod 0600 mykey.private 这句只不过是为了安全。之后euca-run-
instances -k mykey -n
这个命令里我还是没有imageID.不过imageID可以从 https://mayhem9.cs.ucsb.edu:8443/#images
得到,也可以使用euca-describle-images
-a.然后你会看到如下的输出内容:
IMAGE eki-D29C1495 ttylinux-kernel/vmlinuz-2.6.16.33-xen.manifest.xml
admin available public x86_64 kernel
IMAGE emi-2D08128F ttylinux-image/ttylinux.img.manifest.xml admin
available public x86_64 machine
IMAGE eki-A70313EB vdebian-kernel/vmlinuz-2.6.24-19-xen.manifest.xml
admin available public x86_64 kernel
IMAGE eri-002A152F vdebian-ramdisk/initrd.img-2.6.24-19-xen.manifest.xml
admin available public x86_64 ramdisk
IMAGE emi-E8D41123 vdebian-image/vdebian.img.manifest.xml admin
available public x86_64 machine
IMAGE eki-300A15CA ttylinux-
kernel-i386/vmlinuz-2.6.16.33-xen.manifest.xml admin available public
i386 kernel
IMAGE emi-7D1B13CD ttylinux-image-i386/ttylinux.img.manifest.xml admin
available public i386 machine
IMAGE eki-00C81523 vdebian-kernel-i386/vmlinuz-2.6.24-19-xen.manifest.xml
admin available public i386 kernel
IMAGE eri-5FB81668 vdebian-
ramdisk-i386/initrd.img-2.6.24-19-xen.manifest.xml admin available
public i386 ramdisk
IMAGE emi-33E9125A vdebian-image-i386/vdebian.img.manifest.xml admin
available public i386 machine
IMAGE emi-EDBC1AC5 public-euca-test-3-1241020869/public-euca-
test-3-1241020869.raw.manifest.xml yan available public i386
machine
IMAGE emi-042211C4 my-images-bkt/ttylinux.img.manifest.xml iravana
available public i386 machine
IMAGE eki-618C1258 kernel2627/vmlinuz-2.6.27.21-0.1-xen.manifest.xml
admin available public i386 kernel
IMAGE eri-5C861240 ramdisk2627/initrd-2.6.27.21-0.1-xen.manifest.xml
admin available public i386 ramdisk
IMAGE emi-AD9013E6 ubuntu-jaunty/ubuntu.9-04.x86-64.img.manifest.xml
admin available public i386 machine
IMAGE emi-6BDF15B8
server-668309-1243550256/server-668309-1243550256.raw.manifest.xml arania
available public i386 machine
IMAGE emi-EFBB13FA
pmor-696423-1245204942/pmor-696423-1245204942.raw.manifest.xml itatc
available public i386 machine
IMAGE emi-73201BF6 dpe-eucalyptus-745793-1246037237/dpe-
eucalyptus-745793-1246037237.raw.manifest.xml jjones available
public i386 machine
IMAGE emi-D0F719CB steve13-test2-880525-1250176080/steve13-test2-880525-1
250176080.raw.manifest.xml SteveL available public i386
machine
IMAGE emi-916B1414 test-bundled-vol-ubuntu-ec2/image.manifest.xml admin
available public x86_64 machine
IMAGE emi-7D7E0EC5 test-bundle-11/image.manifest.xml admin
available public x86_64 machine
第二列就是你可以使用的image.不过有些可能没有kernel,有些没有random disk,可能不能使用。所以最好去那个网站上
https://mayhem9.cs.ucsb.edu:8443/#images
找合适的。找到后,按照上面的命令输入:euca-run-
instances -k mykey -n 1 emi-AD9013E6 我选择生成一个ubuntu的实例。然后会看到如下的输出:
RESERVATION r-3C7907AD chico chico-default
INSTANCE i-3BCA0634 emi-AD9013E6 0.0.0.0 0.0.0.0 pending
2009-09-14T07:31:05.127Z eki-618C1258 eri-5C861240
看到第二行为instance,就是你生成的instance,它的id为 i-3BCA0634.然后你可以看它的具体描述:传说需要自己配这个实例的IP,不过我
使用的是Eucalyptus已经搭建起来的云,所以就不用配置了。看看这个实例的描述,使用命令euca-describle-
instances,看到如下的输出:
RESERVATION r-3C7907AD chico default
INSTANCE i-3BCA0634 emi-AD9013E6 128.111.45.39 128.111.45.39
pending 0 m1.small 2009-09-14T07:31:05.127Z epc
eki-618C1258 eri-5C861240
这个和上面的差不多。但是你可以看到那个实例ID后面有 128.111.45.39
128.111.45.39,如果是亚马逊的弹性计算云,前面的就是外部IP,后面的就是内部ip. Eucalyptus可能简单些,就有一个ip.那我们怎么登录
上去呢?亚马逊的使用方法是http://
@
[email protected]输入命令后再根据提示输入yes.你将看到:
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
To access official Ubuntu documentation, please visit:
http://help.ubuntu.com/
Last login: Sun May 10 18:38:38 2009 from localhost.localdomain
root@ubuntu:~#
哈哈~得到另一个新的操作系统!还有一个好处就是增加了很多硬盘空间。你可以使用df
-lh查看以下。所有的ubuntu命令都可以在那上面使用了!使用完毕后,别忘记关掉instances.使用命令:euca-terminate-
instances
describle-instances查看那些实例,状态应该会被标记为terminate.
对我们个人而言。Eucalyptus以及亚马逊的弹性云EC2都让你多了控制网上电脑的能力。但是对于灰鸽子的制造者来说,他们提供了24小时服务,并且是合法的,
不过缺点就是要收费。
yum是什么
yum = Yellow dog Updater, Modified
主要功能是更方便的添加/删除/更新RPM包.
它能自动解决包的倚赖性问题.
它能便于管理大量系统的更新问题
yum特点
可以同时配置多个资源库(Repository)
简洁的配置文件(/etc/yum.conf
自动解决增加或删除rpm包时遇到的倚赖性问题
使用方便
保持与RPM数据库的一致性
yum安装
CentOS自带(yum-.noarch.rpm)
#rpm -ivh yum-.noarch.rpm
在第一次启用yum之前首先需要导入系统的RPM-GPG-KEY:
#rpm --import /usr/share/doc/centos-release-3(4)/RPM-GPG-KEY-CentOS-3(4)
yum指令
注:当第一次使用yum或yum资源库有更新时,yum会自动下载所有所需的headers放置于/var/cache/yum目录下,所需时间可能较长.
rpm包的更新
检查可更新的rpm包
#yum check-update
更新所有的rpm包
#yum update
更新指定的rpm包,如更新kernel和kernel source
#yum update kernel kernel-source
大规模的版本升级,与yum update不同的是,连旧的淘汰的包也升级
#yum upgrade
rpm包的安装和删除
安装rpm包,如xmms-mp3
#yum install xmms-mp3
删除rpm包,包括与该包有倚赖性的包
#yum remove licq
注:同时会提示删除licq-gnome,licq-qt,licq-text
yum暂存(/var/cache/yum/)的相关参数
清除暂存中rpm包文件
#yum clean packages
清除暂存中rpm头文件
#yum clearn headers
清除暂存中旧的rpm头文件
#yum clean oldheaders
清除暂存中旧的rpm头文件和包文件
#yum clearn 或#yum clearn all
注:相当于yum clean packages + yum clean oldheaders
包列表
列出资源库中所有可以安装或更新的rpm包
#yum list
列出资源库中特定的可以安装或更新以及已经安装的rpm包
#yum list mozilla#yum list mozilla*
注:可以在rpm包名中使用匹配符,如列出所有以mozilla开头的rpm包
列出资源库中所有可以更新的rpm包
#yum list updates
列出已经安装的所有的rpm包
#yum list installed
列出已经安装的但是不包含在资源库中的rpm包
#yum list extras
注:通过其它网站下载安装的rpm包
rpm包信息显示(info参数同list)
列出资源库中所有可以安装或更新的rpm包的信息
#yum info
列出资源库中特定的可以安装或更新以及已经安装的rpm包的信息
#yum info mozilla#yum info mozilla*
注:可以在rpm包名中使用匹配符,如列出所有以mozilla开头的rpm包的信息
列出资源库中所有可以更新的rpm包的信息
#yum info updates
列出已经安装的所有的rpm包的信息
#yum info installed
列出已经安装的但是不包含在资源库中的rpm包的信息
#yum info extras
注:通过其它网站下载安装的rpm包的信息
搜索rpm包
搜索匹配特定字符的rpm包
#yum search mozilla
注:在rpm包名,包描述等中搜索
搜索有包含特定文件名的rpm包
#yum provides realplay
增加资源库
例如:增加rpm.livna.org作为资源库
安装Livna.org rpms GPG key
#rpm --import [ http://rpm.livna.org/RPM-LIVNA-GPG-KEY ](http://rpm.livna.org
/RPM-LIVNA-GPG-KEY)
检查GPG Key
显示Key信息
#rpm -qi gpg-pubkey-a109b1ec-3f6e28d5
(注:如果要删除Key,使用#rpm -e gpg-pubkey-a109b1ec-3f6e28d5)
yum常用的命令
这三个都是一组为单位进行升级 列表和删除的操作。。比如 "Mysql Database"就是一个组会同时操作相关的所有软件包;
yum常用的源
由于yum中有的mirror速度是非常慢的,如果yum选择了这个mirror,这个时候yum就会非常慢,对此,可以下载fastestmirror插件,它会自
动选择最快的mirror:
#yum install yum-fastestmirror
配置文件:(一般不用动)/etc/yum/pluginconf.d/fastestmirror.conf
你的yum镜像的速度测试记录文件:/var/cache/yum/timedhosts.txt
(2)使用图形界面的yum
如果觉得命令行的yum不方便,那么可以使用图形化的yumex,这个看起来更方便,因为可以自由地选择软件仓库:
#yum install yumex
然后在系统工具中就可以看到yum extender了。实际上系统自带的“添加/删除程序“也可以实现图形化的软件安装,但有些yumex的功能它没有
如果你想更新源可以使用以下的方法:
cd /etc/yum.repos.d
mv CentOS-Base.repo CentOS-Base.repo.save
wget http://centos.ustc.edu.cn/CentOS-Base.repo.5
mv CentOS-Base.repo.5 CentOS-Base.repo
这是更新成为中科大的源,其他源如下:
163: http://mirrors.163.com/.help/CentOS-Base-163.repo
说检查点,其实就是对过去历史的记录,可以认为是log.不过这里进行了简化.举例来说,我现在又一段文本.文本里放有一堆堆的链接地址.我现在的任务是下载那些地址
中的内容.另外因为网络的问题或者网站的问题,每次下载可能不会非常的成功.有可能出现断链或者socket异常错误。不过不管产生什么样的错误,我都希望我的程序能
够一直跑下去。或者能停掉后,继续从为下载的链接处跑。而不是从开始的地方跑。这个问题非常简单。因为这些链接是上下文无关的(上下文有关的情况要另外分析)。所以我
只要记录程序运行停止前的最后一条,就有希望能够延续前面的工作。这里实现中使用的是记录原有的链接,大家也可以使用计数器的方法来记录。代码如下:
将文件读取指针fd移至到检查点对应的内容处 # check point 的规则为,读取文件一行或者多行,进行操作后,将此一行或多行送入 #
检查文件check_point中。以后再次运行程序,即可从该检查点处继续运行。 def GoCheckPoint(fd,check_point): if
not os.path.isfile(check_point): f_check = open(check_point,‘w’)
f_check.close() f_check = open(check_point,‘r’) lines = f_check.readlines() if
len(lines) > 0: check_content = lines[-1] #找到检查点最后一行 check_content =
check_content.strip(’ /n/r’) # go to check point while True: content =
fd.readline() if content == ‘’: # eof raise CheckPointMissContentError if
content.strip(’ /n/r’) == check_content: break f_check.close()#关闭检查点
有了上面一段还是不够的,需要下面的代码补充:
f = open(downloadlist) # check_point file name,这里为自动生成一个检查点文件 check_point =
file[0:file.rfind(‘.’)]+‘_check.txt’ Util.GoCheckPoint(f,check_point)
#这就是上面代码中的GoCheckPoint函数 f_check = open(check_point,‘a’)# 以追加方式写入 try: while
True: content = f.readline() if content == ‘’: # eof break content =
content.strip(’ /n/r’) if content != ‘’: # has download url
time.sleep(sleep_time) DownloadOper(path,url)
#这里是伪代码…可以认为是urllib.request.retrieve()函数或者是urllib.request.urlopen()啥的 #
作为响应的操作后再将内容写入检查点文件 f_check.write(content+‘/n’) f_check.flush() #
必须的,否则会缓存,不会写入硬盘中 except : # 蹦个异常也不怕,以后再次按F5执行即可 raise Exception() return
Util.FAILURE # 这是我设置的常量,大家认为是0或者1就可以了 finally: f.close() f_check.close()# 关闭文件
print(‘Downloading is done…’) return Util.SUCCESS
执行完操作之后再写入到检查点文件中。以后程序挂掉,只要检查点文件还在,就可以延续前面的工作。不过这里的检查点相对于数据库中事务处理的检查点还是太简单了点。
python socket.error: [Errno 10054] 远程主机强迫关闭了一个现有的连接。问题解决方案:
前几天使用python读取网页。因为对一个网站大量的使用urlopen操作,所以会被那个网站认定为攻击行为。有时就不再允许下载。导致urlopen()后,r
equest.read()一直卡死在那里。最后会抛出errno 10054.
这个错误是connection reset by peer.也就是传说的远端主机重置了此连接。原因可能是socket超时时间过长;也可能是request =
urllib.request.urlopen(url)之后,没有进行request.close()操作;也可能是没有sleep几秒,导致网站认定这种行为是攻
击。
具体解决方案如下面的代码:
import socket import time timeout = 20
socket.setdefaulttimeout(timeout)#这里对整个socket层设置超时时间。后续文件中如果再使用到socket,不必再设置
sleep_download_time = 10 time.sleep(sleep_download_time) #这里时间自己设定 request =
urllib.request.urlopen(url)#这里是要读取内容的url content = request.read()#读取,一般会在这里报异常
request.close()#记得要关闭
因为urlopen之后的read()操作其实是调用了socket层的某些函数。所以设置socket缺省超时时间,就可以让网络自己断掉。不必在read()处一
直等待。
当然你也可以再外层再写几个try,except,例如:
try: time.sleep(self.sleep_download_time) request =
urllib.request.urlopen(url) content = request.read() request.close() except
UnicodeDecodeError as e: print(‘-----UnicodeDecodeError url:’,url) except
urllib.error.URLError as e: print(“-----urlError url:”,url) except
socket.timeout as e: print(“-----socket timout:”,url)
一般来说就莫有问题了。我测试了几千个网页的下载,然后才说出此话。不过如果是下载成千上万的,我做了下测试,ms还是会跳出这个异常。可能是time.sleep(
)的时间太短,也可能是网络突然中断。我使用urllib.request.retrieve()测试了一下,发现不停的下载数据,总会有失败的情况出现。
简单的处理方法是:首先参照的我的文章: python检查点简单实现
。先做一个检查点。然后将以上会跑出异常的那段代码while True一下。参见下面的伪代码:
def Download_auto(downloadlist,fun,sleep_time=15): while True: try: # 外包一层try
value = fun(downloadlist,sleep_time) # 这里的fun是你的下载函数,我当函数指针传进来。 # 只有正常执行方能退出。
if value == Util.SUCCESS: break except : # 如果发生了10054或者IOError或者XXXError
sleep_time += 5
#多睡5秒,重新执行以上的download.因为做了检查点的缘故,上面的程序会从抛出异常的地方继续执行。防止了因为网络连接不稳定带来的程序中断。
print(‘enlarge sleep time:’,sleep_time)
不过对于找不到相应的网页,又要做另外的一番处理:
blocks_read: print (‘Connection opened’) if total_size < 0: print (‘Read %d
blocks’ % blocks_read) else: # 如果找不到,页面不存在,可能totalsize就是0,不能计算百分比
print(‘downloading:%d MB, totalsize:%d MB’ %
(blocks_read*block_size/1048576.0,total_size/1048576.0)) def
Download(path,url): #url =
‘http://downloads.sourceforge.net/sourceforge/alliancep2p/Alliance-v1.0.6.jar’
#filename = url.rsplit(“/”)[-1] try: # python自带的下载函数
urllib.request.urlretrieve(url, path, reporthook) except IOError as e: #
如果找不到,好像会引发IOError。 print(“download “,url,”/nerror:”,e) print(“Done:%s/nCopy
to:%s” %(url,path))
如果大家还是遇到了问题…请再评论里注上其他解决方案。
** 作者: ** 北南南北,正在修订之中
** 来自: ** LinuxSir.Org (此处为文章地址)
** 摘要: ** vsFTPD是一款小巧易用FTP服务器程序;本文面向初学者的一点疑问,能让初学者在最短的时间内学会最简单的vsftpd服务器的架设;本文应该算是初学者练手篇;正在更新之中;本文基于 vsftpd-2.0.3;
** 欢迎大家共同修订本教程,有些功能的实现,需要大家参与; ** 您可以以留言的形式参与,我会每天把大家的留言整理加入文档;谢谢。
** 目录 **
1、vsFTPd,目前常用FTP服务器套件;
2、ftp 用户管理解说;
2.1、匿名ftp 用户和用户组的理解;
2.2、匿名ftp 用户和ftp用户组是否可以删除;
3、vsFTPd的安装;
4、vsFTPd的服务器的启动和关闭;
4.1、vsFTPd服务器启动和关闭的通用方法;
4.2、在Fedora/Redhat/CentOS中vsFTPd 服务器的启动和关闭:
5、vsFTPd的服务器和防火墙及SELINUX的关系;
6、500 OOPS: vsftpd: refusing to run with writable anonymous root
7、关于vsFTPd配置文件的说明;
8、关于vsFTPd服务器的一些常用功能的实现;
8.1、关于匿名上传下载的实现;
8.2、关于添加本地用户及打开读写权限示例;
8.4、如何实现虚拟路径?
8.5、打开vsFTP服务器的日志功能;
8.6、如何定制欢迎信息;
8.7、硬盘空间有限,如何把帐号ftp默认的路径/var/ftp更改到别处?
8.8、如何让vsFTP服务器限制链接数,以及每个IP最大的链接数?
8.9、如何限制传输速度?
8.10、如何有选择的把用户限制在家目录中呢?
**
+++++++++++++++++++++++++++++++++++++++++++
正文
+++++++++++++++++++++++++++++++++++++++++++
**
** 1、vsFTPd,目前常用FTP服务器套件; **
vsFTPd是一款在Linux发行版中最受推崇的FTP服务器程序;特点是小巧轻快,安全易用;能让其自身特点得发发挥和掌握,也然最主要的是会用;
目前在开源操作系统中常用的FTPD套件主要有ProFTPD、PureFTPd和wuftpd等;至于哪个FTP服务器套件更好,哪个是你最熟悉的,哪个就是最好的
;
** 2、ftp 用户管理解说; **
FTP服务器对用户的管理,在默认的情况下是根据 /etc/passwd及/etc/group
来进行的,所以我们一定要了解Linux系统用户和用户组的管理,用户和用户组的管理是一切应用的的基础,有的弟兄不想去了解基础的东西,就想一步成架好
各种服务器,事实证明这种学习方法是最不明智的;虽然在您可能在几分钟启动了ftp服务器,但遇到问题时,您不一定能知道是哪里出错;所以基础还是极为重 要的;
** 推荐文章: ** 《Linux 用户(user)和用户组(group)管理概述》
** 2.1、匿名ftp 用户和用户组的理解; **
当我们访问各大FTP上访问时,可能我们不去想我们以什么身份登录的,如果他的FTP允许匿名登录的话;比如我们在浏览器上打入;
ftp://mirrors.kernel.org 或 ftp://ftp:[email protected]
我们会发现上面的两行最终都能访问,而且显示的结果也完全一样,最终都跳到 ftp://mirrors.kernel.org
地址;那我们访问这个FTP时,是不是有用户和密码呢?是的,也是需要在的,只是在服务器端允许匿名访问,而匿名访问的用户名和密码都是ftp,只是我们
因为匿名访问,没有感觉到他有用户名和密码罢了。第二个地址就是以ftp用户,密码也是ftp来访问 ftp://mirrors.kernel.org;
如果我们以ftp命令连接 mirrors.kernel.org 时,我们会发现需要输入用户ftp,密码ftp才能访问;
在FTP服务器中,匿名用户的用户名和密码都是ftp ;这个用户可以在您的操作系统中的 /etc/passwd 中能找得到;可能有类似下面的一行;
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
** 说明: **
/etc/passwd 是系统用户的配置文件;/etc/group是系统用户组配置文件,您可以通过 《Linux
用户(user)和用户组(group)管理概述》
及其相关文档中了解一些用户管理的一些基础知识;
在ftp用户这行中,我们看到七个字段,每个字段写字段之间用:号分割;
ftp 是用户名
x 是密码字段,是隐藏的;
14 是用户的UID字段,可以自己来设定,不要和其它用户的UID相同,否则会造成系统安全问题;
50 用用户组的GID,可以自己设定,不要和其它用户组共用FTP的GID,否则会造成系统全全问题;
FTP User 是用户说明字段;
/var/ftp 是ftp用户的家目录,可以自己来定义;
/sbin/nologin 这是用户登录SHELL ,这个也是可以定义的,/sbin/nologin
表示不能登录系统;系统虚拟帐号(也被称为伪用户)一般都是这么设置。比如我们把ftp用户的/sbin/nologin 改为 /bin/bash
,这样ftp用户通过本地或者远程工具ssh或telnet以真实用户身份登录到系统。这样做对系统来说是不安全的;如果您认为一个用户没有太大的必要登
录到系统,就可以只给他FTP帐号的权限,也就是说只给他FTP的权限,而不要把他的SHELL设置成 /bin/bash 等;
** 关于ftp用户组的理解: **
我们查看 /etc/group 的时候,会发现类似这样一条;
ftp:x:50:
/etc/group 是用户组的管理配置文件,上面这行表示用户组ftp,x是密码段,50是GID;我们对照在/etc/passwd中的ftp那行得知ftp用
户是属于ftp用户组的,因为ftp用户那行中的GID和ftp用户组的GID是相同的;
** 2.2、匿名ftp 用户和ftp用户组是否可以删除 **
在一般情况下是不能把/etc/passwd和/etc/group
中有把ftp用户和用户组的行删除的,因为FTP服务器是需要他们来对FTP用户实现管理,在默认的情况下。
虽然不能删除,但对/etc/passwd及/etc/group中的ftp用户及ftp用户组的一些相关的东西是能修改的;比如我们可以把ftp
用户的家目录改掉,也可以把ftp用户的UID改掉 … …
前提是你对用户管理有所了解,系统用户管理是一切应用基础之一,可能初学Linux的弟兄并不了解用户管理的重要性,但慢慢您就会发现这个道理;
** 3、vsFTPd的安装; **
在最新的各大发行版中的安装盘中都有vsFTPd的软件包,您用相应发行版提供的软件包管理工具就能安装上;当然您可以到各大发行版的FTP镜像中
找到vsftpd的软件包;当然也能用软件包的管理工具在线安装;vsftpd的软件包本来不大,花不了多长时间,两分钟就够了吧;因为本文是初学者教
程,我严重推荐您用发行版提供的软件来安装,不推荐您自己来编译源码包的安装方式;
** 如果您用的是Fedora 或Redhat 系统,可以用下面的命令在线安装; **
[root@localhost ~]# yum install vsftpd
** 如果是debian 类系统,可以用apt 来在线安装; **
[root@localhost ~]# apt-get install vsftpd
** 如果您是RPM的系统,也可以找到vsftpd-xxxx.rpm 的包来通过rpm命令来安装; **
[root@localhost ~]# rpm -ivh vsftpd*.rpm
** 您可以下载源码包来安装 **
比如我们下载的是 vsftpd-2.0.3.tar.gz ;
[root@localhost ~]# tar zxvf vsftpd-2.0.3.tar.gz [root@localhost ~]# cd vsftpd-2.0.3 [root@localhost ~]# make ;make install [root@localhost ~]# cp vsftpd.conf /etc
然后修改/etc/vsftpd.conf ,在配置文件的最后一行加入下面一行;
listen=yes
源码包安装的方法,如果您的系统是RPM包管理的系统,可以删除/etc/xinetd.d/vsftpd 这个文件;然后启动xinetd 服务器;
[root@localhost ~]# /etc/init.d/xinetd restart 停止 xinetd: [ 确定 ] 启动 xinetd: [ 确定 ]
vsFTPd运行有两种模式,在RPM包管理的系重审统,大多是由Fedora/Redhat
开发而来,对于这样的系统有xinted服务器一说;对于非RPM包管理的系统,一般没有xinted这一说。为了保证本文档的统一,我们都不要用
xinetd模式,而用initd运行模式来启动和管理服务器,也就是独立运行模式; 至于什么是xinted和inted 模式,您可以参考 《
用vsFTPd自架Linux网络安装服务器》
** 4、vsFTPd的服务器的启动和关闭; **
vsFTPd服务器启动和关闭是极容易的;我们可以直接把服务器运行调到后台运行;这是几乎所有服务器管理的运行方式;
** 4.1、vsFTPd服务器启动和关闭的通用方法; **
运行vsftpd命令,要用到root权限,如果您当前操作用户并非是root,可以用su切换到root权限;关于root权限的切换,您有两种方式,一种是su,
另一种是sudo; ** 请参考: ** 《Linux 系统中的超级权限的控制》
** vsFTPd服务器的运行; **
[root@localhost ~]# /usr/sbin/vsftpd & [root@localhost ~]# /usr/local/sbin/vsftpd &
** vsFTPd服务器是否运行起来; **
我们可以通过pgrep vsftpd 来查看vsftpd是否运行起来;
[root@localhost ~]# pgrep vsftpd 4248
上面显示vsFTPd服务器运行起来了,您可以通过ftp命令、lftp工具或gftp或其它的FTP客户端来测试连接;
** vsFTPd 服务器关闭: **
我们用pkill vsftpd 来杀死vsftpd进程,这样就把vsFTPd关闭,用psgrep vsftpd
来查看进程,如果没有进程,证明vsFTPd已经关掉;当然也要用到root权限。
[root@localhost ~]# pkill vsftpd [root@localhost ~]# pgrep vsftpd
** 4.2、在Fedora/Redhat/CentOS中vsFTPd 服务器的启动和关闭: **
在Fedora/Redhat/CentOS中,也可以用下面的方法来启动vsFTPd;当然也要用到root权限;
[root@localhost beinan]# /etc/init.d/vsftpd start 为 vsftpd 启动 vsftpd: [ 确定 ]
重新启动vsFTPd用下面的命令;
[root@localhost beinan]# /etc/init.d/vsftpd restart 关闭 vsftpd: [ 确定 ] 为 vsftpd 启动 vsftpd: [ 确定 ]
关掉vsFTPd服务器,应该用下面的命令;
[root@localhost beinan]# /etc/init.d/vsftpd stop 关闭 vsftpd: [ 确定 ]
** 5、vsFTPd的服务器和防火墙及SELINUX的关系;(重要) **
我在论坛上看到有些弟兄说vsFTPd服务器启动正常,但却不能访问或用户不能上传文件,我感觉应该是防火墙或SELINUX的事;可能FTPD服
务器被防火墙或SELINUX的安全机制防住了。所以您必须要让防火墙通过ftp,当然也要让SELINUX通过ftp服务器才行;
在Fedora/Redhat/CentOS中,您要设置一下防火墙,可以把防火墙关掉,或者在自定义中让ftp “通过”防火墙;
[root@localhost ~]# system-config-securitylevel-tui
或者运行一下如下的命令,清除防火墙规则(通用);
[root@localhost beinan]# iptables -F
关于SELINUX服务器的解说
,可能老手或新手对SELINUX都有点麻烦,建议您SELINUX;或者让vsFTPd服务器跳过SELINUX启动;也就是说要用到 **
4.1、vsFTPd服务器启动和关闭的通用方法; **
;这在Fedora/Redhat/CentOS中这样启动vsFTPd服务器是有效的;
当然您可也可以关掉SELINUX,在/etc/selinux/config 配置文件如下;
` /etc/selinux/config
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - SELinux is fully disabled.
SELINUX=Disabled #这样就把SELINUX服务器关掉了,请重新启动系统;
# targeted - Only targeted network daemons are protected.
# strict - Full SELinux protection.
SELINUXTYPE=targeted `
** 6、500 OOPS: vsftpd: refusing to run with writable anonymous root **
如果我们已经把vsFTPd服务器启动好了,但登录测试是会出现类似下面的提示;
500 OOPS: vsftpd: refusing to run with writable anonymous root
这表示ftp用户的家目录的权限不对,应该改过才对;
[root@localhost ~]# more /etc/passwd |grep ftp ftp:x:1000:1000:FTP User:/var/ftp:/sbin/nologin
我们发现ftp用户的家目录在/var/ftp,就是这个/var/ftp的权限不对所致,这个目录的权限是不能打开所有权限的;是您运行了chmod 777
/var/ftp所致;如果没有ftp用户这个家目录,当然您要自己建一个;
如下FTP用户的家目录是不能针对所有用户、用户组、其它用户组完全开放;
[root@localhost ~]# ls -ld /var/ftp drwxrwxrwx 3 root root 4096 2005-03-23 /var/ftp
** 修正这个错误,应该用下面的办法; **
[root@localhost ~]# chown root:root /var/ftp [root@localhost ~]# chmod 755 /var/ftp
有的弟兄可能会说,那匿名用户的可读、可下载、可上传怎么办呢?这也简单,在/var/ftp下再建一个目录,权限是777的就行了,再改一改vsftpd.conf
就OK了;没有什么难的;
vsFTPd出于安全考虑,是不准让ftp用户的家目录的权限是完全没有限制的,您可以去读一下vsFTPd的文档就明白的了;否则也不能称为最安全的FTP服务器了
,对不对?
** 7、关于vsFTPd配置文件的说明; **
vsftpd.conf是vsFTPd服务器的配置文件,此文件一般是/etc/vsftpd.conf或/etc/vsftpd/vsftpd.conf
,以系统为准吧。。
vsftpd.conf配置文件就是vsFTPd服务器的全局控制文件,此配置文件中,每行应该算做一个规则;前面带有#号的服务器不会解释,这和apache
的配置文件类似;#后所接的内容一般是说明性的,或者是关掉某些功能的选项;
vsftpd.conf
这个配置文件并不包括所有您想实现的功能,有些功能的实现,我们要自己动手来解决,我们要学会查vsFTPd的文档和FAQ等,虽然是英文的,但都是比较
简单的;我们要习惯看洋文文档,为什么呢?因为Linux本来就是洋人厉害,重量级的软件都是洋人的。呵,兄弟不要抱怨,谁让我们落后了呢?
** 注意: ** 修改完配置文件后,一定要重启vsFTPd服务器才能生效,切记~~
** 8、关于vsFTPd服务器的一些常用功能的实现; **
** 8.1、关于匿名上传下载的实现; **
关于匿名上传,其实也比较简单,首先我们要修改一下vsftpd.conf ,此文件位于
/etc/目录下,可能是/etc/vsftpd.conf,也可能是/etc/vsftpd/vsftpd.conf文件。以您的系统环境为准;
** 首先:我们要改一下vsftpd.conf,确保有以下几行; **
anonymous_enable=YES anon_upload_enable=YES anon_mkdir_write_enable=YES anon_umask=022
** 其次:在ftp用户家目录的下建一个文件夹,并修改其权限为完全开放; **
ftp用户的家目录在哪?我们前面已经说了,要通过/etc/passwd来查看;也可以通过finger ftp来查看;
[root@localhost beinan]# finger ftp Login: ftp Name: FTP User Directory: /var/ftp Shell: /sbin/nologin
这说明ftp用户的家目录在/var/ftp
,我们要在这个目录下建一个目录,然后把他的权限设置为任何用户可读可写可执行就行了;一般的情况下,在发行版中,有一个/var/ftp/pub的目
录,如果没有,您也可以自己建一个;把配置文件改好后,只要把/var/ftp下的任何一个目录的权限打开,都可以用来匿名上传和下载;
比如您想让匿名用户上传和下载都在/var/ftp/pub,就可以把/var/ftp/pub的权限打开,如果没有这个目录,您要自己建一个;
[root@localhost ~]# mkdir /var/ftp/pub [root@localhost ~]# chmod 777 /var/ftp/pub
这样上传的时候传到pub目录就OK了,对不对??
** 8.2、关于添加本地用户及打开读写权限示例; **
FTP用户一般是不能登录系统的,这也是为了安全。在系统中,没有权限登录系统的用户一般也被称之为虚拟用户;虚拟用户也是要写进/etc
/passwd中;这只是一种虚拟用户的方法,但说实在的并不是真正的虚拟用户,只是把他登录SHELL的权限去掉了,所以他没有能力登录系统;
如果我们想把beinan这个用户目录定位在/opt/beinan这个目录中,并且不能登录系统;我们应该如下操作
[root@localhost ~]# adduser -d /opt/beinan -g ftp -s /sbin/nologin beinan [root@localhost ~]# passwd beinan Changing password for user beinan. New password: Retype new password: passwd: all authentication tokens updated successfully. [root@localhost ~]#
其实这还是不够的,还要改一下配置文件vsftpd.conf ,以确保本地虚拟用户能有读写权限;
local_enable=YES write_enable=YES local_umask=022
** 8.4、如何实现虚拟路径? **
** 比如: **
/home/a 映射为 ftp://localhost/a /home/b/c 则为 ftp://localhost/c
其实这个不能说是vsFTPd的内容,其实我们早就接触过了,可能我们没有注意,我们可以通过如下的方法来实现。
[root@localhost ~]# mount --bind [原有的目录] [新目录]
比如我的ftp的默认目录是/var/ftp,我想把/mnt/LinG/WinSoft文件夹,映射到/var/ftp目录中,我就如下操作
我们要先在/var/ftp目录中建一个目录
[root@localhost ~]# mkdir /var/ftp/WinSoft
然后执行mount命令
[root@localhost ~]# mount --bind /mnt/LinG/WinSoft /var/ftp/WinSoft
这样就OK了。
** 8.5、打开vsFTP服务器的日志功能; **
把下面xferlog_file前面的#号对掉,也就是把vsftp的log功能打开,这样我们就能在/var/log目录下查看vsftpd.log。这是vsFT
P的日志功能,这对于我们来说是极为重要的。
xferlog_file=/var/log/vsftpd.log
** 8.6、如何定制欢迎信息; **
如何定制欢迎信息,也就是我们登入有些FTP之后,会出现类似:欢迎您来到LinuxSir
FTP,在这里,您会得到最真诚的帮助,如果有什么问题和建议,请来信,多谢。
实现这个并不难,我们可以查看vsftpd.conf文件中,是否有这行。
dirmessage_enable=YES message_file=.message
如果没有就加上,如果dirmessage_enable=YES前面有#号,就把#号去掉。其实FTP信息默认的就是.message,所以可以不加
message_file= 来指定。自己指定也行,无所谓的事;
然后我们制定一个.message文件,写上您想要写的东西,比如是.message的内容是如下的:
\--欢迎您来到LinuxSir FTP! \--在这里,您会得到最真诚的帮助; \--如果有什么问题和建议,请来信,多谢。
我们可以用编辑器来写这个.message,我想这个过程就不用说了吧。
然后我们把.message这个文件复制到各个用户的家目录中。比如我的FTP的一个用户是beinan,这个用户所在的家目录是/opt/beinan
我们就要把.message放在/opt/beinan这个目录下。如果系统用户ftp,他的目录就是/var/ftp这个目录,这个是默认的,当匿名用
户登入时就访问的是/var/ftp这个目录。我们要让匿名用户能看到欢迎信息。就要把.message放在/var/ftp目录中。其它的用户,也无非
就是类似的操作。
** 8.7、硬盘空间有限,如何把帐号ftp默认的家目录更改到别处? **
我的硬盘空间有限,如何把帐号ftp默认的路径/var/ftp更改到别处?或者是,我的linux所有的目录都放在/根分区,因为空间紧张,我能否把ftp这个用户
的默认路径放到别的分区??
对于ftp这个用户的管理,我们应该查看/etc/passwd ,然后修改ftp用户那行;
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
比如我们想把ftp用户的家目录改为/opt/ftp,则要把类似上一行改为
ftp:x:14:50:FTP User:/opt/ftp:/sbin/nologin
然后我们要建立ftp用户的新的家目录;
[root@localhost ~]# mkdir /opt/ftp [root@localhost ~]# chmod 755 /opt/ftp [root@localhost ~]# chown root:root /opt/ftp
如果默认的ftp磁盘空间紧张,我们其实也可以用虚拟路径映射的方法来解决;也就是mount --bind的办法;看情况吧,哪个适合就是最好的方法;
** 8.8、如何让vsFTP服务器限制链接数,以及每个IP最大的链接数? **
应该改vsFTPd服务器的配制文件vsftpd.conf,加入下面的两行:
max_clients=数字 max_per_ip=数字
** 举例: ** 我想让我的vsFTP最大支持链接数为100个,每个IP,最多能支持5个链接,所以我应该在vsftpd.conf中加上如下的两行:
max_clients=100 max_per_ip=5
改好了配制文件,不要忘记启动vsftp服务器。
** 8.9、如何限制传输速度? **
anon_max_rate=数字
注:这是匿名的速度
local_max_rate=数字
注:这是vsFTP服务器上本地用户的速度
注:这个数字的单位是byte,所以我们要计算一下。比如我想让匿名用户和vsFTP上的用户都以80KB下载,所以这个数字应该是1024x80=81920
所以我们要在vsftpd.conf中加入下面的两行
anon_max_rate=81920 local_max_rate=81920
** 8.10、如何有选择的把用户限制在家目录中呢? **
我们要自己建一个文件,在/etc目录中或/etc/vsftpd目录中(假如您的vsftpd配置文件都是放在这个目录的话);
#touch /etc/vsftpd.chroot_list
以beinan和nanbei这两个用户限制在他们所在的家目录中,而其它的FTP用户不做此限制。
在vsftpd.chroot_list这个文件中,把beinan和nanbei添上去就行,注意,每个用户占一行。
beinan nanbei
然后改/etc/vsftpd/vsftpd.conf文件,找如下的两行
chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list
如果没有这样的两行,就可以自己添加上去也是一样的。
设置好后,重新vsFTPD服务器。
补充一之补充:如何把系统内所有的FTP用户都限制在家目录中呢??经juliaugong兄的提示,我查找了vsFTPd的洋文说明,证明这个选项是一刀切的解决所
有的用户都能限制在家目录中
我们可以通过更改vsftpd.conf文件,加入如下的一行
chroot_local_user=YES
改完配制文件,不要忘记重启vsFTPd服务器;
** 8.11、如何让绑定IP到vsFTPd? **
如何让绑定IP到vsFTPd?也就是说,如何让用户只能通过某个IP来访问FTP。其实这个功能很有意思。如果绑定的是内网的IP,外部是没有办法访问的。如果绑定
的是对外服务的IP,内网也只能通过对外服务的IP来访问FTP
在vsftpd.conf中加一行,以我的局域网为例,请看第一帖中的操作环境,这样外网就不能访问我的FTP了,内网也可能通过192.168.0.2来访问FTP
;
listen_address=192.168.0.2
注:近来 使用centos配置ftp,很是不顺。第一次怎么连都连不上,好像没有设置listen端口。第二次本机可以连,其他机器不能连。第三次看了此篇文章,
原来防火墙没有开放ftp.