Linux中搭建FTP服务
简介
此教程使用的Linux版本是CentOS 6.5,使用的FTP服务器是vsftpd,针对的用户是Linux小白用户。
一、安装
1、安装vsftpd服务相关部件
【检查】 rpm -qa | grep vsftpd
【安装】 yum install vsftpd
2、安装PAM服务相关部件
简单的说,PAM是一种认证机制,在此场景下主要用于ftp服务的用户权限认证。
【检查】rpm -qa | grep pam 【安装】yum install pam
3、安装DB4部件包
这里要特别安装一个db4的包,用来支持文件数据库,把添加的虚拟用户以文件数据库形式保存。
【检查】rpm -qa | grep db4 【安装】yum install db4
二、建立vsftpd虚拟宿主用户
虚拟用户并不是系统用户,也就是说这些FTP的用户在系统中是不存在的。他们的总体权限其实是集中寄托在一个在系统中的某一个用户身上的,所谓vsftpd的虚拟宿主用户,就是这样一个支持着所有虚拟用户的宿主用户。由于他支撑了FTP的所有虚拟的用户,那么他本身的权限将会影响着这些虚拟的用户。因此出于方便性考虑,此处直接使用Linux系统已经内置的用户ftp。(注:如果处于安全性的考虑的话,应该是重新创建一个用户,并禁止此用户登录系统的权限)
【修改密码】passwd ftp
三、修改vsftpd的配置文件
1、修改vsftpd的主配置文件
因为是Linux小白用户,所以我一般习惯在Windows上编辑好文件,然后直接上传替换掉,当然也可以用以下命令直接在shell窗口中编写
【备份】 cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.backup
【编辑】 vi /etc/vsftpd/vsftpd.conf

# 不允许匿名访问 anonymous_enable=NO # # 本地用户可以访问。注意:主要是为虚拟宿主用户,如果该项目设定为NO那么所有虚拟用户将无法访问 local_enable=YES # # 可以进行写操作 write_enable=YES # # 上传后文件的权限掩码 local_umask=022 # # 禁止匿名用户上传 anon_upload_enable=NO # # 禁止匿名用户建立目录 anon_mkdir_write_enable=NO # # 开启目录标语功能 dirmessage_enable=YES # # 开启日志记录功能 xferlog_enable=YES # # 端口20进行数据传输 connect_from_port_20=YES # # 禁止上传文件更改宿主 chown_uploads=NO # # 设定Vsftpd的服务日志保存路径。 # 注意,该文件默认不存在。必须要手动touch出来 # 必须注意给与该用户(默认root作为服务宿主用户)对日志的写入权限,否则服务将启动失败。 xferlog_file=/var/log/vsftpd.log # # 日志使用标准的记录格式 xferlog_std_format=YES # # 支撑vsftpd服务的宿主用户(默认是root) # nopriv_user=ftpsecure # # 支持异步传输功能. async_abor_enable=YES # # 支持ASCII模式的上传和下载功能. ascii_upload_enable=YES ascii_download_enable=YES # # 禁止所有用户(行1)登出自己的FTP主目录,无一例外(行2) chroot_local_user=YES chroot_list_enable=NO #chroot_list_file=/etc/vsftpd/chroot_list # 禁止用户登陆FTP后使用"ls -R"的命令 ls_recurse_enable=NO # # 设定该Vsftpd服务工作在StandAlone模式下 listen=YES # # 设定PAM服务下Vsftpd的验证配置文件名。因此,PAM验证将参考/etc/pam.d/下的vsftpd文件配置 pam_service_name=vsftpd # # 设定userlist_file中的用户将不得使用FTP userlist_enable=YES # # 设定支持TCP Wrappers tcp_wrappers=YES # 启用虚拟用户功能 guest_enable=YES # # 指定虚拟用户的宿主用户 guest_username=ftp # # 设定虚拟用户的权限符合他们的宿主用户 virtual_use_local_privs=YES # # 虚拟用户个人的配置文件存放目录 user_config_dir=/etc/vsftpd/vuconf
2、建立vsftpd的日志文件,并更该属主为vsftpd的服务宿主用户(默认root无须设置)
touch /var/log/vsftpd.log
3、建立虚拟用户配置文件存放路径(虚拟用户个性话化设置)
mkdir /etc/vsftpd/vuconf/
四、制作虚拟用户数据库文件
1、先建立虚拟用户名单文件:
touch /etc/vsftpd/virtusers
建立了一个虚拟用户名单文件,这个文件就是来记录vsftpd虚拟用户的用户名和口令的数据文件,我这里给它命名为virtusers。为了避免文件的混乱,我把这个名单文件就放置在/etc/vsftpd/下。
2、编辑虚拟用户名单文件:
vi /etc/vsftpd/virtusers ---------------------------- zhangsan 123456 lisi 123456 wangwu 123456 ---------------------------- 【保存并退出编辑】Esc + : + wq
编辑这个虚拟用户名单文件,在其中加入用户的用户名和口令信息。格式很简单:“一行用户名,一行口令”。
3、生成虚拟用户数据文件:
db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
五、设定PAM验证文件,并指定虚拟用户数据库文件进行读取
1、查看原来的Vsftp的PAM验证配置文件:
cat /etc/pam.d/vsftpd ---------------------------------------------------------------- #%PAM-1.0 session optional pam_keyinit.so force revoke auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed auth required pam_shells.so auth include system-auth account include system-auth session include system-auth session required pam_loginuid.so ----------------------------------------------------------------
2、备份并编辑:
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.backup vi /etc/pam.d/vsftpd ---------------------------------------------------------------- #%PAM-1.0 auth sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/virtusers account sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/virtusers
以上两条是删除默认数据之后手动添加的,内容是对虚拟用户的安全和帐户权限进行验证。
auth是指对用户的用户名口令进行验证。accout是指对用户的帐户有哪些权限哪些限制进行验证。
注意:
vi /etc/pam.d/vsftpd中手动添加的2条
auth sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/virtusers
如果是64位的需要改成:
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
----------------------------------------------------------------------------------
六、虚拟用户的配置
1、建立虚拟用户个性化的配置文件

local_root=/mnt/vsftp/test/00001 anonymous_enable=NO write_enable=YES local_umask=022 anon_upload_enable=NO anon_mkdir_write_enable=NO idle_session_timeout=300 data_connection_timeout=90 max_clients=1 max_per_ip=1 local_max_rate=25000 chroot_list_enable=NO
2、规划好虚拟用户的具体目录:
mkdir /mnt/vsftpd/test/00001
3、更改虚拟用户的主目录的属主为虚拟宿主用户:
chown -R ftp /mnt/vsftpd/
七、启动服务:
service vsftpd start
八、测试
本人使用windows下的FlashFXP软件进行测试
补充:
500 OOPS:错误
有可能是你的vsftpd.con配置文件中有不能被实别的命令,还有一种可能是命令的YES 或 NO 后面有空格。
我遇到的是命令后面有空格。因为我是用GEDIT来编辑的配置文件
550 权限错误,不能创建目录和文件
解决方法: 关闭selinux
# vi /etc/selinux/config
将 SELINUX=XXX -->XXX 代表级别
改为
SELINUX=disabled
重启
(完)