一、下载
vsftpd的下载地址: ftp://vsftpd.beasts.org/users/cevans/ 下载的是源代码压缩包vsftpd-2.0.5.tar.gz文件,解压缩:
tar xzvf vsftpd-2.0.5.tar.gz
得到文件夹vsftpd-2.0.5,我将其拷贝到/usr/local/src目录下。
二、编译
一般vsftpd需要有nobody这个用户,该用户一般已存在,如果不存在,使用useradd nobody建立。 而且安装时需要/usr/share/empty作为临时目录,一般已存在。(可是我的系统上就没有,需要我自己建立)。查看Makefile文件得知如何编译,然后编译: make vsftpd 然后安装: make install 安装完毕,此时查看/etc/xinetd.d/目录下多出了vsftpd脚本。
三、配置
vsftpd 中常用的配置文件有两个:/etc/ftpusers和/etc/vsftpd.conf,其中以/etc/vsftpd.conf最为重要。但我安装完之后发现/etc下并没有vsftpd.conf文件,我将源代码文件夹里的vsftpd.conf文件复制到/etc目录下。 (1)/etc/ftpusers 这个配置文件很简单,只要用户的名字在此文件内,便不能使用FTP。 (2)/etc/vsftpd.conf:vsftpd的主要设定文件 vsftpd.conf中参数众多,现在我们一个个介绍它们: #如果不修改这个文件,就可以得到一个最小设置的匿名FTP服务器 #默认的设定只允许利用anonymous登录
#write_enable=YES
#write_enable=YES为允许用户有写的权限,默认值为NO
#dirmessage_enable=YES
#当用户进入某个目录时,如果该目录存在.message文件,则会显示该文件的内容,通常用来告知 #此目录存放文件的信息,默认值为NO
#nopriv_user=ftpsecure
#指定vsftpd以何帐号提供FTP服务,默认值是nobody。这样即使被cracker入侵vsftpd,cracker也仅能取得nobody的权限。
#ls_recurse_enable=YES
#ls_recurse_enable默认值为YES,代表禁用ls -Rl /,因为这个指令会耗费大量系统资源。
#no_anon_password=NO
#no_anon_password默认值为NO,代表anonymous不用输入密码就可登录FTP服务器。
#hide_ids=YES
#默认值为NO,若设置为YES,则登录FTP服务器会发现所有文件及目录其所有者及群组均为ftp
####################################################################
# Local FTP user Settings # 有关本机用户的FTP相关设置(/etc/passwd中普通用户帐号) ####################################################################
#local_enable=YES
#local_enable默认值为NO,代表/etc/passwd中普通用户不能使用FTP服务。
#local_umask=022
#local-umask的意义是Local User上传文件时,文件权限会使用所指定的umask加以运算,默认值为077
#chroot_local_user=YES
#chroot_local_user的用途是将用户的HOME目录变为其FTP登录后的根目录,如此一来,所有Local User #便不能离开起home目录。其默认值为NO。
#chroot_list_enable=YES
# chroot_list_file=/etc/vsftpd.chroot_list #若不想利用chroot_local_user=YES把所有本地用户(Local User)都限制在其home目录, #可利用chroot_list_enable=YES设定值,将某些帐号限制在home目录下 #当chroot_list_enable=YES时,登录用户名字若在/etc/vsftpd.chroot_list内 #则会启用chroot机制,将这个用户限制在其home目录下。 #chroot_list_enable默认值是NO,chroot_list_file默认值为/etc/vsftpd.chroot_list
#local_max_rate=7200
#local_max_rate用来限制Local user每秒的最高传输速度 #其单位是bytes/sec,默认值为0,就是没有限制。
################################################################
# Anonymous用户的相关配置 ################################################################
#anonymous_enable=YES
#anonymous_enable=YES,允许用户可用匿名(anonymous)或ftp帐号,不用密码就可登录FTP服务器,默认值是YES。
#anon_world_readable_only=YES
#anon_world_readable_only=YES,用来限制匿名(anonymous)用户只能下载有开放Other可以write的文件,其默认值为YES。
#anon_upload_enable=YES
#anon_upload_enable用来限制匿名(anonymous)用户可否上传文件,默认值为NO。
#anon_umask=022
#anon_umask的意义是匿名(anonymous)用户上传文件时,文件权限会用所指定的umask加以运算,默认值为077。
#anon_mkdir_write_enable=YES
#anon_mkdir_write_enable允不允许anonymous用户建立目录,其默认值为NO。
#anon_other_write_enable=YES
#所否允许anonymous用户有write的权限,不过记得通过anon_other_write_enable的限制后, #还得看打算写的目录或文件的权限允不允许anonymous用户write。
#chown_uploads=YES
#chown_username=whoever #chown_uploads用户指定anonymous帐号上传的文件是否要改变其所有者。 #chown_uploads默认值为NO,chown_username用来指定新的所有者。
#anon_max_rate=7200
#anon_max_rate用来限制anonymous用户每秒的最高传输速度, #其单位是bytes/sec,默认值是0,就是没有限制。
###############################################################
# Log Settings # 有关FTP日志的相关规定 ###############################################################
#syslog_enable=YES
#syslog_enable=YES会将本来应记录在/var/log/vsftpd.log的信息,转而传给syslogd daemon, #由syslogd的配置文件决定存于何位置。syslog_enable默认值为NO。
#log_ftp_protocol=YES
#log_ftp_protocol=YES会将所有FTP有关的请求和回应全部记录,其默认值为NO。
#xferlog_enable=YES
#xferlog_enable=YES会详细记录有关上传/下载的信息,其默认值为NO。
#vsftpd_log_file=/var/log/vsftpd.log
#vsftpd_log_file可用来指定vsftpd的log文件位置。
#xferlog_std_format=YES
#xferlog_std_format默认值为NO,若设定为YES,则log内容会采用标准xferlog格式(wu-ftpd日志文件所采用的格式)。
#xferlog_file=/var/log/xferlog
#xferlog_file用来指定wu-ftpd格式的log的存放位置。
#dual_log_enable=YES
#dual_log_enable默认值为NO,若设定为YES,则/var/log/xferlog和/var/log/vsftpd.log均会记录FTP相关日志。
#setproctitle_enable=YES
#setproctitle_enable默认值为NO,若设定为YES,则查看系统进程状态时,会列出ftp连接的状态。 #例如执行 ps -ef | grep vsftp 可看到谁正在连接。 #nobody 4424 ... vsftpd: 127.0.0.1: not logged in
################################################################
# Transfer Settings # 传输文件的相关规定 ################################################################
#connect_from_port_20=YES
#connect_from_port_20=YES代表主动模式的数据连接是用端口20,其默认值为NO。
#idle_session_timeout=600
#idle_session_timeout设定FTP客户端多久未执行任何ftp指令操作,便将其断线,默认值为300秒。
#data_connection_timeout=120
#允许数据传输时idle的秒数,默认值是300秒。
#async_abor_enable=YES
#async_abor_enable的默认值为NO,必须要FTP客户端有支持async_abort的机制才可以打开。
#ascii_upload_enable=YES
#ascii_upload_enable的默认值为NO,若设为YES则用户可用ascii方式上传数据,不过若启用此参数可能会 #导致Dos攻击,所以采用默认值。
#ascii_download_enable=YES
#同上,ascii_download_enable默认值为NO,若设为YES则用户可用ascii方式下载数据,不过若启用此参数可能会 #导致Dos攻击,所以采用默认值。
#pasv_enable=NO
#pasv_enable默认值为YES,若设为NO,FTP客户端则无法使用被动模式FTP。
#pam_service_name=vsftpd
#vsftpd PAM模块的名称,起存放在/etc/pam.d/目录。
#listen=YES
#listen默认值为NO,若设定为YES,则vsftpd会用standalone方式启动。
四、装完之后的问题
但装完之后问题多多,根本没法成功: (1)先是FTP的的主目录问题,虽然配置文件里允许匿名用户上传文件,但FTP主目录/srv/ftp却并不是允许任何用户有写的权限,所以必须在该目录下建立一个允许ftp这个匿名用户写的目录,我在/srv/ftp/目录下又建了两个目录incoming,pub,其中incoming目录的权限允许其他用户读和写,pub目录允许其他用户读,但不可写。 (2)并不是某个目录允许写或读,其下的文件就允许写或读,要想理想中的操作,还必须更改文件的权限。例如,我想下载incoming目录中的某文件,而该文件并不允许匿名用户读的话,就没法下载。所以我更改配置文件,将匿名用户上传的文件的权限都改成匿名用户可以下载的,方法是将anon_umask= 022,注意这个022是一个八进制数,其实是0022。 (3)还有就是开放端口的问题,比如我开放的FTP端口是10021,必须在SuseFirewall2中开放此端口,由于FTP的数据传输使用另一条连接,在被动模式下(个人比较喜欢被动模式,因为他可以解决某些防火墙的问题),要开放一个端口范围(通过pasv_max_port和 pasv_min_port指定),我为了方便 SuseFirewall2开放端口的方便,将这两个值都设为50000,这样SuseFirewall2就只需要再开放50000端口就行了,而不用开放一个范围。 (4)最后就是路由器的NAT问题,如果是在有网关的局域网内建FTP服务器,必须将外面对网关IP(路由器对外IP)某端口的连接转发到内网的那台服务器的IP的相应端口上。
我最后是让vsftpd以standalone的方式运行,所以listen=YES得启用,且使用的是被动模式,故pasv_enable=YES要启用。
本篇文章来源于 飞扬教程 原文链接: http://www.cnblogs.com/moonandsun/archive/2008/02/15/1070155.html |