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,成功,不足指出肯请指出!
系统环境 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,成功,不足指出肯请指出!