Ubuntu12.04下配置vsftp服务的过程及常见问题分析

来源:互联网 发布:触摸屏查询软件制作 编辑:程序博客网 时间:2024/04/29 04:12
Ubuntu12.04下配置vsftp服务的过程及常见问题分析

系统环境 Ubuntu12.04, vsftp版本version 2.3.5

1、本人要求
可对ftp服务器的所有文件进行任何操作

2、vsftpd的安装
$ sudo apt-get install vsftpd

查看vsftpd版本
$ vsftpd -v
vsftpd: version 2.3.5

3、vsftpd的配置
首先,备份默认配置文件
# cp /etc/vsftpd.conf /etc/vsftpd.conf.old 

修改配置文件,以下只列出部分配置项,其它的若不清楚就保持原来的值
# vim /etc/vsftpd.conf

listen=YES             #启用独立vsftpd服务器
#listen_ipv6=YES       不需要,注释掉
anonymous_enable=YES   #本服务器需要匿名访问
local_enable=YES       #要用虚拟用户,需要本地访问的(关于本地用户和虚拟用户不要迷茫,稍后解释)
write_enable=YES       #需要本地用户对文件进行修改和删除
#local_umask=022     FTP上传文件权限 ,默认是077,本服务器每个虚拟用户都有上传权限设置,总的就留空注释掉了
#anon_upload_enable=YES 是否允许匿名用户上传,不需要匿名上传注释掉
#anon_mkdir_write_enable=YES 是否允许匿名用户的写和创建目录的权限,不要匿名管理,注释掉
dirmessage_enable=YES 当切换目录时,是否显示该目录下message隐藏文件的内容,这个用来显示登录信息的 设为YES
message_file=Welcome     显示的欢迎信息,在ftp目录下建Welcome的文件,里面写上登录信息即可,一般人常用.message隐藏文件
xferlog_enable=YES 是否激活上传和下载的日志,需要
connect_from_port_20=YES 是否启动FTP数据端口20的连接请求  需要
chown_uploads=YES 是否改变上传文件的所有者,我这里需要改变上传文件所有者
chown_username=virtual 改变上传文件的所有着为virtual,这个virtual用户一会要新建的,用来实现虚拟用户登录
xferlog_file=/var/log/vsftpd.log 上传/下载日志文件所默认的路径
xferlog_std_format=YES 是否使用标准的ftpd xferlog日志格式
idle_session_timeout=600 是否将在用户会话空闲10分钟后被中断
data_connection_timeout=120 是否将在数据连接空闲2分钟后被中断
#nopriv_user=ftpsecure 是否运行vsftpd需要的非特殊系统用户默认nobody  不需要
#async_abor_enable=YES 是否是否允许运行特殊的FTP命令async   不要
ascii_upload_enable=YES 是否启用上传的ascii传输方式   需要
ascii_download_enable=YES 是否启用下载的ascii传输方式   需要
ftpd_banner=Welcome to blah FTP service. 用户连接服务器后显示信息,显示信息可以随便写
#deny_email_enable=YES 是否允许某些匿名用户使用邮件地址(默认的)

guest_enable=YES             使用虚拟用户
guest_username=virtual       将虚拟用户等同本地用户 virtual
user_config_dir=/etc/vsftpd/vsftpd_user_conf   虚拟用户配置文件夹
pam_service_name=vsftpd.vu    虚拟用户加密设置
local_root=/home/vsftpd        指定文件目录

修改完成保存退出

4、使用虚拟用户登录
# mkdir  /home/vsftpd
# groupadd virtual
# useradd virtual -d /home/vsftpd -s /bin/false -g virtual
# chown virtual:virutal /home/vsftpd

其中用户名必须和配置文件vsftpd.conf中chown_username=virtual和guest_username=virtual两项的参数相同。

5、创建虚拟用户数据库,即ftp登录的帐号与密码
新建loguser.txt文件,
# vim /home/loguser.txt
里面输入虚拟用户名和密码,格式如下
admin
password

先装一个软件
# apt-get install db4.7-util

新建一个文件夹,放置配置文件
# mkdir /etc/vsftpd

然后执行
# db4.7_load -T -t hash -f /home/loguser.txt /etc/vsftpd/vsftpd_login.db

最后设置一下数据库文件的访问权限
# chmod 600 /etc/vsftpd/vsftpd_login.db

配置PAM文件
新建/etc/pam.d/vsftpd.vu
# vim /etc/pam.d/vsftpd.vu

输入内容如下:
auth required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

6、配置用户信息
# mkdir /etc/vsftpd/vsftpd_user_conf
# cd /etc/vsftpd/vsftpd_user_conf

创建admin文件并输入
# vim admin
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/home/vsftpd

7、重启vsftpd
# /etc/init.d/vsftpd restart

以下是测试中遇到错误:
[root@(none) tmp]# ftp 192.168.2.200                                            
Connected to 192.168.2.200.                                                     
220 Welcome to blah FTP service.                                                
Name (192.168.2.200:root): admin                                                
331 Please specify the password.                                                
Password:                                                                       
500 OOPS: vsftpd: refusing to run with writable root inside chroot()            
Login failed.                                                                   
ftp> 
原因: 网上查找发现新版的vsftpd为增强安全性,不允许chroot的目录(即 /home/vsftpd)具有写权限。
于是
# chmod a-w /home/vsftpd
# /etc/init.d/vsftpd restart

再次测试
[root@(none) tmp]# ftp 192.168.2.200                                            
Connected to 192.168.2.200.                                                     
220 Welcome to blah FTP service.                                                
Name (192.168.2.200:root): admin                                                
331 Please specify the password.                                                
Password:                                                                       
230 Login successful.                                                           
Remote system type is UNIX.                                                     
Using binary mode to transfer files.                                            
ftp> ls                                                                         
200 PORT command successful. Consider using PASV.                               
150 Here comes the directory listing.                                           
226 Transfer done (but failed to open directory).                               
ftp> get fan.txt                                                                
local: fan.txt remote: fan.txt                                                  
200 PORT command successful. Consider using PASV.                               
550 Failed to open file.                                                        
ftp> 
仍然有错误,看来原因是ftp用户对chroot的目录(即 /home/vsftpd)没有使用权限。

于是,修改admin用户的配置
# vim /etc/vsftpd/vsftpd_user_conf/admin
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/home/vsftpd/admin   既然对chroot的目录没有权限,那么就访问子目录

对应的,创建该文件夹
# mkdir /etc/vsftpd/admin
# /etc/init.d/vsftpd restart

再次测试
[root@(none) tmp]# ftp 192.168.2.200                                            
Connected to 192.168.2.200.                                                     
220 Welcome to blah FTP service.                                                
Name (192.168.2.200:root): admin                                                
331 Please specify the password.                                                
Password:                                                                       
230 Login successful.                                                           
Remote system type is UNIX.                                                     
Using binary mode to transfer files.                                            
ftp> ls                                                                         
200 PORT command successful. Consider using PASV.                               
150 Here comes the directory listing.                                           
-rwxr-xr-x    1 0        0              11 Jun 18 14:34 fan.txt                 
-rw-r--r--    1 0        0              15 Jun 18 09:40 loguser.txt             
226 Directory send OK.                                                          
ftp> get loguser.txt                                                            
local: loguser.txt remote: loguser.txt                                          
200 PORT command successful. Consider using PASV.                               
150 Opening BINARY mode data connection for loguser.txt (15 bytes).             
226 Transfer complete.                                                          
15 bytes received in 0.0139 secs (1.1 Kbytes/sec)                               
ftp> 
 
OK,成功,不足指出肯请指出!
0 0
原创粉丝点击